IK.AM

@making's tech note


Deploy a Rust web app on Tanzu Application Platform

🗃 {Dev/CaaS/Kubernetes/TAP}
🏷 Cartographer 🏷 Kubernetes 🏷 Rust 🏷 TAP 🏷 Tanzu 🏷 Tanzu Build Service 
🗓 Updated at 2022-12-19T06:58:52Z  🗓 Created at 2022-12-19T06:58:52Z {✒️️ Edit  ⏰ History  🗑 Delete}  🇯🇵 Original entry

⚠️ The content of this article is not supported by VMware. Any issues arising from the content of this article are your responsibility and please do not contact VMware Support.

I created a container image for a Rust app using the rust buildpack in this article (Japanese).

This time, we will make it possible to deploy the application using the rust buildpack on Tanzu Application Platform (TAP).

To be able to use Rust with TAP, you need to add the Rust Buildpack to the ClusterStore and the Rust group to the ClusterBuilder.
From TAP 1.2 onwards, the Stores, Stacks, and Builders used are defined in the TanzuNetDependencyUpdater resource, so updating this is easy. The contents of this article cannot be used with TAP 1.1 or lower.

TanzuNetDependencyUpdater is different when using lite dependencies (default) and when using full dependenies.

In case of lite dependencies

Add the Rust Buildpack to the environment installed in this article (Japanese)

Prepare an overlay that adds ClusterStore and ClusterBuilder to TanzuNetDependencyUpdater as follows.

Have a look at the Releases of the rust buildpack and use the latest 0.21.0 at the time of writing.

cat <<EOF > buildservice-add-rust-buildpack.yaml
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"metadata":{"name":"dependency-updater"}, "kind": "TanzuNetDependencyUpdater"})
---
spec:
  inlineDescriptor:
    clusterStores:
    #@overlay/match by="name", missing_ok=True
    - name: default
      sources:
      #@overlay/append
      - image: docker.io/paketocommunity/rust:0.21.0
    clusterBuilders:
    #@overlay/match by="name", missing_ok=True
    - name: base
      order:
      #@overlay/append
      - group:
        - id: paketo-community/rust
    #@overlay/match by="name", missing_ok=True
    - name: base-jammy
      order:
      #@overlay/append
      - group:
        - id: paketo-community/rust       
EOF

Create a secret for the overlay file with the following command.

kubectl -n tap-install create secret generic buildservice-add-rust-buildpack \
  -o yaml \
  --dry-run=client \
  --from-file=buildservice-add-rust-buildpack.yaml \
  | kubectl apply -f-

Add the following element to package_overlays in tap-values.yaml.

package_overlays:
# ...
- name: buildservice
  secrets:
  - name: buildservice-add-rust-buildpack 

Update TAP with the following command:

tanzu package installed update tap -f tap-values.yaml -n tap-install

You can check the progress of the Builder update by looking at the following logs.

$ kubectl logs -n build-service deploy/dependency-updater-controller -f

If Reconcile succeeded appears after Importing ..., the upload is complete.

