Migrate a legacy bundle to UDS CLI Next
What you’ll accomplish
Section titled “What you’ll accomplish”Migrate a legacy uds-bundle.yaml and uds-config.yaml workflow to a Next bundle that you can test, create, and deploy.
Prerequisites
Section titled “Prerequisites”- UDS CLI installed.
- A legacy bundle source directory containing
uds-bundle.yaml. - Access to each source package and a non-production cluster with
kubectlconfigured for testing. - Package trust material and bundle signing credentials for your environment.
-
Update your command invocations
legacy command Next command uds createCLI_FEATURES=NextMode=true uds bundle createuds deployCLI_FEATURES=NextMode=true uds bundle deployuds dev deployCLI_FEATURES=NextMode=true uds bundle dev deployuds inspectCLI_FEATURES=NextMode=true uds bundle inspectuds publishCLI_FEATURES=NextMode=true uds bundle pushuds pullCLI_FEATURES=NextMode=true uds bundle pulluds removeCLI_FEATURES=NextMode=true uds bundle removeuds zarfCLI_FEATURES=NextMode=true uds tools zarfuds run,uds monitor,uds completion,uds versionunchanged Vendored tools such as
kubectlandhelmstill useuds zarf tools <tool>, notuds tools zarf tools <tool>.uds logs,uds list, and the legacy deploy flags--resume,--retries, and--force-conflictshave no Next equivalent at the moment. The legacy inspect flags--sbom,--list-images, and--list-variablesare also not available in Next at the moment.Next runs non-interactively by default. Use
--promptfor confirmation. -
Convert the bundle definition
legacy/uds-bundle.yaml kind: UDSBundlemetadata:name: podinfodescription: Podinfo exampleversion: 0.1.0packages:- name: podinforepository: registry.example.com/acme/podinforef: 1.2.3namespace: podinfooptionalComponents:- ingresspublicKey: "replace-with-your-package-public-key"Create
next/bundle.uds.hcl:next/bundle.uds.hcl uds {bundle_api_version = "uds.dev/v1alpha1"}metadata {name = "podinfo"description = "Podinfo example"version = "0.1.0"}package "podinfo" {source = "oci://registry.example.com/acme/podinfo:1.2.3"namespace = "podinfo"optional_components = ["ingress"]values_files = ["values/podinfo.yaml"]signature_verification {public_key = file("keys/package.pub")}}The main changes are:
- Remove
kindandbuild. Theudsblock identifies the Next bundle schema, and Next creates the artifact metadata during artifact creation. - Keep the bundle name, description, and version in the
metadatablock. Turn each legacy package entry into apackage "<name>"block. - Combine
repositoryandrefintosource, or setsourceto a local Zarf package directory or archive. - Rename
optionalComponentstooptional_components. - Move package signing settings into
signature_verification. For keyless verification, usesignature_verification.keylesswith the same certificate identity and OIDC issuer constraints. - Set architecture with
options.architectureinconfig.uds.hclor the--architectureflag. It is not ametadatasetting in Next. - Next artifacts use
.tar.zst. Fields such asmetadata.uncompressed, packagedescription,timeout,flavor,imports, andexportshave no direct Next equivalent.
- Remove
-
Replace component overrides with values files
Legacy
overridesset Helm values inside a component. Next uses Zarf package values files, referenced withvalues_files. The package’s Zarf mappings connect the file to the chart.legacy/uds-bundle.yaml packages:- name: podinfooverrides:podinfo-component:unicorn-podinfo:variables:- name: REPLICA_COUNTpath: podinfo.replicaCountdefault: 1values:- path: podinfo.service.typevalue: ClusterIPCreate the values file named in
values_files:next/values/podinfo.yaml podinfo:service:type: ClusterIPreplicaCount: {{ .vars.podinfo.replica_count }}The target package must define Zarf mappings for the values you set. For this example, its
zarf.yamlneeds mappings like these:zarf.yaml components:- name: podinfo-componentcharts:- name: unicorn-podinfovalues:- sourcePath: ".podinfo.replicaCount"targetPath: ".replicaCount"- sourcePath: ".podinfo.service.type"targetPath: ".service.type"Next values files are package-level inputs. Move any legacy
valuesFilesinto the bundle, list them invalues_files, and give each chart-specific value a matching Zarf mapping. Update and rebuild the Zarf package if a mapping is missing.Next sets
namespacefor the whole package, not for individual charts. If charts in one package need different namespaces, update the Zarf package or split the package. -
Move configuration into HCL
This legacy
uds-config.yamlsets values for thepodinfopackage and two CLI options:legacy/uds-config.yaml variables:podinfo:REPLICA_COUNT: 2options:architecture: amd64oci_concurrency: 1Put
defaults.uds.hclnext tobundle.uds.hcl. It provides build-time default values and is included in the bundle artifact.next/defaults.uds.hcl variables = {podinfo = {replica_count = 1}}config.uds.hclholds the environment-specific values fromuds-config.yaml. Pass it with--config.next/config.uds.hcl options {architecture = "amd64"concurrency = 1}variables = {podinfo = {replica_count = 2}}When moving other settings, use these rules:
- Keep variables used in
values_filesunder the package name. Convert uppercase names to lowercase with underscores, such asREPLICA_COUNTtoreplica_count. - Zarf package variables must be top-level scalar values and apply to every package. Put shared Helm settings in each package’s values file. Use a values file for package-specific settings.
- Keep
architecture,log_level, andtmp_dirin the Nextoptionsblock. Changeoci_concurrencytoconcurrency. The legacy--tmpdirflag becomes--tmp-dir. - Replace
insecurewithplain_httporskip_tls_verify, depending on the registry behavior you need. Configure signature verification separately. - Next has no equivalents for
uds_cache,retries,UDS_<NAME>environment variables, or--set. Put required values in the config file passed with--configand adjust those workflows.
Next applies built-in defaults, then
config.uds.hclvalues, then explicit command-line flags.config.uds.hcloverrides matching values in the adjacentdefaults.uds.hcl. - Keep variables used in
-
Test, create, and deploy the Next artifact
Test the definition in a non-production cluster first.
Terminal window CLI_FEATURES=NextMode=true uds bundle dev deploy ./next --config ./next/config.uds.hclCreate and sign the artifact after the development deployment succeeds:
Terminal window cd nextCLI_FEATURES=NextMode=true uds bundle create . --architecture amd64 --signing-key ./keys/bundle-signing.keyPush and deploy the signed artifact:
Terminal window CLI_FEATURES=NextMode=true uds bundle push \./uds-bundle-podinfo-amd64-0.1.0.tar.zst \oci://registry.example.com/acme/podinfo:0.1.0CLI_FEATURES=NextMode=true uds bundle deploy \oci://registry.example.com/acme/podinfo:0.1.0 \--config ./config.uds.hcl \--public-key ./keys/bundle-signing.pub
Verification
Section titled “Verification”Confirm the migrated workload is healthy in the target cluster before removing the legacy deployment:
kubectl get pods -n podinfoContinue when the workload is Ready.
Known differences and gaps
Section titled “Known differences and gaps”- Registry transport and signature verification are separate in Next. Use
--plain-httpor--skip-tls-verifyfor registry transport, configure package verification in each package’ssignature_verificationblock, and use--skip-signature-verificationonly for local alpha testing because it leaves bundle integrity unverified. - Next cannot use legacy definitions or artifacts. Next has no automatic conversion. Convert the source to HCL, then create a Next artifact.
- Legacy package-to-package variable passing through
importsandexportsis not supported in Next. Provide those values throughconfig.uds.hclor package values files. - Development deployment uses the source definition directly. It does not create an artifact or provide bundle-signature verification. Use the create-then-deploy artifact workflow when you need signed bundle verification.
Related documentation
Section titled “Related documentation”- Next mode reference - exact Next commands, flags, and configuration behavior
- Bundle overrides - Legacy override behavior used in the migration example