You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A new aicr mirror list command that discovers all container images and Helm charts referenced by a recipe and outputs them in formats that existing air-gap tools (Hauler, Zarf) can consume directly. Plus --mirror-registry on aicr bundle to rewrite image references for private registries.
Problem/Use Case
AICR recipes reference ~50 container images across 9+ public registries (nvcr.io, ghcr.io, gcr.io, quay.io, registry.k8s.io, docker.io, public.ecr.aws, ...) and ~12 Helm charts. In air-gapped or private-registry environments there is no way to:
Discover which images and charts a recipe actually needs
Feed that list into existing air-gap tooling
Generate a bundle that points at the private registry
As agreed in #743, AICR should not implement its own registry push/copy logic — tools like Hauler and Zarf already do this well and users in air-gapped environments are already using them. AICR should make these tools first-class by providing discovery and output in their native formats.
Proposed Solution
aicr mirror list
# Table (default)
aicr mirror list --recipe recipe.yaml
# Hauler manifest — pipe straight into hauler
aicr mirror list --recipe recipe.yaml --format hauler > hauler-manifest.yaml
# Zarf package — pipe straight into zarf
aicr mirror list --recipe recipe.yaml --format zarf > zarf.yaml
# General scripting
aicr mirror list --recipe recipe.yaml --format json
aicr mirror list --recipe recipe.yaml --format yaml
Hauler workflow:
aicr mirror list --recipe recipe.yaml --format hauler > hauler-manifest.yaml
hauler store sync -f hauler-manifest.yaml
hauler store save -o aicr-airgap.tar.zst
# transfer to air-gapped side
hauler store load aicr-airgap.tar.zst
hauler store serve registry
Once images are in the private registry (via Hauler/Zarf/whatever), the bundle needs to point at them. How exactly this looks in practice still needs some refinement, whether --mirror-registry alone is enough depends on the final registry layout (e.g. nested vs flat path structure, how each tool organizes mirrored images). We'll figure out the right interface as we iterate on the integration.
--mirror-registry rewrites image refs in Helm values to point at the private registry
--vendor-charts pulls chart .tgz into the bundle at build time (already exists)
Success Criteria
aicr mirror list --recipe recipe.yaml discovers all images and charts
--format hauler produces a valid Hauler manifest that hauler store sync accepts
--format zarf produces a valid Zarf package that zarf package create accepts
--format json and --format yaml work for general scripting
--mirror-registry on aicr bundle rewrites image references in generated values
Documentation with end-to-end examples for both Hauler and Zarf workflows
Alternatives Considered
AICR implements its own registry copy/push — rejected in Air-gap and private-registry mirroring guide #743. Duplicates what Hauler/Zarf already do well, adds maintenance burden, and users in air-gapped environments already have these tools.
Only output a flat image list not enough. Hauler and Zarf each have their own manifest formats, and outputting those directly removes a manual step for users.
Component
CLI (aicr)
Priority
Important (would improve my workflow)
Compatibility / Breaking Changes
New command, no breaking changes to existing CLI
--vendor-charts already exists and is unchanged
--mirror-registry is a new optional flag on aicr bundle
Operational Considerations
The Hauler/Zarf output formats are based on their current manifest schemas. If those schemas change upstream, the output formats need updating.
Prerequisites
Feature Summary
A new
aicr mirror listcommand that discovers all container images and Helm charts referenced by a recipe and outputs them in formats that existing air-gap tools (Hauler, Zarf) can consume directly. Plus--mirror-registryon aicr bundle to rewrite image references for private registries.Problem/Use Case
AICR recipes reference ~50 container images across 9+ public registries (nvcr.io, ghcr.io, gcr.io, quay.io, registry.k8s.io, docker.io, public.ecr.aws, ...) and ~12 Helm charts. In air-gapped or private-registry environments there is no way to:
As agreed in #743, AICR should not implement its own registry push/copy logic — tools like Hauler and Zarf already do this well and users in air-gapped environments are already using them. AICR should make these tools first-class by providing discovery and output in their native formats.
Proposed Solution
aicr mirror listHauler workflow:
Generated
hauler-manifest.yaml:Zarf workflow:
Generated
zarf.yaml:Bundle integration
Once images are in the private registry (via Hauler/Zarf/whatever), the bundle needs to point at them. How exactly this looks in practice still needs some refinement, whether
--mirror-registryalone is enough depends on the final registry layout (e.g. nested vs flat path structure, how each tool organizes mirrored images). We'll figure out the right interface as we iterate on the integration.--mirror-registry rewrites image refs in Helm values to point at the private registry
--vendor-charts pulls chart .tgz into the bundle at build time (already exists)
Success Criteria
aicr mirror list --recipe recipe.yamldiscovers all images and charts--format haulerproduces a valid Hauler manifest that hauler store sync accepts--format zarfproduces a valid Zarf package that zarf package create accepts--format jsonand--format yamlwork for general scripting--mirror-registryonaicr bundlerewrites image references in generated valuesAlternatives Considered
Component
CLI (aicr)
Priority
Important (would improve my workflow)
Compatibility / Breaking Changes
New command, no breaking changes to existing CLI
--vendor-charts already exists and is unchanged
--mirror-registry is a new optional flag on aicr bundle
Operational Considerations
The Hauler/Zarf output formats are based on their current manifest schemas. If those schemas change upstream, the output formats need updating.
Are you willing to contribute?
Yes, I can open a PR