{"level":"info","ts":1671256567.689486,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterStack 'base'..."}
{"level":"info","ts":1671256574.6747718,"caller":"dependencyupdater/logger.go:21","msg":"Uploading to 'ghcr.io/making/buildservice'..."}
{"level":"info","ts":1671256586.5696454,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterStack 'base-jammy'..."}
{"level":"info","ts":1671256593.1804342,"caller":"dependencyupdater/logger.go:21","msg":"Uploading to 'ghcr.io/making/buildservice'..."}
{"level":"info","ts":1671256604.486676,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterStack 'default'..."}
{"level":"info","ts":1671256611.5543656,"caller":"dependencyupdater/logger.go:21","msg":"Uploading to 'ghcr.io/making/buildservice'..."}
{"level":"info","ts":1671256623.4512107,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterBuilder 'base'..."}
{"level":"info","ts":1671256623.451297,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterBuilder 'base-jammy'..."}
{"level":"info","ts":1671256623.4513245,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterBuilder 'default'..."}
{"level":"error","ts":1671256663.5169995,"caller":"controller/controller.go:566","msg":"Reconcile error","knative.dev/kind":"tanzunetdependencyupdaters.buildservice.tanzu.vmware.com","knative.dev/traceid":"dd2f47e0-eb8f-4896-acac-d652c68590cd","knative.dev/key":"build-service/dependency-updater","duration":158.1577005,"error":"Operation cannot be fulfilled on tanzunetdependencyupdaters.buildservice.tanzu.vmware.com \"dependency-updater\": the object has been modified; please apply your changes to the latest version and try again","stacktrace":"knative.dev/pkg/controller.(*Impl).handleErr\n\tknative.dev/pkg@v0.0.0-20220816153547-f78a00694307/controller/controller.go:566\nknative.dev/pkg/controller.(*Impl).processNextWorkItem\n\tknative.dev/pkg@v0.0.0-20220816153547-f78a00694307/controller/controller.go:543\nknative.dev/pkg/controller.(*Impl).RunContext.func3\n\tknative.dev/pkg@v0.0.0-20220816153547-f78a00694307/controller/controller.go:491"}
{"level":"info","ts":1671256663.54724,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterStore 'default'..."}
{"level":"info","ts":1671256669.2393765,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1671256675.8956268,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1671256681.7479155,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1671256687.4219196,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1671256693.0272758,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1671256698.7091641,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1671256704.3584926,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1671256709.986599,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1671256714.0713937,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1671256714.071569,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterStack 'base'..."}
{"level":"info","ts":1671256720.7520647,"caller":"dependencyupdater/logger.go:21","msg":"Uploading to 'ghcr.io/making/buildservice'..."}
{"level":"info","ts":1671256732.6457255,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterStack 'base-jammy'..."}
{"level":"info","ts":1671256739.3666627,"caller":"dependencyupdater/logger.go:21","msg":"Uploading to 'ghcr.io/making/buildservice'..."}
{"level":"info","ts":1671256750.342318,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterStack 'default'..."}
{"level":"info","ts":1671256756.9398577,"caller":"dependencyupdater/logger.go:21","msg":"Uploading to 'ghcr.io/making/buildservice'..."}
{"level":"info","ts":1671256769.5763338,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterBuilder 'base'..."}
{"level":"info","ts":1671256769.5764246,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterBuilder 'base-jammy'..."}
{"level":"info","ts":1671256769.5764647,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterBuilder 'default'..."}
{"level":"info","ts":1671256770.7320092,"caller":"controller/controller.go:550","msg":"Reconcile succeeded","knative.dev/kind":"tanzunetdependencyupdaters.buildservice.tanzu.vmware.com","knative.dev/traceid":"1ff28f78-bd49-4674-a765-65eca5cfe690","knative.dev/key":"build-service/dependency-updater","duration":107.3496843}
{"level":"info","ts":1663132459.9617548,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterStore 'default'..."}
{"level":"info","ts":1663132463.9133067,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1663132468.315304,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1663132472.4485848,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1663132476.4138098,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1663132480.417098,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1663132484.858053,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1663132488.84969,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1663132491.4091198,"caller":"dependencyupdater/logger.go:16","msg":"\tBuildpackage already exists in the store"}
{"level":"info","ts":1663132491.409171,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterStack 'base'..."}
{"level":"info","ts":1663132498.387017,"caller":"dependencyupdater/logger.go:21","msg":"Uploading to 'tap11046.azurecr.io/build-service'..."}
{"level":"info","ts":1663132506.5005634,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterStack 'default'..."}
{"level":"info","ts":1663132513.2477891,"caller":"dependencyupdater/logger.go:21","msg":"Uploading to 'tap11046.azurecr.io/build-service'..."}
{"level":"info","ts":1663132521.6199417,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterBuilder 'base'..."}
{"level":"info","ts":1663132521.620088,"caller":"dependencyupdater/logger.go:21","msg":"Importing ClusterBuilder 'default'..."}
{"level":"error","ts":1663132522.1857035,"caller":"controller/controller.go:564","msg":"Reconcile error","knative.dev/kind":"tanzunetdependencyupdaters.buildservice.tanzu.vmware.com","duration":62.287972661,"error":"Operation cannot be fulfilled on tanzunetdependencyupdaters.buildservice.tanzu.vmware.com \"dependency-updater\": the object has been modified; please apply your changes to the latest version and try again","stacktrace":"knative.dev/pkg/controller.(*Impl).handleErr\n\tknative.dev/pkg@v0.0.0-20210902173607-844a6bc45596/controller/controller.go:564\nknative.dev/pkg/controller.(*Impl).processNextWorkItem\n\tknative.dev/pkg@v0.0.0-20210902173607-844a6bc45596/controller/controller.go:541\nknative.dev/pkg/controller.(*Impl).RunContext.func3\n\tknative.dev/pkg@v0.0.0-20210902173607-844a6bc45596/controller/controller.go:477"}
{"level":"info","ts":1663132522.186615,"caller":"controller/controller.go:548","msg":"Reconcile succeeded","knative.dev/kind":"tanzunetdependencyupdaters.buildservice.tanzu.vmware.com","knative.dev/traceid":"12a2a247-bb21-4ce9-bd2f-5ffcc18ad8f2","knative.dev/key":"build-service/dependency-updater","duration":0.00081851}

It is easy to check the status of ClusterStore and ClusterBuilder using kp CLI.

Check the ClusterStore with the following command, and if paketo-community/rust is included, it is OK.

$ kp clusterstore status default                     
Status:    Ready

BUILDPACKAGE ID                            VERSION    HOMEPAGE
paketo-community/rust                      0.21.0     https://github.com/paketo-community/rust
tanzu-buildpacks/dotnet-core-lite          1.18.1     https://docs.vmware.com/en/VMware-Tanzu-Buildpacks/services/tanzu-buildpacks/GUID-dotnet-core-dotnet-core-buildpack.html
tanzu-buildpacks/go-lite                   2.0.2      https://docs.pivotal.io/tanzu-buildpacks/go/go-buildpack.html
tanzu-buildpacks/java-lite                 7.7.0      https://docs.vmware.com/en/VMware-Tanzu-Buildpacks/services/tanzu-buildpacks/GUID-java-java-buildpack.html
tanzu-buildpacks/java-native-image-lite    6.33.0     https://docs.vmware.com/en/VMware-Tanzu-Buildpacks/services/tanzu-buildpacks/GUID-java-native-image-java-native-image-buildpack.html
tanzu-buildpacks/nodejs-lite               1.16.0     https://docs.pivotal.io/tanzu-buildpacks/nodejs/nodejs-buildpack.html
tanzu-buildpacks/python-lite               2.1.2      
tanzu-buildpacks/ruby-lite                 1.1.0      
tanzu-buildpacks/web-servers-lite          0.3.0 

Check ClusterBuilder with the following command, if paketo-community/rust@0.21.0 is included, it is OK.

$ kp clusterbuilder status base
...

DETECTION ORDER                                     
Group #1                                            
  tanzu-buildpacks/ruby-lite@1.1.0                  
Group #2                                            
  tanzu-buildpacks/dotnet-core-lite@1.18.1          
Group #3                                            
  tanzu-buildpacks/go-lite@2.0.2                    
Group #4                                            
  tanzu-buildpacks/python-lite@2.1.2                
Group #5                                            
  tanzu-buildpacks/web-servers-lite@0.3.0           
Group #6                                            
  tanzu-buildpacks/java-native-image-lite@6.33.0    
Group #7                                            
  tanzu-buildpacks/java-lite@7.7.0                  
Group #8                                            
  tanzu-buildpacks/nodejs-lite@1.16.0               
Group #9                                            
  paketo-community/rust@0.21.0

Create a Workload. Use the app created in this article (Japanese).

tanzu apps workload apply hello-rust \
  --app hello-rust \
  --git-repo https://github.com/making/hello-rust \
  --git-branch main \
  --type web \
  -n demo \
  -y

Check the logs with stern.

stern -n demo hello-rust

You can check the log that is being built with the rust buildpack.

+ hello-rust-build-1-build-pod › setup-ca-certs
hello-rust-build-1-build-pod setup-ca-certs Create certificate...
hello-rust-build-1-build-pod setup-ca-certs Populate certificate...
hello-rust-build-1-build-pod setup-ca-certs Update CA certificates...

hello-rust-build-1-build-pod setup-ca-certs Copying CA certificates...
hello-rust-build-1-build-pod setup-ca-certs Finished setting up CA certificates

- hello-rust-build-1-build-pod › setup-ca-certs
+ hello-rust-build-1-build-pod › prepare
hello-rust-build-1-build-pod prepare Build reason(s): CONFIG
hello-rust-build-1-build-pod prepare CONFIG:
hello-rust-build-1-build-pod prepare  + env:
hello-rust-build-1-build-pod prepare  + - name: BP_OCI_SOURCE
hello-rust-build-1-build-pod prepare  +   value: main/88c425454ec5274ea2ba35441bc8d18c9aad6171
hello-rust-build-1-build-pod prepare  resources: {}
hello-rust-build-1-build-pod prepare  - source: {}
hello-rust-build-1-build-pod prepare  + source:
hello-rust-build-1-build-pod prepare  +   blob:
hello-rust-build-1-build-pod prepare  +     url: http://fluxcd-source-controller.flux-system.svc.cluster.local./gitrepository/demo/hello-rust/88c425454ec5274ea2ba35441bc8d18c9aad6171.tar.gz
hello-rust-build-1-build-pod prepare Loading secret for "ghcr.io" from secret "registry-credentials" at location "/var/build-secrets/registry-credentials"
hello-rust-build-1-build-pod prepare Loading cluster credential helpers
hello-rust-build-1-build-pod prepare Downloading fluxcd-source-controller.flux-system.svc.cluster.local./gitrepository/demo/hello-rust/88c425454ec5274ea2ba35441bc8d18c9aad6171.tar.gz...
hello-rust-build-1-build-pod prepare Successfully downloaded fluxcd-source-controller.flux-system.svc.cluster.local./gitrepository/demo/hello-rust/88c425454ec5274ea2ba35441bc8d18c9aad6171.tar.gz in path "/workspace"
- hello-rust-build-1-build-pod › prepare
+ hello-rust-build-1-build-pod › analyze
hello-rust-build-1-build-pod analyze Restoring data for SBOM from previous image
- hello-rust-build-1-build-pod › analyze
+ hello-rust-build-1-build-pod › build
hello-rust-build-1-build-pod build 
hello-rust-build-1-build-pod build Paketo Buildpack for Rustup 1.7.0
hello-rust-build-1-build-pod build   https://github.com/paketo-community/rustup
hello-rust-build-1-build-pod build   Build Configuration:
hello-rust-build-1-build-pod build     $BP_RUSTUP_ENABLED       true     use rustup to install Rust
hello-rust-build-1-build-pod build     $BP_RUSTUP_INIT_LIBC     gnu      libc implementation: gnu or musl
hello-rust-build-1-build-pod build     $BP_RUSTUP_INIT_VERSION  1        the rustup version
hello-rust-build-1-build-pod build     $BP_RUST_PROFILE         minimal  the Rust profile to install
hello-rust-build-1-build-pod build     $BP_RUST_TARGET                   an additional Rust target to install
hello-rust-build-1-build-pod build     $BP_RUST_TOOLCHAIN       stable   the Rust toolchain or version number to install
hello-rust-build-1-build-pod build   Rustup (GNU libc) 1.25.1: Contributing to layer
hello-rust-build-1-build-pod build     Downloading from https://static.rust-lang.org/rustup/archive/1.25.1/x86_64-unknown-linux-gnu/rustup-init
hello-rust-build-1-build-pod build     Verifying checksum
hello-rust-build-1-build-pod build     Copying to /layers/paketo-community_rustup/rustup-init-gnu/bin
hello-rust-build-1-build-pod build   Cargo: Contributing to layer
hello-rust-build-1-build-pod build   Rustup: Contributing to layer
hello-rust-build-1-build-pod build     Installing Rustup
hello-rust-build-1-build-pod build   Rust: Contributing to layer
hello-rust-build-1-build-pod build     Installing Rust
hello-rust-build-1-build-pod build       info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu'
hello-rust-build-1-build-pod build       info: latest update on 2022-12-15, rust version 1.66.0 (69f9c33d7 2022-12-12)
hello-rust-build-1-build-pod build       info: downloading component 'cargo'
hello-rust-build-1-build-pod build       info: downloading component 'rust-std'
hello-rust-build-1-build-pod build       info: downloading component 'rustc'
hello-rust-build-1-build-pod build       info: installing component 'cargo'
hello-rust-build-1-build-pod build       info: installing component 'rust-std'
hello-rust-build-1-build-pod build       info: installing component 'rustc'
      rust-build-1-build-pod build 
hello-rust-build-1-build-pod build         stable-x86_64-unknown-linux-gnu installed - rustc 1.66.0 (69f9c33d7 2022-12-12)
hello-rust-build-1-build-pod build       
hello-rust-build-1-build-pod build       info: default toolchain set to 'stable-x86_64-unknown-linux-gnu'
hello-rust-build-1-build-pod build       info: checking for self-updates
hello-rust-build-1-build-pod build       info: component 'rust-std' for target 'x86_64-unknown-linux-gnu' is up to date
hello-rust-build-1-build-pod build 
hello-rust-build-1-build-pod build Rust Distribution Buildpack 1.13.0
hello-rust-build-1-build-pod build   https://github.com/paketo-community/rust-dist
hello-rust-build-1-build-pod build 
hello-rust-build-1-build-pod build Paketo Buildpack for Syft 1.23.0
hello-rust-build-1-build-pod build   https://github.com/paketo-buildpacks/syft
hello-rust-build-1-build-pod build     Downloading from https://github.com/anchore/syft/releases/download/v0.62.1/syft_0.62.1_linux_amd64.tar.gz
hello-rust-build-1-build-pod build     Verifying checksum
hello-rust-build-1-build-pod build     Writing env.build/SYFT_CHECK_FOR_APP_UPDATE.default
hello-rust-build-1-build-pod build 
hello-rust-build-1-build-pod build Rust Cargo Build Pack 0.8.0
hello-rust-build-1-build-pod build   https://github.com/paketo-community/cargo
hello-rust-build-1-build-pod build   Build Configuration:
hello-rust-build-1-build-pod build     $BP_CARGO_INSTALL_ARGS        --locked                              additional arguments to pass to Cargo install
hello-rust-build-1-build-pod build     $BP_CARGO_INSTALL_TOOLS                                             additional tools to be add with Cargo install
hello-rust-build-1-build-pod build     $BP_CARGO_INSTALL_TOOLS_ARGS                                        additional arguments to pass to Cargo install for tools
hello-rust-build-1-build-pod build     $BP_CARGO_TINI_DISABLED       false                                 Skip installing tini
hello-rust-build-1-build-pod build     $BP_CARGO_WORKSPACE_MEMBERS                                         the subset of workspace members for Cargo to install
hello-rust-build-1-build-pod build     $BP_DISABLE_SBOM              false                                 Skip running SBOM scan
hello-rust-build-1-build-pod build     $BP_EXCLUDE_FILES                                                   colon separated list of glob patterns, matched source files are removed
hello-rust-build-1-build-pod build     $BP_INCLUDE_FILES             static/*:templates/*:public/*:html/*  colon separated list of glob patterns, matched source files are included
hello-rust-build-1-build-pod build   Tini 0.19.0: Reusing cached layer
hello-rust-build-1-build-pod build     Creating cached target directory /workspace/target
hello-rust-build-1-build-pod build   Rust Application: Contributing to layer
hello-rust-build-1-build-pod build     File modification times not restored
hello-rust-build-1-build-pod build     File modification times not restored
hello-rust-build-1-build-pod build     File modification times not restored
hello-rust-build-1-build-pod build     cargo install --locked --color=never --root=/layers/paketo-community_cargo/Cargo --path=.
hello-rust-build-1-build-pod build         Installing hello-rust v0.1.0 (/workspace)
hello-rust-build-1-build-pod build           Updating crates.io index
hello-rust-build-1-build-pod build        Downloading crates ...
hello-rust-build-1-build-pod build         Downloaded zstd-safe v5.0.2+zstd.1.5.2
hello-rust-build-1-build-pod build         Downloaded tokio-util v0.7.4
hello-rust-build-1-build-pod build         Downloaded adler v1.0.2
hello-rust-build-1-build-pod build         Downloaded rand_chacha v0.3.1
hello-rust-build-1-build-pod build         Downloaded cfg-if v1.0.0
hello-rust-build-1-build-pod build         Downloaded crypto-common v0.1.6
hello-rust-build-1-build-pod build         Downloaded aho-corasick v0.7.19
hello-rust-build-1-build-pod build         Downloaded cpufeatures v0.2.5
hello-rust-build-1-build-pod build         Downloaded crc32fast v1.3.2
hello-rust-build-1-build-pod build         Downloaded convert_case v0.4.0
hello-rust-build-1-build-pod build         Downloaded futures-core v0.3.24
hello-rust-build-1-build-pod build         Downloaded form_urlencoded v1.1.0
hello-rust-build-1-build-pod build         Downloaded futures-task v0.3.24
hello-rust-build-1-build-pod build         Downloaded zstd-sys v2.0.1+zstd.1.5.2
hello-rust-build-1-build-pod build         Downloaded futures-sink v0.3.24
hello-rust-build-1-build-pod build         Downloaded flate2 v1.0.24
hello-rust-build-1-build-pod build         Downloaded httpdate v1.0.2
hello-rust-build-1-build-pod build         Downloaded generic-array v0.14.6
hello-rust-build-1-build-pod build         Downloaded digest v0.10.3
hello-rust-build-1-build-pod build         Downloaded fnv v1.0.7
hello-rust-build-1-build-pod build         Downloaded cc v1.0.73
hello-rust-build-1-build-pod build         Downloaded num_threads v0.1.6
hello-rust-build-1-build-pod build         Downloaded bitflags v1.3.2
hello-rust-build-1-build-pod build         Downloaded pin-utils v0.1.0
hello-rust-build-1-build-pod build         Downloaded percent-encoding v2.2.0
hello-rust-build-1-build-pod build         Downloaded base64 v0.13.0
hello-rust-build-1-build-pod build         Downloaded indexmap v1.9.1
hello-rust-build-1-build-pod build         Downloaded memchr v2.5.0
hello-rust-build-1-build-pod build         Downloaded miniz_oxide v0.5.4
hello-rust-build-1-build-pod build         Downloaded parking_lot v0.12.1
hello-rust-build-1-build-pod build         Downloaded pin-project-lite v0.2.9
hello-rust-build-1-build-pod build         Downloaded mime v0.3.16
hello-rust-build-1-build-pod build         Downloaded rand v0.8.5
hello-rust-build-1-build-pod build         Downloaded quote v1.0.21
hello-rust-build-1-build-pod build         Downloaded ppv-lite86 v0.2.16
hello-rust-build-1-build-pod build         Downloaded num_cpus v1.13.1
hello-rust-build-1-build-pod build         Downloaded serde_urlencoded v0.7.1
hello-rust-build-1-build-pod build         Downloaded scopeguard v1.1.0
hello-rust-build-1-build-pod build         Downloaded rustc_version v0.4.0
hello-rust-build-1-build-pod build         Downloaded h2 v0.3.14
hello-rust-build-1-build-pod build         Downloaded tinyvec_macros v0.1.0
hello-rust-build-1-build-pod build         Downloaded futures-util v0.3.24
hello-rust-build-1-build-pod build         Downloaded actix-web-codegen v4.1.0
hello-rust-build-1-build-pod build         Downloaded actix-web v4.2.1
hello-rust-build-1-build-pod build         Downloaded alloc-no-stdlib v2.0.4
hello-rust-build-1-build-pod build         Downloaded unicode-ident v1.0.3
hello-rust-build-1-build-pod build         Downloaded signal-hook-registry v1.4.0
hello-rust-build-1-build-pod build         Downloaded slab v0.4.7
hello-rust-build-1-build-pod build         Downloaded tinyvec v1.6.0
hello-rust-build-1-build-pod build         Downloaded zstd v0.11.2+zstd.1.5.2
hello-rust-build-1-build-pod build         Downloaded typenum v1.15.0
hello-rust-build-1-build-pod build         Downloaded block-buffer v0.10.3
hello-rust-build-1-build-pod build         Downloaded url v2.3.1
hello-rust-build-1-build-pod build         Downloaded autocfg v1.1.0
hello-rust-build-1-build-pod build         Downloaded alloc-stdlib v0.2.2
hello-rust-build-1-build-pod build         Downloaded derive_more v0.99.17
hello-rust-build-1-build-pod build         Downloaded itoa v1.0.3
hello-rust-build-1-build-pod build         Downloaded firestorm v0.5.1
hello-rust-build-1-build-pod build         Downloaded cookie v0.16.0
hello-rust-build-1-build-pod build         Downloaded encoding_rs v0.8.31
hello-rust-build-1-build-pod build         Downloaded time v0.3.14
hello-rust-build-1-build-pod build         Downloaded version_check v0.9.4
hello-rust-build-1-build-pod build         Downloaded local-waker v0.1.3
hello-rust-build-1-build-pod build         Downloaded unicode-normalization v0.1.21
hello-rust-build-1-build-pod build         Downloaded semver v1.0.13
hello-rust-build-1-build-pod build         Downloaded tracing-core v0.1.29
hello-rust-build-1-build-pod build         Downloaded language-tags v0.3.2
hello-rust-build-1-build-pod build         Downloaded regex v1.6.0
hello-rust-build-1-build-pod build         Downloaded time-macros v0.2.4
hello-rust-build-1-build-pod build         Downloaded syn v1.0.99
hello-rust-build-1-build-pod build         Downloaded serde_json v1.0.85
hello-rust-build-1-build-pod build         Downloaded lock_api v0.4.8
hello-rust-build-1-build-pod build         Downloaded tokio v1.21.1
hello-rust-build-1-build-pod build         Downloaded libc v0.2.132
hello-rust-build-1-build-pod build         Downloaded smallvec v1.9.0
hello-rust-build-1-build-pod build         Downloaded once_cell v1.14.0
hello-rust-build-1-build-pod build         Downloaded actix-server v2.1.1
hello-rust-build-1-build-pod build         Downloaded proc-macro2 v1.0.43
hello-rust-build-1-build-pod build         Downloaded tracing v0.1.36
hello-rust-build-1-build-pod build         Downloaded serde v1.0.144
hello-rust-build-1-build-pod build         Downloaded actix-macros v0.2.3
hello-rust-build-1-build-pod build         Downloaded brotli v3.3.4
hello-rust-build-1-build-pod build         Downloaded sha1 v0.10.4
hello-rust-build-1-build-pod build         Downloaded regex-syntax v0.6.27
hello-rust-build-1-build-pod build         Downloaded actix-router v0.5.0
hello-rust-build-1-build-pod build         Downloaded local-channel v0.1.3
hello-rust-build-1-build-pod build         Downloaded jobserver v0.1.24
hello-rust-build-1-build-pod build         Downloaded brotli-decompressor v2.3.2
hello-rust-build-1-build-pod build         Downloaded httparse v1.8.0
hello-rust-build-1-build-pod build         Downloaded actix-service v2.0.2
hello-rust-build-1-build-pod build         Downloaded actix-rt v2.7.0
hello-rust-build-1-build-pod build         Downloaded rand_core v0.6.3
hello-rust-build-1-build-pod build         Downloaded unicode-bidi v0.3.8
hello-rust-build-1-build-pod build         Downloaded socket2 v0.4.7
hello-rust-build-1-build-pod build         Downloaded ryu v1.0.11
hello-rust-build-1-build-pod build         Downloaded bytestring v1.1.0
hello-rust-build-1-build-pod build         Downloaded actix-http v3.2.2
hello-rust-build-1-build-pod build         Downloaded log v0.4.17
hello-rust-build-1-build-pod build         Downloaded paste v1.0.9
hello-rust-build-1-build-pod build         Downloaded parking_lot_core v0.9.3
hello-rust-build-1-build-pod build         Downloaded mio v0.8.4
hello-rust-build-1-build-pod build         Downloaded http v0.2.8
hello-rust-build-1-build-pod build         Downloaded idna v0.3.0
hello-rust-build-1-build-pod build         Downloaded hashbrown v0.12.3
hello-rust-build-1-build-pod build         Downloaded getrandom v0.2.7
hello-rust-build-1-build-pod build         Downloaded actix-utils v3.0.0
hello-rust-build-1-build-pod build         Downloaded actix-codec v0.5.0
hello-rust-build-1-build-pod build         Downloaded ahash v0.7.6
hello-rust-build-1-build-pod build         Downloaded bytes v1.2.1
hello-rust-build-1-build-pod build          Compiling libc v0.2.132
hello-rust-build-1-build-pod build          Compiling cfg-if v1.0.0
hello-rust-build-1-build-pod build          Compiling autocfg v1.1.0
hello-rust-build-1-build-pod build          Compiling memchr v2.5.0
hello-rust-build-1-build-pod build          Compiling log v0.4.17
hello-rust-build-1-build-pod build          Compiling version_check v0.9.4
hello-rust-build-1-build-pod build          Compiling pin-project-lite v0.2.9
hello-rust-build-1-build-pod build          Compiling futures-core v0.3.24
hello-rust-build-1-build-pod build          Compiling bytes v1.2.1
hello-rust-build-1-build-pod build          Compiling once_cell v1.14.0
hello-rust-build-1-build-pod build          Compiling parking_lot_core v0.9.3
hello-rust-build-1-build-pod build          Compiling lock_api v0.4.8
hello-rust-build-1-build-pod build          Compiling scopeguard v1.1.0
hello-rust-build-1-build-pod build          Compiling serde v1.0.144
hello-rust-build-1-build-pod build          Compiling smallvec v1.9.0
hello-rust-build-1-build-pod build          Compiling tokio v1.21.1
hello-rust-build-1-build-pod build          Compiling proc-macro2 v1.0.43
hello-rust-build-1-build-pod build          Compiling typenum v1.15.0
hello-rust-build-1-build-pod build          Compiling jobserver v0.1.24
hello-rust-build-1-build-pod build          Compiling itoa v1.0.3
hello-rust-build-1-build-pod build          Compiling mio v0.8.4
hello-rust-build-1-build-pod build          Compiling socket2 v0.4.7
hello-rust-build-1-build-pod build          Compiling cc v1.0.73
hello-rust-build-1-build-pod build          Compiling parking_lot v0.12.1
hello-rust-build-1-build-pod build          Compiling signal-hook-registry v1.4.0
hello-rust-build-1-build-pod build          Compiling generic-array v0.14.6
hello-rust-build-1-build-pod build          Compiling futures-task v0.3.24
hello-rust-build-1-build-pod build          Compiling quote v1.0.21
hello-rust-build-1-build-pod build          Compiling unicode-ident v1.0.3
hello-rust-build-1-build-pod build          Compiling tracing-core v0.1.29
hello-rust-build-1-build-pod build          Compiling zstd-sys v2.0.1+zstd.1.5.2
hello-rust-build-1-build-pod build          Compiling syn v1.0.99
hello-rust-build-1-build-pod build          Compiling futures-util v0.3.24
hello-rust-build-1-build-pod build          Compiling tracing v0.1.36
hello-rust-build-1-build-pod build          Compiling getrandom v0.2.7
hello-rust-build-1-build-pod build          Compiling percent-encoding v2.2.0
hello-rust-build-1-build-pod build          Compiling pin-utils v0.1.0
hello-rust-build-1-build-pod build          Compiling futures-sink v0.3.24
hello-rust-build-1-build-pod build          Compiling indexmap v1.9.1
hello-rust-build-1-build-pod build          Compiling slab v0.4.7
hello-rust-build-1-build-pod build          Compiling alloc-no-stdlib v2.0.4
hello-rust-build-1-build-pod build          Compiling zstd-safe v5.0.2+zstd.1.5.2
hello-rust-build-1-build-pod build          Compiling fnv v1.0.7
hello-rust-build-1-build-pod build          Compiling crc32fast v1.3.2
hello-rust-build-1-build-pod build          Compiling tinyvec_macros v0.1.0
hello-rust-build-1-build-pod build          Compiling local-waker v0.1.3
hello-rust-build-1-build-pod build          Compiling tinyvec v1.6.0
hello-rust-build-1-build-pod build          Compiling http v0.2.8
hello-rust-build-1-build-pod build          Compiling aho-corasick v0.7.19
hello-rust-build-1-build-pod build          Compiling alloc-stdlib v0.2.2
hello-rust-build-1-build-pod build          Compiling crypto-common v0.1.6
hello-rust-build-1-build-pod build          Compiling block-buffer v0.10.3
hello-rust-build-1-build-pod build          Compiling rand_core v0.6.3
hello-rust-build-1-build-pod build          Compiling ahash v0.7.6
hello-rust-build-1-build-pod build          Compiling encoding_rs v0.8.31
hello-rust-build-1-build-pod build          Compiling tokio-util v0.7.4
hello-rust-build-1-build-pod build          Compiling paste v1.0.9
hello-rust-build-1-build-pod build          Compiling regex-syntax v0.6.27
hello-rust-build-1-build-pod build          Compiling hashbrown v0.12.3
hello-rust-build-1-build-pod build          Compiling httparse v1.8.0
hello-rust-build-1-build-pod build          Compiling ppv-lite86 v0.2.16
hello-rust-build-1-build-pod build          Compiling adler v1.0.2
hello-rust-build-1-build-pod build          Compiling rand_chacha v0.3.1
hello-rust-build-1-build-pod build          Compiling miniz_oxide v0.5.4
hello-rust-build-1-build-pod build          Compiling actix-service v2.0.2
hello-rust-build-1-build-pod build          Compiling regex v1.6.0
hello-rust-build-1-build-pod build          Compiling actix-rt v2.7.0
hello-rust-build-1-build-pod build          Compiling unicode-normalization v0.1.21
hello-rust-build-1-build-pod build          Compiling digest v0.10.3
hello-rust-build-1-build-pod build          Compiling brotli-decompressor v2.3.2
hello-rust-build-1-build-pod build          Compiling bytestring v1.1.0
hello-rust-build-1-build-pod build          Compiling actix-utils v3.0.0
hello-rust-build-1-build-pod build          Compiling form_urlencoded v1.1.0
hello-rust-build-1-build-pod build          Compiling cookie v0.16.0
hello-rust-build-1-build-pod build          Compiling num_threads v0.1.6
hello-rust-build-1-build-pod build          Compiling bitflags v1.3.2
hello-rust-build-1-build-pod build          Compiling firestorm v0.5.1
hello-rust-build-1-build-pod build          Compiling convert_case v0.4.0
hello-rust-build-1-build-pod build          Compiling serde_json v1.0.85
hello-rust-build-1-build-pod build          Compiling cpufeatures v0.2.5
hello-rust-build-1-build-pod build          Compiling unicode-bidi v0.3.8
hello-rust-build-1-build-pod build          Compiling time-macros v0.2.4
hello-rust-build-1-build-pod build          Compiling ryu v1.0.11
hello-rust-build-1-build-pod build          Compiling actix-router v0.5.0
hello-rust-build-1-build-pod build          Compiling idna v0.3.0
hello-rust-build-1-build-pod build          Compiling time v0.3.14
hello-rust-build-1-build-pod build          Compiling sha1 v0.10.4
hello-rust-build-1-build-pod build          Compiling derive_more v0.99.17
hello-rust-build-1-build-pod build          Compiling actix-codec v0.5.0
hello-rust-build-1-build-pod build          Compiling brotli v3.3.4
hello-rust-build-1-build-pod build          Compiling h2 v0.3.14
hello-rust-build-1-build-pod build          Compiling flate2 v1.0.24
hello-rust-build-1-build-pod build          Compiling rand v0.8.5
hello-rust-build-1-build-pod build          Compiling local-channel v0.1.3
hello-rust-build-1-build-pod build          Compiling num_cpus v1.13.1
hello-rust-build-1-build-pod build          Compiling httpdate v1.0.2
hello-rust-build-1-build-pod build          Compiling language-tags v0.3.2
hello-rust-build-1-build-pod build          Compiling base64 v0.13.0
hello-rust-build-1-build-pod build          Compiling mime v0.3.16
hello-rust-build-1-build-pod build          Compiling actix-server v2.1.1
hello-rust-build-1-build-pod build          Compiling actix-web-codegen v4.1.0
hello-rust-build-1-build-pod build          Compiling url v2.3.1
hello-rust-build-1-build-pod build          Compiling serde_urlencoded v0.7.1
hello-rust-build-1-build-pod build          Compiling actix-macros v0.2.3
hello-rust-build-1-build-pod build          Compiling zstd v0.11.2+zstd.1.5.2
hello-rust-build-1-build-pod build          Compiling actix-http v3.2.2
hello-rust-build-1-build-pod build          Compiling actix-web v4.2.1
hello-rust-build-1-build-pod build          Compiling hello-rust v0.1.0 (/workspace)
hello-rust-build-1-build-pod build           Finished release [optimized] target(s) in 2m 54s
hello-rust-build-1-build-pod build         Installing /layers/paketo-community_cargo/Cargo/bin/hello-rust
hello-rust-build-1-build-pod build          Installed package `hello-rust v0.1.0 (/workspace)` (executable `hello-rust`)
hello-rust-build-1-build-pod build   Removing source code
- hello-rust-build-1-build-pod › build
+ hello-rust-build-1-build-pod › export
hello-rust-build-1-build-pod export Reusing layers from image 'ghcr.io/making/workloads/hello-rust-demo@sha256:38a87bb6a3aed03498e0537b704c7a0f1bcb976243ea11214fb92822bc1efd2a'
hello-rust-build-1-build-pod export Adding layer 'paketo-community/cargo:Cargo'
hello-rust-build-1-build-pod export Reusing layer 'paketo-community/cargo:tini'
hello-rust-build-1-build-pod export Reusing layer 'launch.sbom'
hello-rust-build-1-build-pod export Reusing 1/1 app layer(s)
hello-rust-build-1-build-pod export Reusing layer 'launcher'
hello-rust-build-1-build-pod export Reusing layer 'config'
hello-rust-build-1-build-pod export Reusing layer 'process-types'
hello-rust-build-1-build-pod export Adding label 'io.buildpacks.lifecycle.metadata'
hello-rust-build-1-build-pod export Adding label 'io.buildpacks.build.metadata'
hello-rust-build-1-build-pod export Adding label 'io.buildpacks.project.metadata'
hello-rust-build-1-build-pod export Setting default process type 'hello-rust'
hello-rust-build-1-build-pod export Saving ghcr.io/making/workloads/hello-rust-demo...
hello-rust-build-1-build-pod export *** Images (sha256:b251f64189e62869ea5fbe5808cfefe9d797367f376d80263f6826a270222782):
hello-rust-build-1-build-pod export       ghcr.io/making/workloads/hello-rust-demo
hello-rust-build-1-build-pod export       ghcr.io/making/workloads/hello-rust-demo:b1.20221219.062355
hello-rust-build-1-build-pod export Adding cache layer 'paketo-community/rustup:Cargo'
hello-rust-build-1-build-pod export Adding cache layer 'paketo-community/rustup:Rust'
hello-rust-build-1-build-pod export Adding cache layer 'paketo-community/rustup:Rustup'
hello-rust-build-1-build-pod export Adding cache layer 'paketo-community/rustup:rustup-init-gnu'
hello-rust-build-1-build-pod export Adding cache layer 'paketo-buildpacks/syft:syft'
hello-rust-build-1-build-pod export Adding cache layer 'paketo-community/cargo:Cargo'
hello-rust-build-1-build-pod export Adding cache layer 'paketo-community/cargo:Cargo Cache'
hello-rust-build-1-build-pod export Adding cache layer 'cache.sbom'
- hello-rust-build-1-build-pod › export
+ hello-rust-build-1-build-pod › completion
hello-rust-build-1-build-pod completion Build successful
- hello-rust-build-1-build-pod › completion
+ hello-rust-config-writer-r4tw5-pod › prepare
hello-rust-config-writer-r4tw5-pod prepare 2022/12/19 06:28:14 Entrypoint initialization
- hello-rust-config-writer-r4tw5-pod › prepare
+ hello-rust-config-writer-r4tw5-pod › step-main
hello-rust-config-writer-r4tw5-pod step-main ++ mktemp -d
...
hello-rust-config-writer-r4tw5-pod step-main + imgpkg_params=--registry-ca-cert-path=/tmp/tmp.HmlLb1KIOh/cert
hello-rust-config-writer-r4tw5-pod step-main + export IMGPKG_ENABLE_IAAS_AUTH=false
hello-rust-config-writer-r4tw5-pod step-main + IMGPKG_ENABLE_IAAS_AUTH=false
hello-rust-config-writer-r4tw5-pod step-main + imgpkg push --registry-ca-cert-path=/tmp/tmp.HmlLb1KIOh/cert -b ghcr.io/making/workloads/hello-rust-demo-bundle:d3a8618b-54e8-4f23-9357-68c5a111b6cc -f .
hello-rust-config-writer-r4tw5-pod step-main IMGPKG_ENABLE_IAAS_AUTH environment variable will be deprecated, please use the flag --activate-keychain to activate the needed keychains
- hello-rust-config-writer-r4tw5-pod › step-main
+ hello-rust-00001-deployment-6769b5dc68-ss798 › workload
+ hello-rust-00001-deployment-6769b5dc68-ss798 › queue-proxy
hello-rust-00001-deployment-6769b5dc68-ss798 queue-proxy {"severity":"INFO","timestamp":"2022-12-19T06:29:11.3248992Z","logger":"queueproxy","caller":"queue/main.go:197","message":"Starting queue-proxy","commit":"3666ce7","knative.dev/key":"demo/hello-rust-00001","knative.dev/pod":"hello-rust-00001-deployment-6769b5dc68-ss798"}
hello-rust-00001-deployment-6769b5dc68-ss798 queue-proxy {"severity":"INFO","timestamp":"2022-12-19T06:30:12.067173Z","logger":"queueproxy","caller":"queue/main.go:402","message":"Attached drain handler from user-container","commit":"3666ce7","knative.dev/key":"demo/hello-rust-00001","knative.dev/pod":"hello-rust-00001-deployment-6769b5dc68-ss798"}

Check the deployed app with the following command:

$ tanzu apps workload get -n demo hello-rust 
📡 Overview
   name:   hello-rust
   type:   web

💾 Source
   type:     git
   url:      https://github.com/making/hello-rust
   branch:   main

📦 Supply Chain
   name:   source-to-url

   RESOURCE           READY   HEALTHY   TIME    OUTPUT
   source-provider    True    True      11m     GitRepository/hello-rust
   image-provider     True    True      7m50s   Image/hello-rust
   config-provider    True    True      7m43s   PodIntent/hello-rust
   app-config         True    True      7m43s   ConfigMap/hello-rust
   service-bindings   True    True      7m43s   ConfigMap/hello-rust-with-claims
   api-descriptors    True    True      7m43s   ConfigMap/hello-rust-with-api-descriptors
   config-writer      True    True      7m28s   Runnable/hello-rust-config-writer

🚚 Delivery
   name:   delivery-basic

   RESOURCE          READY   HEALTHY   TIME    OUTPUT
   source-provider   True    True      6m49s   ImageRepository/hello-rust-delivery
   deployer          True    True      6m47s   App/hello-rust

💬 Messages
   No messages found.

🛶 Pods
   NAME                                 READY   STATUS      RESTARTS   AGE
   hello-rust-build-1-build-pod         0/1     Completed   0          11m
   hello-rust-config-writer-r4tw5-pod   0/1     Completed   0          7m41s

🚢 Knative Services
   NAME         READY   URL
   hello-rust   Ready   https://hello-rust-demo.127-0-0-1.sslip.io

To see logs: "tanzu apps workload tail hello-rust --namespace demo"

Access the app.

$ curl -k https://hello-rust-demo.127-0-0-1.sslip.io
Hello world!

$ curl -k https://hello-rust-demo.127-0-0-1.sslip.io/echo -d 'Hello'
Hello

$ curl -k https://hello-rust-demo.127-0-0-1.sslip.io/hey
Hey there!

In case of full dependencies

Create the following overlay file.

cat <<EOF > full-tbs-deps-add-rust-builder.yaml
#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"metadata":{"name":"dependency-updater"}, "kind": "TanzuNetDependencyUpdater"})
---
spec:
  inlineDescriptor:
    clusterStores:
    #@overlay/match by="name", missing_ok=True
    - name: default
      sources:
      #@overlay/append
      - image: docker.io/paketocommunity/rust:0.21.0
    clusterBuilders:
    #@overlay/match by="name", missing_ok=True
    - name: base
      order:
      #@overlay/append
      - group:
        - id: paketo-community/rust
    #@overlay/match by="name", missing_ok=True
    - name: full
      order:
      #@overlay/append
      - group:
        - id: paketo-community/rust
    #@overlay/match by="name", missing_ok=True
    - name: tiny
      order:
      #@overlay/append
      - group:
        - id: paketo-community/rust
    #@overlay/match by="name", missing_ok=True
    - name: base-jammy
      order:
      #@overlay/append
      - group:
        - id: paketo-community/rust
    #@overlay/match by="name", missing_ok=True
    - name: full-jammy
      order:
      #@overlay/append
      - group:
        - id: paketo-community/rust
    #@overlay/match by="name", missing_ok=True
    - name: tiny-jammy
      order:
      #@overlay/append
      - group:
        - id: paketo-community/rust
EOF

Create a secret for the overlay file with the following command.

kubectl -n tap-install create secret generic full-tbs-deps-add-rust-builder \
  -o yaml \
  --dry-run=client \
  --from-file=full-tbs-deps-add-rust-builder.yaml \
  | kubectl apply -f-

Apply the overlay with the following command.

kubectl -n tap-install annotate packageinstalls full-tbs-deps ext.packaging.carvel.dev/ytt-paths-from-secret-name.0=full-tbs-deps-add-rust-builder --overwrite=true

The rest is the same as lite dependencies.