Upgrade Ansible automation portal
Upgrade the Helm chart and plug-in artifacts for your target release.
If you are upgrading from plug-in version 2.1 to 2.2, you must grant navigation permissions to existing roles. The Templates and History sidebar items now require explicit ansible.templates.view and ansible.history.view permission grants. Without these permissions, non-admin users cannot see the Templates and History navigation items. Administrators and superusers are unaffected.
After upgrading, log in as an administrator, navigate to , and add ansible.templates.view and ansible.history.view to each role that requires access. For more information, see Configuring role-based access control for Ansible automation portal.
To upgrade Ansible automation portal:
- Prepare versions and values. See Before you upgrade.
- Choose your upgrade path. See Choose an upgrade path.
- Complete the procedure for that path:
- OCI container delivery (recommended): Use
pluginMode: ociand pull plug-ins fromregistry.redhat.io(or your mirror). See Upgrade Ansible automation portal with OCI container delivery. - HTTP plug-in registry (deprecated): Refresh tarball files in-cluster. Plan to migrate from tarball to OCI during upgrade.
- OCI container delivery (recommended): Use
Before you upgrade Copy linkLink copied!
- Versions: Consult the Ansible automation portal lifecycle page for Helm chart version,
imageTagInfo, and Ansible Automation Platform compatibility. Runhelm search repo openshift-helm-charts/redhat-rhaap-portaland select the chart version that matches the lifecycle page. - Values: Export and preserve your Helm values. Use
-f backup-values.yamlon every upgrade (OpenShift console or CLI). Upgrades without this file can reset custom OAuth, RBAC, and certificate settings. - OCI delivery: Set
pluginMode: ociinbackup-values.yaml. The chart default istarball; withoutoci, upgrades keep deprecated tarball mode.
Ansible automation portal version compatibility Copy linkLink copied!
Use the Helm chart version and imageTagInfo settings from the lifecycle page for your target release.
When you upgrade Ansible automation portal, use the redhat-rhaap-portal Helm chart version and imageTagInfo settings documented for your target release on the Ansible automation portal lifecycle page.
- OCI delivery (recommended): Set
pluginMode: oci. SetimageTagInfoto the plug-in tag listed for your chart version on the lifecycle page. The chart pullsregistry.redhat.io/ansible-automation-platform/automation-portal:<plugin-version>. - HTTP plug-in registry (deprecated): Set
pluginMode: tarball. Refresh the plug-in bundle so its major.minor matches the chart; the bundle patch must be equal to or greater than the chart patch. Prefer migrating from tarball to OCI during upgrade.
Export and preserve your Helm values Copy linkLink copied!
Export your release configuration to a file, merge in upgrade settings such as pluginMode and imageTagInfo, then pass the file to every helm upgrade command to preserve custom settings.
About this task Copy linkLink copied!
Export and edit your Helm values before you upgrade. Upgrades from the OpenShift Container Platform web console or CLI without -f backup-values.yaml can reset custom OAuth, RBAC, and certificate settings.
Procedure Copy linkLink copied!
Choose an upgrade path Copy linkLink copied!
Select the upgrade procedure that matches how your Ansible automation portal deployment currently delivers Ansible plug-ins.
The following upgrade paths are available:
- Upgrade with OCI container delivery (recommended): Your release already uses
pluginMode: oci, or you will set it during this upgrade. - Migrate from tarball to OCI during upgrade: You currently use the deprecated HTTP plug-in registry and want to move to OCI container delivery in one maintenance window.
- Upgrade with HTTP plug-in registry (deprecated): You must stay on tarball delivery temporarily. Refresh tarball files, update the plug-in registry, then upgrade the Helm release.
If you upgrade in a disconnected or air-gapped OpenShift Container Platform environment, mirror registry.redhat.io/ansible-automation-platform/automation-portal:<plugin-version> where <plugin-version> is the imageTagInfo value from the lifecycle page. Configure imageRegistry or ociPluginImage before you upgrade.
Upgrade Ansible automation portal with OCI container delivery Copy linkLink copied!
Upgrade the Helm chart and plug-in OCI tag when pluginMode is oci. This path does not require a plug-in registry or Customer Portal tarball files.
Before you begin Copy linkLink copied!
- You completed the pre-upgrade checks and exported your Helm values. Your
backup-values.yamlincludespluginMode: ociand the lifecycleimageTagInfovalue. - The secret
<release-name>-dynamic-plugins-registry-authexists in the same project as the Helm release, where<release-name>is your Helm release name, not the chart nameredhat-rhaap-portal. If the secret does not exist, create it as described in OCI container delivery in the install guide.
Procedure Copy linkLink copied!
Results Copy linkLink copied!
To verify the upgrade:
- In the Topology view, confirm that Ansible automation portal pods reach Running state.
- Select the deployment named
<release-name>-rhaap-portal. - Open the deployment pod logs.
- Select the Logs tab and choose the install-dynamic-plugins init container.
- Confirm successful OCI pulls. The tag in the log must match your
imageTagInfovalue. Example output:======= Installing dynamic plugin oci://registry.redhat.io/ansible-automation-platform/automation-portal:<plugin-version>!ansible-backstage-plugin-catalog-backend-module-rhaap ... -> Successfully installed dynamic plugin oci://registry.redhat.io/ansible-automation-platform/automation-portal:<plugin-version>!ansible-backstage-plugin-catalog-backend-module-rhaapReplace
<plugin-version>with the value from yourimageTagInfosetting. If you use a mirror registry, the host in the log reflects yourimageRegistryorociPluginImageconfiguration.
Download the plug-in TAR files (deprecated) Copy linkLink copied!
Download the latest .tar.gz plug-in bundle for Ansible automation portal from the Red Hat Customer Portal.
About this task Copy linkLink copied!
The HTTP plug-in registry method is deprecated and will be removed in a future release of Ansible Automation Platform. Red Hat recommends OCI container delivery. Use this procedure only if you cannot migrate to OCI yet and your deployment uses pluginMode: tarball.
Procedure Copy linkLink copied!
Results Copy linkLink copied!
Verify extracted files:
$ ls $DYNAMIC_PLUGIN_ROOT_DIR
You should see .tgz plug-in files and matching .integrity files.
Update the plug-in registry (deprecated) Copy linkLink copied!
Upload refreshed plug-in tarball files to OpenShift Container Platform and start a new plug-in registry build.
Before you begin Copy linkLink copied!
- You have downloaded the plug-in TAR files for Ansible automation portal.
- You have set an environment variable
$DYNAMIC_PLUGIN_ROOT_DIRto the directory that contains the TAR files.
About this task Copy linkLink copied!
Use this procedure only with pluginMode: tarball. OCI upgrades do not require a plug-in registry update.
Procedure Copy linkLink copied!
Results Copy linkLink copied!
Verify the registry update:
- In the Topology view, open the plugin-registry details pane.
- In the Pods section, select View logs for the new build pod.
- In the build pod terminal, run
lsand confirm the new.tgzfiles are present.
After you verify the registry, upgrade the Helm release.
Upgrade the Helm release Copy linkLink copied!
Upgrade the redhat-rhaap-portal Helm release after you complete the steps for your plug-in delivery method.
Before you begin Copy linkLink copied!
- You have completed the before-you-upgrade checklist and exported your Helm values.
- For tarball mode: you have updated the plug-in registry and confirmed
pluginMode: tarballinbackup-values.yaml. - For OCI mode: the
<release-name>-dynamic-plugins-registry-authsecret exists andbackup-values.yamlincludespluginMode: ociand the lifecycle-documentedimageTagInfo.
About this task Copy linkLink copied!
- OCI delivery: Update
imageTagInfoand the chart version in your values file, then upgrade. You do not refresh a plug-in registry. - Tarball delivery (deprecated): Refresh the plug-in registry first, then upgrade with
pluginMode: tarballin your values file.
You can upgrade from the command line or from the OpenShift web console.
For upgrades in air-gapped or disconnected environments, the standard procedure cannot be used directly. You must first mirror the necessary container images to your local registry and prepare the Helm chart for offline use.
For detailed instructions on this process, see Installing the Ansible automation portal in an air-gapped environment.
Procedure Copy linkLink copied!
- Upgrade from the command line:
- Upgrade from the OpenShift web console:
- Log in to the OpenShift web console and switch to the Developer perspective.
- Open the project for your Helm release.
- Select Helm, then select your release.
- Select .
- Select the target chart version.
- In the YAML view, confirm
pluginMode,imageTagInfo, and other custom values matchbackup-values.yaml. - Click Upgrade.
Results Copy linkLink copied!
- In the Topology view, confirm automation portal pods are in a Running state.
- For OCI delivery, verify the
install-dynamic-pluginsinit container logs to confirm plug-ins loaded successfully.
Troubleshoot Ansible automation portal upgrades Copy linkLink copied!
You might encounter issues during Ansible automation portal upgrades. The following sections describe common problems and their solutions.
Plug-in not found or install tries HTTP plug-in registry Copy linkLink copied!
Symptom: The install-dynamic-plugins init container logs reference http://plugin-registry:8080/... or report that a plug-in was not found in the in-cluster registry.
Cause: pluginMode is still set to tarball (the chart default) or you did not set pluginMode: oci in the values file used for the upgrade.
Solution:
- Check effective values:
helm get values <release_name> -n <namespace>To include defaults, add the
--allflag. - Edit backup-values.yaml: set
pluginMode: ociand setimageTagInfoto the plug-in tag from the Ansible automation portal lifecycle page. - Upgrade again:
helm upgrade <release_name> openshift-helm-charts/redhat-rhaap-portal \ --version <plugin-version> \ -f backup-values.yaml \ -n <namespace> - Confirm that the init container logs show
oci://...automation-portal:...URLs. For more information, see the procedure in the upgrade guide for migrating from tarball to OCI during an upgrade.
Plug-in or OCI pull errors Copy linkLink copied!
Symptom: The init container fails during OCI pull or install.
Cause: The imageTagInfo value is wrong for the chart version, registry authentication is missing, or pluginMode is not set to oci.
Solution:
- Confirm that backup-values.yaml sets
imageTagInfoto the plug-in tag from the Ansible automation portal lifecycle page for your chart version, and setspluginMode: oci. - Verify that the registry auth secret exists and matches your Helm release name:
oc get secret <release_name>-dynamic-plugins-registry-auth -n <namespace>A secret named
redhat-rhaap-portal-dynamic-plugins-registry-authis incorrect if your release name is notredhat-rhaap-portal. Recreate the secret by following the OCI container delivery procedure in the upgrade guide. - Inspect init container logs on the
<release_name>-rhaap-portalpod:oc logs <pod_name> -c install-dynamic-plugins -n <namespace> - Re-upgrade with
-f backup-values.yaml.
Plug-in version mismatch (HTTP plug-in registry, deprecated) Copy linkLink copied!
Symptom: Plug-in load errors occur when pluginMode is set to tarball.
Cause: The plug-in bundle version does not match the Helm chart version.
Solution: Refresh the bundle and update the plug-in registry, or migrate to OCI plug-in delivery. For more information, see the procedures in the upgrade guide for updating the plug-in registry and migrating from tarball to OCI during an upgrade.
Pods stuck in CrashLoopBackOff after upgrade Copy linkLink copied!
Symptom: Pods restart with a status of CrashLoopBackOff.
Solution:
- Check the
install-dynamic-pluginsinit container logs and main pod logs:oc logs -n <namespace> <pod_name> --previous - If logs show database errors, verify database connectivity and secrets.
- Re-upgrade with
-f backup-values.yamlafter you fix the values or secrets.
Helm upgrade fails with a release not found error Copy linkLink copied!
Symptom: Running helm upgrade returns an error stating that the release cannot be found.
Solution:
- List all Helm releases in your cluster:
helm list --all-namespaces - Identify the correct release name and namespace for your Ansible automation portal deployment.
- Run the upgrade command with the correct parameters:
helm upgrade <release_name> openshift-helm-charts/redhat-rhaap-portal \ --version <plugin-version> \ -f backup-values.yaml \ -n <namespace>
Custom values lost after upgrade Copy linkLink copied!
Symptom: OAuth, RBAC, or certificate settings reverted after the upgrade.
Cause: The upgrade ran without your values file. This commonly occurs when you upgrade from the console without exporting values first.
Solution:
- If you created backup-values.yaml before the upgrade, re-run the upgrade with the values file:
helm upgrade <release_name> openshift-helm-charts/redhat-rhaap-portal \ --version <plugin-version> \ -f backup-values.yaml \ -n <namespace> - If you did not export values before the upgrade, export what remains and restore missing settings manually:
helm get values <release_name> -n <namespace> > recovered-values.yamlReview recovered-values.yaml, restore any missing settings, and upgrade again with
-f recovered-values.yaml.
Migrate from HTTP plug-in registry to OCI container delivery Copy linkLink copied!
Migrate from the deprecated HTTP plug-in registry to OCI container image delivery by switching Helm values and updating your Kubernetes secret configuration.
Before you begin Copy linkLink copied!
Before you begin, ensure you have:
- Registry credentials for
registry.redhat.ioor your mirror registry. You can create a service account at the Red Hat registry service accounts page. - Your Helm release name and namespace
- OpenShift CLI (
oc) and Helm CLI installed - Existing Ansible automation portal installation with HTTP plug-in registry (tarball mode)
- For air-gapped environments: access to your mirror registry from the OpenShift cluster
For detailed prerequisites on creating and configuring registry credentials, see OCI container delivery.
About this task Copy linkLink copied!
The HTTP plug-in registry delivery method is deprecated and will be removed in a future release of Ansible Automation Platform. OCI container delivery is the recommended approach for new installations and production deployments.
Back up your current Helm values before you upgrade. Upgrades without -f backup-values.yaml can reset custom OAuth, RBAC, and certificate settings. The migration process exports your values, edits only the plug-in delivery method, and reapplies all custom configuration.
Procedure Copy linkLink copied!
Results Copy linkLink copied!
You have successfully migrated from HTTP plug-in registry to OCI container delivery. Ansible automation portal now pulls plug-ins from the OCI registry instead of the deprecated tarball service.
Migrating in air-gapped and disconnected environments Copy linkLink copied!
For air-gapped or disconnected clusters, mirror the OCI images to your internal registry and configure the Helm chart to use your mirror.
For air-gapped or partially disconnected clusters, you must mirror the OCI images to your internal registry and configure the Helm chart to use your mirror instead of registry.redhat.io.
Mirroring Ansible plug-in images Copy linkLink copied!
The Ansible plug-in OCI artifacts must be mirrored to your internal registry. Mirror the images from a host with access to registry.redhat.io:
$ podman pull registry.redhat.io/ansible-automation-platform/automation-portal:<plugin-version>
$ podman tag registry.redhat.io/ansible-automation-platform/automation-portal:<plugin-version> \
<your-mirror-registry>/ansible-automation-platform/automation-portal:<plugin-version>
$ podman push <your-mirror-registry>/ansible-automation-platform/automation-portal:<plugin-version>
When mirroring, you must preserve the original repository path. For example, mirror registry.redhat.io/ansible-automation-platform/automation-portal:2.2 to <your-mirror-registry>/ansible-automation-platform/automation-portal:2.2.
Configuring Helm values for mirror registry Copy linkLink copied!
Edit your backup-values.yaml to point to your mirror registry:
redhat-developer-hub:
global:
pluginMode: oci
imageTagInfo: "<plugin-version>"
imageRegistry: "<your-mirror-registry-host>"
catalogIndex:
image:
registry: "<your-mirror-registry-host>"
upstream:
backstage:
image:
repository: rhdh/rhdh-hub-rhel9
tag: "<platform-version>"
postgresql:
image:
repository: rhel9/postgresql-15
tag: "latest"
Key points:
imageRegistrymust be the registry host only (for example,yb-artifactoryormirror.example.com:5000). Do not include a repository path.catalogIndex.image.registrymust be set separately — it is not auto-derived fromimageRegistry. This is required for RHDH 1.9+.- If your mirror uses a non-standard repository path for the Ansible plug-in image, use
ociPluginImageinstead to specify the full path:redhat-developer-hub: global: imageRegistry: "<your-mirror-registry-host>" ociPluginImage: "<your-mirror-registry-host>/custom-path/automation-portal"
Using custom CA certificates for private registries Copy linkLink copied!
If your mirror registry uses a self-signed or internal CA certificate, the install-dynamic-plugins init container will fail with an x509: certificate signed by unknown authority error. You must mount your CA certificate into the init container.
The recommended approach is to create a ConfigMap and mount it at the per-registry trust path. For complete instructions, see the RHDH documentation on installing plug-ins from OCI registries by using custom certificates.
Troubleshooting the migration Copy linkLink copied!
Diagnose and resolve common errors during the migration from HTTP plug-in registry to OCI container delivery.
Authentication failures Copy linkLink copied!
Symptom: Init container logs show authentication required or unauthorized: access denied.
Cause: The <release-name>-dynamic-plugins-registry-auth secret is missing, malformed, or has incorrect credentials.
Resolution:
- Verify the secret exists:
$ oc get secret <release-name>-dynamic-plugins-registry-auth -n <namespace> - Check the secret contents:
$ oc get secret <release-name>-dynamic-plugins-registry-auth \ -o jsonpath='{.data.auth\.json}' -n <namespace> | base64 -dThe output should be valid JSON with your credentials.
- Ensure the secret name matches your Helm release name exactly. For example, if your release is
redhat-rhaap-portal, the secret must beredhat-rhaap-portal-dynamic-plugins-registry-auth. - Recreate the secret with correct credentials if needed:
$ oc delete secret <release-name>-dynamic-plugins-registry-auth -n <namespace> $ oc create secret generic <release-name>-dynamic-plugins-registry-auth \ --from-file=auth.json=./auth.json -n <namespace>
Duplicate registry path in OCI URLs Copy linkLink copied!
Symptom: Init container logs or Helm values show duplicate paths, for example: oci://yb-artifactory/ansible-automation-platform/ansible-automation-platform/automation-portal:2.2.
Cause: The imageRegistry value includes a repository path instead of being the registry host only.
Resolution: Edit your backup-values.yaml and set imageRegistry to the registry host only, without the repository path:
# Incorrect (includes repository path):
imageRegistry: "yb-artifactory/ansible-automation-platform"
# Correct (host only):
imageRegistry: "yb-artifactory"
Then re-run helm upgrade with the corrected values file.
x509 certificate errors for private registries Copy linkLink copied!
Symptom: Init container logs show x509: certificate signed by unknown authority or x509: certificate has expired.
Cause: Your mirror registry uses a self-signed or internal CA certificate that the skopeo utility cannot verify.
Resolution: Mount your CA certificate into the init container at the per-registry trust path. Obtain your CA certificate bundle (including the full chain), create a ConfigMap, and update your Helm values to mount it. For detailed instructions, see the RHDH documentation: Install plugins from OCI registries by using custom certificates.
No such image error Copy linkLink copied!
Symptom: Init container logs show Error: no such image or manifest not found.
Cause: The OCI image does not exist in the specified registry, or the imageTagInfo version does not match what is available.
Resolution:
- Verify the
imageTagInfovalue in your Helm release matches an available version. Check the Ansible automation portal lifecycle page. - If using a mirror registry, ensure the image was mirrored to the correct path. Run:
$ podman search <your-mirror-registry>/ansible-automation-platform/automation-portal - Confirm that
imageRegistryis set correctly and does not include a duplicate repository path (see the Duplicate registry path section above).
Integrity check errors Copy linkLink copied!
Symptom: Init container logs show integrity check failed or digest mismatch.
Cause: The OCI image in your registry does not match the expected digest, or the image was corrupted during mirroring.
Resolution:
- Re-mirror the image from
registry.redhat.iousingskopeo copyinstead ofpodman tag/push. Theskopeo copycommand preserves the original manifest digest:$ skopeo copy \ docker://registry.redhat.io/ansible-automation-platform/automation-portal:<plugin-version> \ docker://<your-mirror-registry>/ansible-automation-platform/automation-portal:<plugin-version> - If the error persists, verify the image in your mirror registry:
$ skopeo inspect docker://<your-mirror-registry>/ansible-automation-platform/automation-portal:<plugin-version> - Ensure you are not using a stale local image cache. Delete and re-pull if needed.
Accessing init container logs Copy linkLink copied!
To view the logs of the install-dynamic-plugins init container:
$ oc get pods -n <namespace> -l app.kubernetes.io/component=backstage
$ oc logs <pod-name> -c install-dynamic-plugins -n <namespace>
If the pod has already completed (e.g., if the init container succeeded), you can view the previous logs:
$ oc logs <pod-name> -c install-dynamic-plugins --previous -n <namespace>
If the pod is still running, stream logs in real time:
$ oc logs -f <pod-name> -c install-dynamic-plugins -n <namespace>