From acbd1f2211bab585a2d54c8fa41708314a23c369 Mon Sep 17 00:00:00 2001 From: Nick Boldt Date: Thu, 1 Feb 2024 08:37:11 -0400 Subject: [PATCH 01/16] feat: new script for restricted env setup - fetch dev hub images and related images from the index, and mirror to a cluster's internal registry TODO: fix the skopeo copy step - not working :( Signed-off-by: Nick Boldt --- scripts/prepare-restricted-environment.sh | 132 ++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100755 scripts/prepare-restricted-environment.sh diff --git a/scripts/prepare-restricted-environment.sh b/scripts/prepare-restricted-environment.sh new file mode 100755 index 00000000..528f98fd --- /dev/null +++ b/scripts/prepare-restricted-environment.sh @@ -0,0 +1,132 @@ +#!/bin/bash +# +# Copyright (c) 2024 Red Hat, Inc. +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# + +# Fail on error +set -e + +# INTERNAL_REGISTRY_URL, eg 'ec2-3-12-71-143.us-east-2.compute.amazonaws.com:5000' or 'default-route-openshift-image-registry.apps.ci-ln-x0yk982-72292.origin-ci-int-gce.dev.rhcloud.com' +# INTERNAL_REG_USERNAME, eg., dummy +# INTERNAL_REG_PASSWORD, eg., dummy + +# podman login registry.redhat.io -u ${RRIO_USERNAME} -p ${RRIO_PASSWORD} +# podman login ${INTERNAL_REGISTRY_URL} -u ${INTERNAL_REG_USERNAME} -p ${INTERNAL_REG_PASSWORD} --tls-verify=false + +# example usage: +# ./prepare-restricted-environment.sh \ +# --prod_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.14" \ +# --prod_operator_package_name "devspaces" \ +# --prod_operator_bundle_name "rhdh-operator" \ +# --prod_operator_version "v1.1.0" \ +# --my_registry "$INTERNAL_REGISTRY_URL" +while [ $# -gt 0 ]; do + if [[ $1 == *"--"* ]]; then + param="${1/--/}" + declare "$param"="$2" + fi + shift +done + +# Display commands +# set -x + +# Operators +declare prod_operator_index="${prod_operator_index:?Must set --prod_operator_index: for OCP 4.12, use registry.redhat.io/redhat/redhat-operator-index:v4.12 or quay.io/rhdh/iib:latest-v4.14-x86_64}" +declare prod_operator_package_name="rhdh" +declare prod_operator_bundle_name="rhdh-operator" +declare prod_operator_version="${prod_operator_version:?Must set --prod_operator_version: for stable channel, use v1.1.0; for stable-1.1 channel, use v1.1.1}" # eg., v1.1.0 or v1.1.1 + +# Destination registry +declare my_registry="${my_registry:?Must set --my_registry: something like 'default-route-openshift-image-registry.apps.ci-ln-x0yk982-72292.origin-ci-int-gce.dev.rhcloud.com' for your cluster}" +declare my_operator_index_image_name_and_tag=${prod_operator_package_name}-index:${prod_operator_version} +declare my_operator_index="${my_registry}/${prod_operator_package_name}/${my_operator_index_image_name_and_tag}" + +declare my_catalog=${prod_operator_package_name}-disconnected-install +declare k8s_resource_name=${my_catalog} + +# from https://docs.openshift.com/container-platform/4.14/registry/securing-exposing-registry.html +echo "[INFO] Expose the default registry and log in ..." +oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge +HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}') +echo "[INFO] Default registry is $HOST" +my_registry="$HOST" + +# if able to run sudo and update your ca trust store +# oc get secret -n openshift-ingress router-certs-default -o go-template='{{index .data "tls.crt"}}' | base64 -d | sudo tee /etc/pki/ca-trust/source/anchors/${HOST}.crt > /dev/null +# sudo update-ca-trust enable +# sudo podman login -u kubeadmin -p "$(oc whoami -t)" "$HOST" + +# else just login with tls disabled +podman login -u kubeadmin -p "$(oc whoami -t)" --tls-verify=false "$HOST" + +# Create local directory +mkdir -p "${my_catalog}/${prod_operator_package_name}" + +echo "[INFO] Fetching metadata for the ${prod_operator_package_name} operator catalog channel, packages, and bundles." +opm render "${prod_operator_index}" \ + | jq "select \ + (\ + (.schema == \"olm.bundle\" and .name == \"${prod_operator_bundle_name}.${prod_operator_version}\") or \ + (.schema == \"olm.package\" and .name == \"${prod_operator_package_name}\") or \ + (.schema == \"olm.channel\" and .package == \"${prod_operator_package_name}\") \ + )" \ + | jq "select \ + (.schema == \"olm.channel\" and .package == \"${prod_operator_package_name}\").entries \ + |= [{name: \"${prod_operator_bundle_name}.${prod_operator_version}\"}]" \ + > "${my_catalog}/${prod_operator_package_name}/render.json" + +echo "[DEBUG] Got $(cat "${my_catalog}/${prod_operator_package_name}/render.json" | wc -l) lines of JSON from the index!" +# echo "[DEBUG] Got this from the index: +# ======" +# cat "${my_catalog}/${prod_operator_package_name}/render.json" +# echo "======" + +echo "[INFO] Creating the catalog dockerfile." +if [ -f "${my_catalog}.Dockerfile" ]; then + rm -f "${my_catalog}.Dockerfile" +fi +opm generate dockerfile "./${my_catalog}" + +echo "[INFO] Building the catalog image locally." +podman build -t "${my_operator_index}" -f "./${my_catalog}.Dockerfile" --no-cache . + +echo "[INFO] Disabling the default Red Hat Ecosystem Catalog." +oc patch OperatorHub cluster --type json \ + --patch '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]' + +echo "[INFO] Deploying your catalog image to the $my_operator_index registry." +# See: https://docs.openshift.com/container-platform/latest/installing/disconnected_install/installing-mirroring-installation-images.html#olm-mirroring-catalog_installing-mirroring-installation-images +### TODO fix this step or switch to oc adm catalog mirror? +# https://docs.openshift.com/container-platform/4.14/installing/disconnected_install/installing-mirroring-installation-images.html#installation-images-samples-disconnected-mirroring-assist_installing-mirroring-installation-images ? +# FATA[0010] writing manifest: uploading manifest v1.1.0 to default-route-openshift-image-registry.apps.ci-ln-x0yk982-72292.origin-ci-int-gce.dev.rhcloud.com/rhdh/rhdh-index: denied +# skopeo copy --src-tls-verify=false --dest-tls-verify=false --all "containers-storage:$my_operator_index" "docker://$my_operator_index" + +echo "[INFO] Removing index image from mappings.txt to prepare mirroring." +oc adm catalog mirror "$my_operator_index" "$my_registry" --insecure --manifests-only | tee catalog_mirror.log +MANIFESTS_FOLDER=$(sed -n -e 's/^wrote mirroring manifests to \(.*\)$/\1/p' catalog_mirror.log |xargs) # The xargs here is to trim whitespaces +sed -i -e "/${my_operator_index_image_name_and_tag}/d" "${MANIFESTS_FOLDER}/mapping.txt" +cat "${MANIFESTS_FOLDER}/mapping.txt" + +echo "[INFO] Mirroring related images to the $my_registry registry." +# oc image mirror --insecure=true -f "${MANIFESTS_FOLDER}/mapping.txt" +while IFS= read -r line +do + public_image=$(echo "${line}" | cut -d '=' -f1) + private_image=$(echo "${line}" | cut -d '=' -f2) + echo "[INFO] Mirroring ${public_image}" + skopeo copy --dest-tls-verify=false --preserve-digests --all "docker://$public_image" "docker://$private_image" +done < "${MANIFESTS_FOLDER}/mapping.txt" + +echo "[INFO] Creating CatalogSource and ImageContentSourcePolicy" +# shellcheck disable=SC2002 +cat "${MANIFESTS_FOLDER}/catalogSource.yaml" | sed 's|name: .*|name: '${k8s_resource_name}'|' | oc apply -f - +# shellcheck disable=SC2002 +cat "${MANIFESTS_FOLDER}/imageContentSourcePolicy.yaml" | sed 's|name: .*|name: '${k8s_resource_name}'|' | oc apply -f - + +echo "[INFO] Catalog $my_operator_index deployed to the $my_registry registry." From fe7a228fc3718f0fffa2ab7a12860c790ed295c3 Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Tue, 6 Feb 2024 15:28:45 +0100 Subject: [PATCH 02/16] Add script to deploy and expose mirror registry into the cluster --- scripts/deploy-mirror-registry.sh | 154 ++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100755 scripts/deploy-mirror-registry.sh diff --git a/scripts/deploy-mirror-registry.sh b/scripts/deploy-mirror-registry.sh new file mode 100755 index 00000000..75129941 --- /dev/null +++ b/scripts/deploy-mirror-registry.sh @@ -0,0 +1,154 @@ +#!/bin/bash + +# Fail on error +set -e + +# example usage: +# ./deploy-mirror-registry.sh \ +# --namespace "airgap-registry" \ +# --image "registry:2" \ +# --storage_class "" \ +# --storage_capacity "100Gi" \ +# --expose "true" \ +# --username "$USER" \ +# --password "$PASS" + +while [ $# -gt 0 ]; do + if [[ $1 == *"--"* ]]; then + param="${1/--/}" + declare "$param"="$2" + fi + shift +done + +declare namespace="${namespace:-"airgap-helper-ns"}" +declare image="${image:-"registry:2"}" +declare storage_capacity=${storage_capacity:-"100Gi"} +declare username="${username:?Must set --username}" +declare password="${password:?Must set --username}" + +if ! oc get namespace "${namespace}" > /dev/null 2>&1; then + oc create namespace "${namespace}" +fi + +registry_htpasswd=$(htpasswd -Bbn "${username}" "${password}") +cat < /tmp/my-global-pull-secret.yaml +#echo oc registry login --registry="" --auth-basic=":" --to=/tmp/my-global-pull-secret.yaml +#echo oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/my-global-pull-secret.yaml \ No newline at end of file From e2321549765fc39b298ecedb4e5587b5594b519d Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Tue, 6 Feb 2024 15:30:11 +0100 Subject: [PATCH 03/16] 'skopeo copy' now working with deployed mirror registry --- scripts/prepare-restricted-environment.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/scripts/prepare-restricted-environment.sh b/scripts/prepare-restricted-environment.sh index 528f98fd..a82c2663 100755 --- a/scripts/prepare-restricted-environment.sh +++ b/scripts/prepare-restricted-environment.sh @@ -50,20 +50,20 @@ declare my_operator_index="${my_registry}/${prod_operator_package_name}/${my_ope declare my_catalog=${prod_operator_package_name}-disconnected-install declare k8s_resource_name=${my_catalog} -# from https://docs.openshift.com/container-platform/4.14/registry/securing-exposing-registry.html -echo "[INFO] Expose the default registry and log in ..." -oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge -HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}') -echo "[INFO] Default registry is $HOST" -my_registry="$HOST" +## from https://docs.openshift.com/container-platform/4.14/registry/securing-exposing-registry.html +#echo "[INFO] Expose the default registry and log in ..." +#oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge +#HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}') +#echo "[INFO] Default registry is $HOST" +#my_registry="$HOST" # if able to run sudo and update your ca trust store # oc get secret -n openshift-ingress router-certs-default -o go-template='{{index .data "tls.crt"}}' | base64 -d | sudo tee /etc/pki/ca-trust/source/anchors/${HOST}.crt > /dev/null # sudo update-ca-trust enable # sudo podman login -u kubeadmin -p "$(oc whoami -t)" "$HOST" -# else just login with tls disabled -podman login -u kubeadmin -p "$(oc whoami -t)" --tls-verify=false "$HOST" +## else just login with tls disabled +#podman login -u kubeadmin -p "$(oc whoami -t)" --tls-verify=false "$HOST" # Create local directory mkdir -p "${my_catalog}/${prod_operator_package_name}" @@ -105,7 +105,7 @@ echo "[INFO] Deploying your catalog image to the $my_operator_index registry." ### TODO fix this step or switch to oc adm catalog mirror? # https://docs.openshift.com/container-platform/4.14/installing/disconnected_install/installing-mirroring-installation-images.html#installation-images-samples-disconnected-mirroring-assist_installing-mirroring-installation-images ? # FATA[0010] writing manifest: uploading manifest v1.1.0 to default-route-openshift-image-registry.apps.ci-ln-x0yk982-72292.origin-ci-int-gce.dev.rhcloud.com/rhdh/rhdh-index: denied -# skopeo copy --src-tls-verify=false --dest-tls-verify=false --all "containers-storage:$my_operator_index" "docker://$my_operator_index" +skopeo copy --src-tls-verify=false --dest-tls-verify=false --all "containers-storage:$my_operator_index" "docker://$my_operator_index" echo "[INFO] Removing index image from mappings.txt to prepare mirroring." oc adm catalog mirror "$my_operator_index" "$my_registry" --insecure --manifests-only | tee catalog_mirror.log From 883de3ddeb2a74597ef46e3ceaafea086cc095cc Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Tue, 6 Feb 2024 15:30:48 +0100 Subject: [PATCH 04/16] Replace 'registry.redhat.io/rhdh/*' with 'quay.io/rhdh/*', as those images are not public yet? --- scripts/prepare-restricted-environment.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/prepare-restricted-environment.sh b/scripts/prepare-restricted-environment.sh index a82c2663..d8fc940c 100755 --- a/scripts/prepare-restricted-environment.sh +++ b/scripts/prepare-restricted-environment.sh @@ -118,6 +118,10 @@ echo "[INFO] Mirroring related images to the $my_registry registry." while IFS= read -r line do public_image=$(echo "${line}" | cut -d '=' -f1) + if [[ "$public_image" == registry.redhat.io/rhdh/* ]]; then + # CI Builds not public yet + public_image=${public_image/registry.redhat.io/quay.io} + fi private_image=$(echo "${line}" | cut -d '=' -f2) echo "[INFO] Mirroring ${public_image}" skopeo copy --dest-tls-verify=false --preserve-digests --all "docker://$public_image" "docker://$private_image" From 894909924879d2a5433fe7d538fd187e58bad0e2 Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Wed, 7 Feb 2024 00:17:07 +0100 Subject: [PATCH 05/16] Add steps for deploying mirror registry in the same prepare-restricted-environment.sh script, using a 'use_existing_mirror_registry' option Co-authored-by: Nick Boldt --- scripts/prepare-restricted-environment.sh | 241 ++++++++++++++++++++-- 1 file changed, 222 insertions(+), 19 deletions(-) diff --git a/scripts/prepare-restricted-environment.sh b/scripts/prepare-restricted-environment.sh index d8fc940c..692ae47b 100755 --- a/scripts/prepare-restricted-environment.sh +++ b/scripts/prepare-restricted-environment.sh @@ -24,7 +24,7 @@ set -e # --prod_operator_package_name "devspaces" \ # --prod_operator_bundle_name "rhdh-operator" \ # --prod_operator_version "v1.1.0" \ -# --my_registry "$INTERNAL_REGISTRY_URL" +# --use_existing_mirror_registry "$MY_MIRROR_REGISTRY" while [ $# -gt 0 ]; do if [[ $1 == *"--"* ]]; then param="${1/--/}" @@ -43,27 +43,234 @@ declare prod_operator_bundle_name="rhdh-operator" declare prod_operator_version="${prod_operator_version:?Must set --prod_operator_version: for stable channel, use v1.1.0; for stable-1.1 channel, use v1.1.1}" # eg., v1.1.0 or v1.1.1 # Destination registry -declare my_registry="${my_registry:?Must set --my_registry: something like 'default-route-openshift-image-registry.apps.ci-ln-x0yk982-72292.origin-ci-int-gce.dev.rhcloud.com' for your cluster}" declare my_operator_index_image_name_and_tag=${prod_operator_package_name}-index:${prod_operator_version} -declare my_operator_index="${my_registry}/${prod_operator_package_name}/${my_operator_index_image_name_and_tag}" declare my_catalog=${prod_operator_package_name}-disconnected-install declare k8s_resource_name=${my_catalog} -## from https://docs.openshift.com/container-platform/4.14/registry/securing-exposing-registry.html -#echo "[INFO] Expose the default registry and log in ..." -#oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge -#HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}') -#echo "[INFO] Default registry is $HOST" -#my_registry="$HOST" +# Check we're logged into a cluster +if ! oc whoami > /dev/null 2>&1; then + errorf "Not logged into an OpenShift cluster" + exit 1 +fi +# log into your OCP cluster before running this or you'll get null values for OCP vars! +OCP_VER="$(oc version -o json | jq -r '.openshiftVersion')" +OCP_ARCH="$(oc version -o json | jq -r '.serverVersion.platform' | sed -r -e "s#linux/##")" +if [[ $OCP_ARCH == "amd64" ]]; then OCP_ARCH="x86_64"; fi + +function deploy_mirror_registry() { + echo "[INFO] Deploying mirror registry..." >&2 + local namespace="airgap-helper-ns" + local image="registry:2" + local storage_capacity="30Gi" + local username="registryuser" + local password=$(echo "$RANDOM" | base64 | head -c 20) + + if ! oc get namespace "${namespace}" &> /dev/null; then + echo " namespace ${namespace} does not exist - creating it..." >&2 + oc create namespace "${namespace}" >&2 + fi + + registry_htpasswd=$(htpasswd -Bbn "${username}" "${password}") + echo " generating auth secret for mirror registry. FYI, those creds will be stored in a secret named 'airgap-registry-auth-creds' in ${namespace} ..." >&2 + cat <&2 +apiVersion: v1 +kind: Secret +type: Opaque +metadata: + name: airgap-registry-auth + namespace: "${namespace}" + labels: + app: airgap-registry +stringData: + htpasswd: "${registry_htpasswd}" +EOF + cat <&2 +apiVersion: v1 +kind: Secret +type: Opaque +metadata: + name: airgap-registry-auth-creds + namespace: "${namespace}" + labels: + app: airgap-registry +stringData: + username: "${username}" + password: "${password}" +EOF + + if [ -z "$storage_class" ]; then + # use default storage class + storage_class=$(oc get storageclasses -o=jsonpath='{.items[?(@.metadata.annotations.storageclass\.kubernetes\.io/is-default-class=="true")].metadata.name}') + fi + echo " creating PVC for mirror registry, using ${storage_class} as storage class: persistentvolumeclaim/airgap-registry-storage ..." >&2 + cat <&2 +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: airgap-registry-storage + namespace: "${namespace}" +spec: + resources: + requests: + storage: "${storage_capacity}" + storageClassName: "${storage_class}" + accessModes: + - ReadWriteOnce +EOF + + echo " creating mirror registry Deployment: deployment/airgap-registry ..." >&2 + cat <&2 +apiVersion: apps/v1 +kind: Deployment +metadata: + name: airgap-registry + namespace: "${namespace}" + labels: + app: airgap-registry +spec: + replicas: 1 + selector: + matchLabels: + app: airgap-registry + template: + metadata: + labels: + app: airgap-registry + spec: + # ----------------------------------------------------------------------- + containers: + - image: "${image}" + name: airgap-registry + imagePullPolicy: IfNotPresent + env: + - name: REGISTRY_AUTH + value: "htpasswd" + - name: REGISTRY_AUTH_HTPASSWD_REALM + value: "RHDH Private Registry" + - name: REGISTRY_AUTH_HTPASSWD_PATH + value: "/auth/htpasswd" + - name: REGISTRY_STORAGE_DELETE_ENABLED + value: "true" +# - name: REGISTRY_HTTP_TLS_CERTIFICATE +# value: "/certs/tls.crt" +# - name: REGISTRY_HTTP_TLS_KEY +# value: "/certs/tls.key" + ports: + - containerPort: 5000 + volumeMounts: + - name: registry-vol + mountPath: /var/lib/registry +# - name: tls-vol +# mountPath: /certs +# readOnly: true + - name: auth-vol + mountPath: "/auth" + readOnly: true + # ----------------------------------------------------------------------- + volumes: + - name: registry-vol + persistentVolumeClaim: + claimName: airgap-registry-storage +# - name: tls-vol +# secret: +# secretName: airgap-registry-certificate + - name: auth-vol + secret: + secretName: airgap-registry-auth +EOF + + echo " creating mirror registry Service: service/airgap-registry ..." >&2 + cat <&2 +apiVersion: v1 +kind: Service +metadata: + name: airgap-registry + namespace: "${namespace}" + labels: + app: airgap-registry +spec: + type: ClusterIP + ports: + - port: 5000 + protocol: TCP + targetPort: 5000 + selector: + app: airgap-registry +EOF + + echo " creating Route to access mirror registry: route/airgap-registry ..." >&2 + oc -n "${namespace}" create route edge --service=airgap-registry --insecure-policy=Redirect --dry-run=client -o yaml \ + | oc -n "${namespace}" apply -f - >&2 + + local registry_url=$(oc get route airgap-registry -n "${namespace}" --template='{{ .spec.host }}') + echo "... done. Mirror registry should now be reachable at: ${registry_url} ..." >&2 -# if able to run sudo and update your ca trust store -# oc get secret -n openshift-ingress router-certs-default -o go-template='{{index .data "tls.crt"}}' | base64 -d | sudo tee /etc/pki/ca-trust/source/anchors/${HOST}.crt > /dev/null -# sudo update-ca-trust enable -# sudo podman login -u kubeadmin -p "$(oc whoami -t)" "$HOST" + # Wait until url is ready + echo "[INFO] Waiting for mirror registry to be ready and reachable ..." >&2 + curl --insecure -IL "${registry_url}" --retry 100 --retry-all-errors --retry-max-time 900 --fail &> /tmp/"${registry_url}.log" >&2 -## else just login with tls disabled -#podman login -u kubeadmin -p "$(oc whoami -t)" --tls-verify=false "$HOST" + echo "[INFO] Log into mirror registry to be able to push images to it..." >&2 + podman login -u="${username}" -p="${password}" "${registry_url}" --tls-verify=false >&2 + + echo "[INFO] Marking mirror registry as insecure in the cluster ..." >&2 + oc patch image.config.openshift.io/cluster --patch '{"spec":{"registrySources":{"insecureRegistries":["'${registry_url}'"]}}}' --type=merge >&2 + + echo "[INFO] Adding mirror registry creds to cluster global pull secret ..." >&2 + echo " downloading global pull secret from the cluster ..." >&2 + oc get secret/pull-secret -n openshift-config --template='{{index .data ".dockerconfigjson" | base64decode}}' > /tmp/my-global-pull-secret-for-mirror-reg.yaml + echo " log into mirror registry and store creds into the pull secret downloaded..." >&2 + oc registry login \ + --insecure=true \ + --registry="${registry_url}" \ + --auth-basic="${username}:${password}" \ + --to=/tmp/my-global-pull-secret-for-mirror-reg.yaml \ + >&2 + echo " writing updated pull secret into the cluster ..." >&2 + oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/my-global-pull-secret-for-mirror-reg.yaml >&2 + + # Need to mirror OCP release images, otherwise ImagePullBackOff when installing the operator: + # unable to pull quay.io/openshift-release-dev/ocp-v4.0-art-dev@... + echo "[INFO] Mirroring OCP release images ..." >&2 + local ocp_product_repo='openshift-release-dev' + local ocp_release_name="ocp-release" + local ocp_local_repo="ocp/openshift" + oc adm release mirror -a /tmp/my-global-pull-secret-for-mirror-reg.yaml \ + --from="quay.io/${ocp_product_repo}/${ocp_release_name}:${OCP_VER}-${OCP_ARCH}" \ + --to="${registry_url}/${ocp_local_repo}" \ + --to-release-image="${registry_url}/${ocp_local_repo}:${OCP_VER}-${OCP_ARCH}" \ + --insecure=true > /tmp/oc-adm-release-mirror__mirror-registry.out + echo " creating ImageContentSourcePolicy for OCP release images: imagecontentsourcepolicy/ocp-release ..." >&2 + cat <&2 +apiVersion: operator.openshift.io/v1alpha1 +kind: ImageContentSourcePolicy +metadata: + name: ocp-release + labels: + app: airgap-registry +spec: + repositoryDigestMirrors: + - mirrors: + - "${registry_url}/${ocp_local_repo}" + source: quay.io/openshift-release-dev/ocp-release + - mirrors: + - "${registry_url}/${ocp_local_repo}" + source: quay.io/openshift-release-dev/ocp-v4.0-art-dev +EOF + + echo "[INFO] Cleaning up temporary files ..." >&2 + rm -f /tmp/my-global-pull-secret-for-mirror-reg.yaml /tmp/oc-adm-release-mirror__mirror-registry.out >&2 + + echo "[INFO] Mirror registry should be ready: ${registry_url}" >&2 + echo "${registry_url}" +} + +declare my_registry="${use_existing_mirror_registry}" +if [ -z "${my_registry}" ]; then + my_registry=$(deploy_mirror_registry) +fi + +declare my_operator_index="${my_registry}/${prod_operator_package_name}/${my_operator_index_image_name_and_tag}" # Create local directory mkdir -p "${my_catalog}/${prod_operator_package_name}" @@ -101,10 +308,6 @@ oc patch OperatorHub cluster --type json \ --patch '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]' echo "[INFO] Deploying your catalog image to the $my_operator_index registry." -# See: https://docs.openshift.com/container-platform/latest/installing/disconnected_install/installing-mirroring-installation-images.html#olm-mirroring-catalog_installing-mirroring-installation-images -### TODO fix this step or switch to oc adm catalog mirror? -# https://docs.openshift.com/container-platform/4.14/installing/disconnected_install/installing-mirroring-installation-images.html#installation-images-samples-disconnected-mirroring-assist_installing-mirroring-installation-images ? -# FATA[0010] writing manifest: uploading manifest v1.1.0 to default-route-openshift-image-registry.apps.ci-ln-x0yk982-72292.origin-ci-int-gce.dev.rhcloud.com/rhdh/rhdh-index: denied skopeo copy --src-tls-verify=false --dest-tls-verify=false --all "containers-storage:$my_operator_index" "docker://$my_operator_index" echo "[INFO] Removing index image from mappings.txt to prepare mirroring." From 3c094aed473311f5f45b01427d90a5bafdf818d2 Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Wed, 7 Feb 2024 00:17:44 +0100 Subject: [PATCH 06/16] Delete previous deploy-mirror-registry.sh script --- scripts/deploy-mirror-registry.sh | 154 ------------------------------ 1 file changed, 154 deletions(-) delete mode 100755 scripts/deploy-mirror-registry.sh diff --git a/scripts/deploy-mirror-registry.sh b/scripts/deploy-mirror-registry.sh deleted file mode 100755 index 75129941..00000000 --- a/scripts/deploy-mirror-registry.sh +++ /dev/null @@ -1,154 +0,0 @@ -#!/bin/bash - -# Fail on error -set -e - -# example usage: -# ./deploy-mirror-registry.sh \ -# --namespace "airgap-registry" \ -# --image "registry:2" \ -# --storage_class "" \ -# --storage_capacity "100Gi" \ -# --expose "true" \ -# --username "$USER" \ -# --password "$PASS" - -while [ $# -gt 0 ]; do - if [[ $1 == *"--"* ]]; then - param="${1/--/}" - declare "$param"="$2" - fi - shift -done - -declare namespace="${namespace:-"airgap-helper-ns"}" -declare image="${image:-"registry:2"}" -declare storage_capacity=${storage_capacity:-"100Gi"} -declare username="${username:?Must set --username}" -declare password="${password:?Must set --username}" - -if ! oc get namespace "${namespace}" > /dev/null 2>&1; then - oc create namespace "${namespace}" -fi - -registry_htpasswd=$(htpasswd -Bbn "${username}" "${password}") -cat < /tmp/my-global-pull-secret.yaml -#echo oc registry login --registry="" --auth-basic=":" --to=/tmp/my-global-pull-secret.yaml -#echo oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/my-global-pull-secret.yaml \ No newline at end of file From 093a93e524101c8ddcb2d4bf00f3ef62ee506f54 Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Wed, 7 Feb 2024 00:18:01 +0100 Subject: [PATCH 07/16] Update .gitignore --- .gitignore | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index d87c0cd0..7d2a8e1d 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,10 @@ __debug_bin* database/ docker/index.Dockerfile gosec.sarif + +# from prepare-restricted-environment script +catalog_mirror.log +manifests-rhdh-index-* +rhdh-disconnected-install/ +rhdh-disconnected-install.Dockerfile + From fe80b312fd2a42c77652819ea7f4bfb0cb293db9 Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Wed, 7 Feb 2024 00:19:54 +0100 Subject: [PATCH 08/16] Move prepare-restricted-environment.sh to .rhdh/scripts --- {scripts => .rhdh/scripts}/prepare-restricted-environment.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {scripts => .rhdh/scripts}/prepare-restricted-environment.sh (100%) diff --git a/scripts/prepare-restricted-environment.sh b/.rhdh/scripts/prepare-restricted-environment.sh similarity index 100% rename from scripts/prepare-restricted-environment.sh rename to .rhdh/scripts/prepare-restricted-environment.sh From 79fff9c5028f648ac5bbd0f8ae38feb601f85279 Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Wed, 7 Feb 2024 11:35:21 +0100 Subject: [PATCH 09/16] Make helper mirror registry storage capacity configurable This is to allow running it on CRC, where storage might depend on CRC VM. --- .rhdh/scripts/prepare-restricted-environment.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.rhdh/scripts/prepare-restricted-environment.sh b/.rhdh/scripts/prepare-restricted-environment.sh index 692ae47b..31488c7a 100755 --- a/.rhdh/scripts/prepare-restricted-environment.sh +++ b/.rhdh/scripts/prepare-restricted-environment.sh @@ -24,6 +24,7 @@ set -e # --prod_operator_package_name "devspaces" \ # --prod_operator_bundle_name "rhdh-operator" \ # --prod_operator_version "v1.1.0" \ +# --helper_mirror_registry_storage "30Gi" \ # --use_existing_mirror_registry "$MY_MIRROR_REGISTRY" while [ $# -gt 0 ]; do if [[ $1 == *"--"* ]]; then @@ -44,6 +45,7 @@ declare prod_operator_version="${prod_operator_version:?Must set --prod_operator # Destination registry declare my_operator_index_image_name_and_tag=${prod_operator_package_name}-index:${prod_operator_version} +declare helper_mirror_registry_storage=${helper_mirror_registry_storage:-"30Gi"} declare my_catalog=${prod_operator_package_name}-disconnected-install declare k8s_resource_name=${my_catalog} @@ -62,7 +64,6 @@ function deploy_mirror_registry() { echo "[INFO] Deploying mirror registry..." >&2 local namespace="airgap-helper-ns" local image="registry:2" - local storage_capacity="30Gi" local username="registryuser" local password=$(echo "$RANDOM" | base64 | head -c 20) @@ -113,7 +114,7 @@ metadata: spec: resources: requests: - storage: "${storage_capacity}" + storage: "${helper_mirror_registry_storage}" storageClassName: "${storage_class}" accessModes: - ReadWriteOnce From 03b994f39a8f91ca1c181a46233615e8dbbbc7ea Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Wed, 7 Feb 2024 11:36:07 +0100 Subject: [PATCH 10/16] Use right OCP major version for release image --- .rhdh/scripts/prepare-restricted-environment.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.rhdh/scripts/prepare-restricted-environment.sh b/.rhdh/scripts/prepare-restricted-environment.sh index 31488c7a..e3dd6ff8 100755 --- a/.rhdh/scripts/prepare-restricted-environment.sh +++ b/.rhdh/scripts/prepare-restricted-environment.sh @@ -56,7 +56,8 @@ if ! oc whoami > /dev/null 2>&1; then exit 1 fi # log into your OCP cluster before running this or you'll get null values for OCP vars! -OCP_VER="$(oc version -o json | jq -r '.openshiftVersion')" +OCP_VER="$(oc version -o json | jq -r '.openshiftVersion' | sed -r -e "s#([0-9]+\.[0-9]+\.[0-9]+)-.+#\1#")" +OCP_VER_MAJOR="$(oc version -o json | jq -r '.openshiftVersion' | sed -r -e "s#([0-9]+)\..+#\1#")" OCP_ARCH="$(oc version -o json | jq -r '.serverVersion.platform' | sed -r -e "s#linux/##")" if [[ $OCP_ARCH == "amd64" ]]; then OCP_ARCH="x86_64"; fi @@ -230,7 +231,7 @@ EOF echo " writing updated pull secret into the cluster ..." >&2 oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/my-global-pull-secret-for-mirror-reg.yaml >&2 - # Need to mirror OCP release images, otherwise ImagePullBackOff when installing the operator: + # Need to mirror OCP release images, otherwise ImagePullBackOff when installing the operator after disconnecting the cluster: # unable to pull quay.io/openshift-release-dev/ocp-v4.0-art-dev@... echo "[INFO] Mirroring OCP release images ..." >&2 local ocp_product_repo='openshift-release-dev' @@ -256,7 +257,7 @@ spec: source: quay.io/openshift-release-dev/ocp-release - mirrors: - "${registry_url}/${ocp_local_repo}" - source: quay.io/openshift-release-dev/ocp-v4.0-art-dev + source: "quay.io/openshift-release-dev/ocp-v${OCP_VER_MAJOR}.0-art-dev" EOF echo "[INFO] Cleaning up temporary files ..." >&2 From 5aebdd3c0120e149037b38dea95d3d30ef681ee1 Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Wed, 7 Feb 2024 11:38:35 +0100 Subject: [PATCH 11/16] Change condition for replacing non-public CI images with quay.io This script should work for customers installing GA version (1.1+) to their airgapped environment. We also do the replacement only for rhdh images, and only if the image manifest does not exist, which would likely mean that the image is not public yet. --- .rhdh/scripts/prepare-restricted-environment.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.rhdh/scripts/prepare-restricted-environment.sh b/.rhdh/scripts/prepare-restricted-environment.sh index e3dd6ff8..07a89067 100755 --- a/.rhdh/scripts/prepare-restricted-environment.sh +++ b/.rhdh/scripts/prepare-restricted-environment.sh @@ -323,9 +323,13 @@ echo "[INFO] Mirroring related images to the $my_registry registry." while IFS= read -r line do public_image=$(echo "${line}" | cut -d '=' -f1) - if [[ "$public_image" == registry.redhat.io/rhdh/* ]]; then - # CI Builds not public yet - public_image=${public_image/registry.redhat.io/quay.io} + if [[ "$prod_operator_index" != registry.redhat.io/redhat/redhat-operator-index* ]] && [[ "$public_image" == registry.redhat.io/rhdh/* ]]; then + if ! skopeo inspect "docker://$public_image" &> /dev/null; then + # likely CI build, which is not public yet + echo " Replacing non-public CI image $public_image ..." + public_image=${public_image/registry.redhat.io\/rhdh/quay.io\/rhdh} + echo " => $public_image" + fi fi private_image=$(echo "${line}" | cut -d '=' -f2) echo "[INFO] Mirroring ${public_image}" From d857c4a3b4ba7a9d848e67663325b9a5d658174a Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Wed, 7 Feb 2024 11:40:07 +0100 Subject: [PATCH 12/16] Force-recreate the helper mirror registry Deployment Generated registry password will change if we run the script twice. So we won't be able to login using the new password. --- .rhdh/scripts/prepare-restricted-environment.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.rhdh/scripts/prepare-restricted-environment.sh b/.rhdh/scripts/prepare-restricted-environment.sh index 07a89067..1bde20e0 100755 --- a/.rhdh/scripts/prepare-restricted-environment.sh +++ b/.rhdh/scripts/prepare-restricted-environment.sh @@ -122,7 +122,8 @@ spec: EOF echo " creating mirror registry Deployment: deployment/airgap-registry ..." >&2 - cat <&2 + # Replacing because password might have changed if we run the script a second time + cat <&2 apiVersion: apps/v1 kind: Deployment metadata: From e891da36a97dc199a3c32a7ea2fd1f848dd45162 Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Wed, 7 Feb 2024 11:40:26 +0100 Subject: [PATCH 13/16] Clean prepare-restricted-environment.sh script --- .rhdh/scripts/prepare-restricted-environment.sh | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/.rhdh/scripts/prepare-restricted-environment.sh b/.rhdh/scripts/prepare-restricted-environment.sh index 1bde20e0..51c4c708 100755 --- a/.rhdh/scripts/prepare-restricted-environment.sh +++ b/.rhdh/scripts/prepare-restricted-environment.sh @@ -11,13 +11,6 @@ # Fail on error set -e -# INTERNAL_REGISTRY_URL, eg 'ec2-3-12-71-143.us-east-2.compute.amazonaws.com:5000' or 'default-route-openshift-image-registry.apps.ci-ln-x0yk982-72292.origin-ci-int-gce.dev.rhcloud.com' -# INTERNAL_REG_USERNAME, eg., dummy -# INTERNAL_REG_PASSWORD, eg., dummy - -# podman login registry.redhat.io -u ${RRIO_USERNAME} -p ${RRIO_PASSWORD} -# podman login ${INTERNAL_REGISTRY_URL} -u ${INTERNAL_REG_USERNAME} -p ${INTERNAL_REG_PASSWORD} --tls-verify=false - # example usage: # ./prepare-restricted-environment.sh \ # --prod_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.14" \ @@ -155,18 +148,11 @@ spec: value: "/auth/htpasswd" - name: REGISTRY_STORAGE_DELETE_ENABLED value: "true" -# - name: REGISTRY_HTTP_TLS_CERTIFICATE -# value: "/certs/tls.crt" -# - name: REGISTRY_HTTP_TLS_KEY -# value: "/certs/tls.key" ports: - containerPort: 5000 volumeMounts: - name: registry-vol mountPath: /var/lib/registry -# - name: tls-vol -# mountPath: /certs -# readOnly: true - name: auth-vol mountPath: "/auth" readOnly: true @@ -175,9 +161,6 @@ spec: - name: registry-vol persistentVolumeClaim: claimName: airgap-registry-storage -# - name: tls-vol -# secret: -# secretName: airgap-registry-certificate - name: auth-vol secret: secretName: airgap-registry-auth From f8500e2c525383f21f6964f8a068f0d644e36f71 Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Wed, 7 Feb 2024 14:26:08 +0100 Subject: [PATCH 14/16] Add docs --- .rhdh/docs/airgap.adoc | 109 ++++++++++++++++++ .../airgap/rhdh_catalog_operatorhub.png | Bin 0 -> 122608 bytes .../airgap/rhdh_operator_install_ok.png | Bin 0 -> 25046 bytes .rhdh/docs/openshift.adoc | 3 +- 4 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 .rhdh/docs/airgap.adoc create mode 100644 .rhdh/docs/images/airgap/rhdh_catalog_operatorhub.png create mode 100644 .rhdh/docs/images/airgap/rhdh_operator_install_ok.png diff --git a/.rhdh/docs/airgap.adoc b/.rhdh/docs/airgap.adoc new file mode 100644 index 00000000..16030fa9 --- /dev/null +++ b/.rhdh/docs/airgap.adoc @@ -0,0 +1,109 @@ +==== Installing Red Hat Developer Hub (RHDH) in restricted environments + +On an OpenShift cluster operating in a restricted network, public resources are not available. +However, deploying the RHDH Operator and running RHDH requires the following public resources: + +* Operator images (bundle, operator, catalog) +* Operands images (RHDH, PostgreSQL) + +To make these resources available, we will need to replace them with their copies in a mirror registry accessible by the OpenShift cluster. + +We provide a helper script that mirrors all the necessary images and does the necessary plumbing to ensure those images will be used when installing the RHDH Operator and creating RHDH instances. + +This requires a target mirror registry, which you should already have if your OpenShift cluster is already ready to operate on a restricted network. + +However, if you are preparing your cluster for disconnected usage, the script can also deploy a mirror registry in the cluster and use it for the mirroring process. + +*Prerequisites* + +* An active `oc` session with administrative permissions to the OpenShift cluster. See link:https://docs.openshift.com/container-platform/4.14/cli_reference/openshift_cli/getting-started-cli.html[Getting started with the OpenShift CLI]. +* An active `oc registry` session to the `registry.redhat.io` Red Hat Ecosystem Catalog. See link:https://access.redhat.com/RegistryAuthentication[Red Hat Container Registry Authentication]. +* `opm`. See link:https://docs.openshift.com/container-platform/4.14/cli_reference/opm/cli-opm-install.html[Installing the opm CLI]. +* `jq`. See link:https://jqlang.github.io/jq/download/[Download jq]. +* `podman`. See link:https://podman.io/docs/installation[Podman Installation Instructions]. +* `skopeo` version 1.14 or higher. See link:https://github.com/containers/skopeo/blob/main/install.md[Installing Skopeo]. +* If you already have a mirror registry for your cluster, an active `skopeo` session with administrative access to this registry is required. See link:https://github.com/containers/skopeo#authenticating-to-a-registry[Authenticating to a registry] and link:https://docs.openshift.com/container-platform/4.14/installing/disconnected_install/installing-mirroring-installation-images.html[Mirroring images for a disconnected installation]. +* If you don't already have a mirror registry and want the helper script to create one for you: +** `curl`. On Red Hat Enterprise Linux, this is available by installing the `curl` package; for other platforms, see link:https://curl.se/[the cURL website]. ++ +[source,console] +---- +$ sudo yum install curl +---- +** `htpasswd` from your package manager. On Red Hat Enterprise Linux, this is available by installing the `httpd-tools` package: ++ +[source,console] +---- +$ sudo yum install httpd-tools +---- + +**Procedure** + +. Download and execute the mirroring script to install a custom Operator catalog and mirror the related images: `prepare-restricted-environment.sh` (link:https://github.com/janus-idp/operator/blob/main/.rhdh/scripts/prepare-restricted-environment.sh[source]) ++ +[source,console] +---- +$ # +$ # For GA releases +$ # + +$ # if you don't already have a target mirror registry +$ # and want the script to create one for you. +$ bash prepare-restricted-environment.sh \ + --prod_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.14" \ + --prod_operator_package_name "rhdh" \ + --prod_operator_bundle_name "rhdh-operator" \ + --prod_operator_version "v1.1.0" + +$ # or, if you already have a target mirror registry +$ bash prepare-restricted-environment.sh \ + --prod_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.14" \ + --prod_operator_package_name "rhdh" \ + --prod_operator_bundle_name "rhdh-operator" \ + --prod_operator_version "v1.1.0" \ + --use_existing_mirror_registry "" + +$ #---------------------------------------------------- + +$ # +$ # For CI Builds +$ # + +$ # if you don't already have a target mirror registry +$ # and want the script to create one for you. +$ bash prepare-restricted-environment.sh \ + --prod_operator_index "quay.io/rhdh/iib:latest-v4.14-x86_64" \ + --prod_operator_package_name "rhdh" \ + --prod_operator_bundle_name "rhdh-operator" \ + --prod_operator_version "v1.1.0" + +$ # or, if you already have a target mirror registry +$ bash prepare-restricted-environment.sh \ + --prod_operator_index "quay.io/rhdh/iib:latest-v4.14-x86_64" \ + --prod_operator_package_name "rhdh" \ + --prod_operator_bundle_name "rhdh-operator" \ + --prod_operator_version "v1.1.0" \ + --use_existing_mirror_registry "" +---- ++ +Be patient, the script can take several minutes to complete. +Once done, you can make sure your cluster is disconnected from the public internet and install the RHDH operator. +. Log in as an _administrator_ to the OpenShift web console. +. In the *Administrator* view of the OpenShift web console, go to *Operators* → *OperatorHub* and search for *Red Hat Developer Hub*. ++ +image::images/airgap/rhdh_catalog_operatorhub.png[RHDH CatalogSource from Operator Hub] +. Install the Red Hat Developer Hub Operator. For more info, see https://docs.openshift.com/container-platform/4.14/operators/admin/olm-adding-operators-to-cluster.html#olm-installing-from-operatorhub-using-web-console_olm-adding-operators-to-a-cluster[Installing from OperatorHub using the web console]. ++ +image::images/airgap/rhdh_operator_install_ok.png[RHDH Operator Successful installation] +. Create an OpenShift project to be used by your Backstage instance. +For more information about creating a project in OpenShift, see the https://docs.openshift.com/container-platform/4.14/applications/projects/working-with-projects.html#creating-a-project-using-the-web-console_projects[Red Hat OpenShift documentation]. +. Switch to the *Developer* perspective in your Red Hat OpenShift web console. +. Click *+Add*. +. From the *Developer Catalog* panel, click *Operator Backed*. +. Search for _Backstage_ in the search bar and select the *Backstage* card. +. Click *Create*. +. Click *Create* and wait for the database and Red Hat Developer Hub to start. +. Click the *Open URL* option to start using the Red Hat Developer Hub platform. ++ +image::images/rhdh_from_operator.png[RHDH from Operator] +. See link:openshift.adoc#_configurations_for_operator_backed_rhdh[Configurations for Operator-backed RHDH] for further details about configuring your RHDH instance. diff --git a/.rhdh/docs/images/airgap/rhdh_catalog_operatorhub.png b/.rhdh/docs/images/airgap/rhdh_catalog_operatorhub.png new file mode 100644 index 0000000000000000000000000000000000000000..06e2e786030f7ff3fefcfc66c2e9b107cf0969ed GIT binary patch literal 122608 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�pG1r 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ξ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 PVkml5N+|B~t%v^)4*LTn literal 0 HcmV?d00001 diff --git a/.rhdh/docs/images/airgap/rhdh_operator_install_ok.png b/.rhdh/docs/images/airgap/rhdh_operator_install_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..83e9738aa3034ddc808d36d83b8b5a427e16fcbe GIT binary patch literal 25046 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 literal 0 HcmV?d00001 diff --git a/.rhdh/docs/openshift.adoc b/.rhdh/docs/openshift.adoc index 68f1ffdd..0255a080 100644 --- a/.rhdh/docs/openshift.adoc +++ b/.rhdh/docs/openshift.adoc @@ -24,6 +24,7 @@ For more information about creating a project in OpenShift, see the https://docs image::images/rhdh_from_operator.png[RHDH from Operator] +[#_configurations_for_operator_backed_rhdh] === Configurations for Operator-backed RHDH NOTE: At the moment, updates to the Backstage Custom Resource (CR) are automatically handled by the Operator. @@ -267,4 +268,4 @@ This is because the credentials might not be valid or the external database migh ==== Air-gap/Offline support -TODO +More details in link:airgap.adoc[Air-gap/Offline support]. From 5684a015368164260aa83588ace0fce749a5f14a Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Wed, 7 Feb 2024 14:44:34 +0100 Subject: [PATCH 15/16] fixup! Add docs --- .rhdh/docs/airgap.adoc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.rhdh/docs/airgap.adoc b/.rhdh/docs/airgap.adoc index 16030fa9..59806b33 100644 --- a/.rhdh/docs/airgap.adoc +++ b/.rhdh/docs/airgap.adoc @@ -23,6 +23,9 @@ However, if you are preparing your cluster for disconnected usage, the script ca * `podman`. See link:https://podman.io/docs/installation[Podman Installation Instructions]. * `skopeo` version 1.14 or higher. See link:https://github.com/containers/skopeo/blob/main/install.md[Installing Skopeo]. * If you already have a mirror registry for your cluster, an active `skopeo` session with administrative access to this registry is required. See link:https://github.com/containers/skopeo#authenticating-to-a-registry[Authenticating to a registry] and link:https://docs.openshift.com/container-platform/4.14/installing/disconnected_install/installing-mirroring-installation-images.html[Mirroring images for a disconnected installation]. ++ +NOTE: The internal OpenShift cluster image registry cannot be used as target mirror registry. See link:https://docs.openshift.com/container-platform/4.14/installing/disconnected_install/installing-mirroring-installation-images.html#installation-about-mirror-registry_installing-mirroring-installation-images[About the mirror registry]. +* If you prefer to create your own mirror registry, refer to link:https://docs.openshift.com/container-platform/4.14/installing/disconnected_install/installing-mirroring-creating-registry.html[Creating a mirror registry with mirror registry for Red Hat OpenShift]. * If you don't already have a mirror registry and want the helper script to create one for you: ** `curl`. On Red Hat Enterprise Linux, this is available by installing the `curl` package; for other platforms, see link:https://curl.se/[the cURL website]. + From f9233441f05a48db9583a29e8af62cc7cd54ad33 Mon Sep 17 00:00:00 2001 From: Armel Soro Date: Wed, 7 Feb 2024 16:58:01 +0100 Subject: [PATCH 16/16] Update .rhdh/scripts/prepare-restricted-environment.sh Co-authored-by: Jianrong Zhang Co-authored-by: Nick Boldt --- .rhdh/scripts/prepare-restricted-environment.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.rhdh/scripts/prepare-restricted-environment.sh b/.rhdh/scripts/prepare-restricted-environment.sh index 51c4c708..bfaa8b60 100755 --- a/.rhdh/scripts/prepare-restricted-environment.sh +++ b/.rhdh/scripts/prepare-restricted-environment.sh @@ -14,7 +14,7 @@ set -e # example usage: # ./prepare-restricted-environment.sh \ # --prod_operator_index "registry.redhat.io/redhat/redhat-operator-index:v4.14" \ -# --prod_operator_package_name "devspaces" \ +# --prod_operator_package_name "rhdh" \ # --prod_operator_bundle_name "rhdh-operator" \ # --prod_operator_version "v1.1.0" \ # --helper_mirror_registry_storage "30Gi" \