AHR TUI plugin in air-gapped mode#
After uploading all AHR dependencies, as described in Uploading AHR Artifacts to the Air-Gapped BCM Head Node, run the AHR TUI installer. The plugin automatically detects when it is running in an air-gapped environment and adjusts its behavior.
Note
Prerequisites. AHR shares the prerequisites documented in
Autonomous Hardware Recovery Installation Guide. One of them affects the air-gap sequence: if
Run:ai schedules any of the GPU nodes in your cluster, install Run:ai
before AHR. Installing Run:ai first makes the Run:ai BCM node categories
available when you select categories for the AHR agent. The k8s-user
kubectl context is also available when you deploy the runbooks, so the
air-gap installation completes in a single pass. Refer to
Run:ai (Kubernetes) GPU node scheduling for details, including what to do if AHR is
installed first.
Before running the installer, create a BCM user to deploy the AHR
application. Replace <strong-password> with a secure value:
cmsh -c 'user; add mission-control-admin; set password <strong-password>; commit;'
Important
The AHR TUI plugin reads the imageRepository field from the
kubeadm-config ConfigMap (kube-system namespace) to detect
air-gapped mode. This field must be set to your local registry URL.
If it still points to the default registry.k8s.io, the plugin
will not recognize the environment as air-gapped. Registry mirroring alone is not
sufficient — imageRepository must use the local registry for
air-gap detection and image pulls to work correctly.
To verify that imageRepository is correctly set, run:
kubectl get configmap kubeadm-config -n kube-system -o jsonpath='{.data.ClusterConfiguration}' | grep imageRepository
The output should show your local registry URL (for example,
imageRepository: master.cm.cluster:5000). If it still shows
registry.k8s.io, refer to section 4.2 of the
BCM containerization manual
for instructions on configuring the Kubernetes cluster for air-gapped
operation.
Kgateway container images
The AHR backend serves its endpoints through the shoreline gateway proxy,
which is built on the third-party kgateway Helm chart. That chart pulls
three container images from cr.kgateway.dev/kgateway-dev/:
kgateway— the xDS control plane.envoy-wrapper— the Envoy-based data-plane proxy.sds— the secret discovery service that provides TLS material to the proxy.
These images are not specific to AHR, so they are not part of the bundle
downloaded by download_ahr_dependencies.sh. The BCM air-gap scripts
normally mirror them into the local registry as part of the Kubernetes
air-gapped installation. The following manual steps are only needed if the
images are missing from the registry.
Important
When the kgateway images are missing, the kgateway controller and the
shoreline gateway proxy pods stay in ImagePullBackOff, and the AHR
WaitForBackendDiscoveryEndpoint stage times out later in the
installation.
Check whether the images are already present in the local registry:
for image in kgateway envoy-wrapper sds; do curl -sS \ --cacert /cm/local/apps/containerd/var/etc/certs.d/master.cm.cluster:5000/ca.crt \ https://master.cm.cluster:5000/v2/kgateway-dev/${image}/tags/list done
If every image returns a tag list that contains the version deployed in your cluster, the images are already available and you can skip the remaining steps.
Mirror the images from a host that has egress to
cr.kgateway.dev. Preserve thekgateway-dev/image path so that registry mirroring continues to work:VERSION=v2.3.0 REGISTRY=master.cm.cluster:5000 CERT_DIR=/cm/local/apps/containerd/var/etc/certs.d/master.cm.cluster:5000 for image in kgateway envoy-wrapper sds; do skopeo copy --format v2s2 --multi-arch all \ --dest-cert-dir "${CERT_DIR}" \ "docker://cr.kgateway.dev/kgateway-dev/${image}:${VERSION}" \ "docker://${REGISTRY}/kgateway-dev/${image}:${VERSION}" done
Repeat the check in step 1 to confirm that each image now resolves in the local registry.
Running the AHR installation wizard#
After completing the preceding steps, follow Autonomous Hardware Recovery Installation Guide with the following modifications:
The
cm-mission-control-setupwizard must be invoked with the--skip-packagesoption (required in air-gapped environments):cm-mission-control-setup --skip-packagesThe NGC credential prompt is not displayed. The plugin automatically detects the air-gapped environment and pulls artifacts from the local registry instead. This requires registry mirroring to be configured on every node beforehand, as described in Configuring Registry Mirroring. Without it, AHR image pulls fail and the installation stalls.
Resolving dependency conflicts during installation
During the InstallAgentOnHeadNode or InstallAgentInSoftwareImages
stages, the AHR TUI plugin installs packages from the air-gap bundle. If
a dependency conflict occurs (for example, a version mismatch between a
bundled package and a package already installed on the system), the
installer pauses and waits for you to resolve the conflict manually.
Tip
The air-gap bundle contains the entire dependency tree for every
required package. If you need to install or downgrade a conflicting
dependency, look for the appropriate .deb file in
/cm/local/apps/autonomous-hardware-recovery/var/packages/. You can
install it manually with dpkg -i <package>.deb and then retry the
stage.
For a mixed-architecture bundle (downloaded with
download_ahr_dependencies.sh --arch=all), this directory holds the
.deb files for both architectures side by side,
distinguished by the _<arch>.deb filename suffix (for example,
_amd64.deb versus _arm64.deb). Pick the file matching the
architecture of the node or software image you are repairing
(_all.deb packages apply to any architecture).
Self-signed TLS certificates
The AHR TUI plugin can generate self-signed TLS certificates for use in air-gapped environments where publicly trusted certificates are not available.
During installation, the TUI prompts whether to use self-signed certificates or to provide publicly trusted certificates:
If you select self-signed certificates, you are prompted for a base domain URL (default:
autonomous-hardware-recovery.local).The certificate and key files are written to
/cm/local/apps/autonomous-hardware-recovery/etc/certs/.AHR agents are automatically configured to trust the self-signed certificate when communicating with the backend.
Note
Note down the app URL and api URL displayed by the TUI installer during installation. You will need them to configure /etc/hosts on your local machine (step 3).
To access the AHR web UI from a local machine when using self-signed certificates:
Retrieve the BCM head node IP address.
Retrieve the certificate:
cat /cm/local/apps/autonomous-hardware-recovery/etc/certs/cert.crt
Add entries to
/etc/hostson your local machine pointing to the BCM head node IP. For example:10.0.0.1 mycluster.autonomous-hardware-recovery.local 10.0.0.1 mycluster-api.autonomous-hardware-recovery.local
Save the certificate to a local file and configure your browser to trust it.
Access the AHR web UI at
https://<ahr_base_domain>/home/. For example:https://autonomous-hardware-recovery.local/home/
Uninstalling Autonomous Hardware Recovery#
To uninstall AHR, start the plugin via cm-mission-control-setup and
select the Uninstall flow.
Important
The uninstall flow removes the var folder, which stores Helm
charts, packages, and runbooks required by the air-gapped
installation. Before reinstalling AHR, you must run the upload script
again to restore these artifacts. Refer to Uploading AHR Artifacts to the Air-Gapped BCM Head Node
for details.
Tip
Use the --skip-images flag to skip re-pushing images that are
already present in the local registry.