diff --git a/README.md b/README.md index 340157c27..fa5cbe6dd 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,44 @@ The deployment is completed when HCO custom resource reports its condition as `A For more explanation and advanced options for HCO deployment using kustomize, refer to [kustomize deployment documentation](deploy/kustomize/README.md). +## + +## Building Custom Bundle and Index Image +As prerequisites, [OLM](https://sdk.operatorframework.io/docs/installation/) is required. +If you wish to use cert-manager for certificates, the script in hack/deploy-cert-manager.sh might be helpful. + +To build a custom bundle and index image, with [opm](https://docs.redhat.com/en/documentation/openshift_container_platform/4.9/html/cli_tools/opm-cli) installed run: +```bash +# Set your image repository +export REGISTRY_NAMESPACE= +export IMAGE_TAG= + +make build-push-multi-arch-operator-image build-push-multi-arch-webhook-image build-push-multi-arch-artifacts-server + +export HCO_OPERATOR_IMAGE="quay.io/${REGISTRY_NAMESPACE}/hyperconverged-cluster-operator:${IMAGE_TAG}" +export HCO_WEBHOOK_IMAGE="quay.io/${REGISTRY_NAMESPACE}/hyperconverged-cluster-webhook:${IMAGE_TAG}" +export HCO_DOWNLOADS_IMAGE="quay.io/${REGISTRY_NAMESPACE}/virt-artifacts-server:${IMAGE_TAG}" + +# Export env variables for your custom operator images. The environment variables can be found in the deploy/images.env file. +# This file is auto-generated and should not be modified. For example, change the image of the KubeVirt Operator image by +# setting the KUBEVIRT_OPERATOR_IMAGE environment variable. +export KUBEVIRT_OPERATOR_IMAGE= +# Build manifests with custom operator images +UNIQUE=true make build-manifests + +./hack/build-index-image.sh latest UNSTABLE +``` + +This will: +1. Generate ClusterServiceVersion (CSV) and other manifests with your custom operator images +2. Build and push a bundle image containing the manifests +3. Build and push an index image referencing the bundle + +You can then use the index image to deploy HCO via OLM by creating a CatalogSource pointing to your custom index image. +Alternatively, you can install the operator via operator-sdk like so: +```bash +operator-sdk run bundle -n --timeout=10m +``` ## Installing Unreleased Bundle Using A Custom Catalog Source Hyperconverged Cluster Operator is publishing the latest bundle to [quay.io/kubevirt](https://quay.io/repository/kubevirt) diff --git a/deploy/images.env b/deploy/images.env index ebf0aa72d..e03c58e3c 100755 --- a/deploy/images.env +++ b/deploy/images.env @@ -1,76 +1,76 @@ -KUBEVIRT_OPERATOR_IMAGE=quay.io/kubevirt/virt-operator@sha256:a17e226fe5ab767225eb5b41a15e0bb43e361c0879c35b459aa13af62ae19d21 -KUBEVIRT_API_IMAGE=quay.io/kubevirt/virt-api@sha256:f1e90ebd65379823086d1a843b12dc5ab67a4f976ed5bee01820402523dc5bbc -KUBEVIRT_CONTROLLER_IMAGE=quay.io/kubevirt/virt-controller@sha256:8bb063af80ebe34ba41d4a6ca2c107adea64e10d4260374df991965200532f17 -KUBEVIRT_LAUNCHER_IMAGE=quay.io/kubevirt/virt-launcher@sha256:7877e87800134a9e5a858f40fb729f429f4f7c6a1d0c73f920cfcdd5db59b520 -KUBEVIRT_HANDLER_IMAGE=quay.io/kubevirt/virt-handler@sha256:759c49601df4d0e804ba4f9c13dcf941977ead75256bb4f209aef97b456f6c79 -KUBEVIRT_VIRTIO_IMAGE=quay.io/kubevirt/virtio-container-disk@sha256:6b823946eb7493347a93d6daa16b4101a68e16a0ee1766e01ac3adf82e4b5838 -KUBEVIRT_LIBGUESTFS_TOOLS_IMAGE=quay.io/kubevirt/libguestfs-tools@sha256:64e5b12871b91db2997fc30dc2e3ddd15df35298f518cca8dafc48807bcd1116 -KUBEVIRT_EXPORTPROXY_IMAGE=quay.io/kubevirt/virt-exportproxy@sha256:56a4a825c111f32b208cfd611e37975f53994ad89230e31904530c213a2fa931 -KUBEVIRT_EXPORSERVER_IMAGE=quay.io/kubevirt/virt-exportserver@sha256:390041808a4dc68304858ed035dc28c1f584febca4d8651d9ed4f8d0ef49ba63 -NETWORK_PASST_BINDING_IMAGE=quay.io/kubevirt/network-passt-binding@sha256:37f9b638d11068efa267a284bd7c7dcececbd07a9df1f53311dfacc0f786aaa1 -NETWORK_PASST_BINDING_CNI_IMAGE=quay.io/kubevirt/network-passt-binding-cni@sha256:7f0a6d3472b8c897c545aa2b1b000e8c78d72bb105d4e235cce308574920a7cc -KUBEVIRT_PR_HELPER=quay.io/kubevirt/pr-helper@sha256:5b2c14125c50609141756125a2008f3ee5eec0f7ad55e55a7c42e2b99130b920 -KUBEVIRT_SIDECAR_SHIM=quay.io/kubevirt/sidecar-shim@sha256:40efe54013908a136396a13c7c35ecf17efa3ccf7a086a4faaeab490898e1d6c -KUBEVIRT_SYNC_CONTROLLER_IMAGE=quay.io/kubevirt/virt-synchronization-controller@sha256:80fe77f0a2a2f5b579f16aed8c1869aee77cec1ad3410998e3252aaca7032ead -CNA_OPERATOR_IMAGE=quay.io/kubevirt/cluster-network-addons-operator@sha256:088f694943fee574ef92b65d0ed62fd0799fb67023b6368259663236da76a6b5 -SSP_OPERATOR_IMAGE=quay.io/kubevirt/ssp-operator@sha256:7a8d04480403bcbbdd5cd854701013bfe57a4d7ae57aad6e9c83aae331e91bfa -SSP_VALIDATOR_IMAGE=quay.io/kubevirt/kubevirt-template-validator@sha256:87350bb8e68683509b8ffa72738ad719b22f48192b88bc58ab6223980c4ccee9 -CDI_OPERATOR_IMAGE=quay.io/kubevirt/cdi-operator@sha256:8b2028dc3695d1e3ec4b5d3ad0fff4e356f6e22f0c407cc70e5c551a55afaf47 -CDI_CONTROLLER_IMAGE=quay.io/kubevirt/cdi-controller@sha256:a173f818e6e7f2be3db6390b638399dd496bc2b5595550e4381ef9586a81c144 -CDI_APISERVER_IMAGE=quay.io/kubevirt/cdi-apiserver@sha256:7e36cab28362127345282b5f65ca358607cf275a4eacbfff9bafce18128d58e7 -CDI_CLONER_IMAGE=quay.io/kubevirt/cdi-cloner@sha256:ff5c705081d59bc62141138979178ca542ebe31ff29906eca23b6d8b5c89aca0 -CDI_IMPORTER_IMAGE=quay.io/kubevirt/cdi-importer@sha256:2ab689c89a7c9256fde8ccf7e13a6cfae7c89b7288fc756f139caf5930c39d10 -CDI_UPLOADPROXY_IMAGE=quay.io/kubevirt/cdi-uploadproxy@sha256:b6b3cfaad4886faa1762888c0dc92105cc90d678f4ac14e12917af77f49d91a6 -CDI_UPLOADSERVER_IMAGE=quay.io/kubevirt/cdi-uploadserver@sha256:db3bf75d7a940e545b1a38d0bfff7fdc271cfc1d64a77609e07a5d0f2e6683ad -HPPO_IMAGE=quay.io/kubevirt/hostpath-provisioner-operator@sha256:3737d52b8046c9c92dbf36fa9826af6da66f1b54063ad09ff77486727ba44ae5 -HPP_IMAGE=quay.io/kubevirt/hostpath-provisioner@sha256:bcd397fe2edfdbfa8378ec29a4cd5fe5e9d86fd8b689dcae2a2383ae6af993ad -HPP_CSI_IMAGE=quay.io/kubevirt/hostpath-csi-driver@sha256:669911b1b4d30f68f5752a1502bb674d9fabe30ed2e0f46bf96908827f8c20cd -NODE_DRIVER_REG_IMAGE=registry.k8s.io/sig-storage/csi-node-driver-registrar@sha256:11f199f6bec47403b03cb49c79a41f445884b213b382582a60710b8c6fdc316a -LIVENESS_PROBE_IMAGE=registry.k8s.io/sig-storage/livenessprobe@sha256:9b75b9ade162136291d5e8f13a1dfc3dec71ee61419b1bfc112e0796ff8a6aa9 -CSI_SNAPSHOT_IMAGE=registry.k8s.io/sig-storage/csi-snapshotter@sha256:c7e0a3718832b6197ce8b29fefb3fed3d84f4fbcdf08f4606140dbec2566501d -CSI_SIG_STORAGE_PROVISIONER_IMAGE=registry.k8s.io/sig-storage/csi-provisioner@sha256:d078dc174323407e8cc6f0f9abd4efaac5db27838f1564d0253d5e3233e3f17f -KUBE_RBAC_PROXY_IMAGE=quay.io/openshift/origin-kube-rbac-proxy@sha256:e2def4213ec0657e72eb790ae8a115511d5b8f164a62d3568d2f1bff189917e8 -KUBEVIRT_CONSOLE_PLUGIN_IMAGE=quay.io/kubevirt-ui/kubevirt-plugin@sha256:0b751cf8e97cbe453f00e139f32c0878065ccb08b286bb4719dc417f414eb4b7 -KUBEVIRT_CONSOLE_PROXY_IMAGE=quay.io/kubevirt-ui/kubevirt-apiserver-proxy@sha256:935475c2850466aa5ac57e4de627fb177515cb2c402a95842ead095d82b6df5f -AAQ_OPERATOR_IMAGE=quay.io/kubevirt/aaq-operator@sha256:98c4d2e73c733468f3c4724c72c4d42411f49706cdfa843ce1d507c356621088 -AAQ_SERVER_IMAGE=quay.io/kubevirt/aaq-server@sha256:dfb46682eb734e73a1142b9af5f94f2f70aa9a7e04a7c804565f2a89fbf0f989 -AAQ_CONTROLLER_IMAGE=quay.io/kubevirt/aaq-controller@sha256:04199fad9d42e0d9206ae042545b48da4c3bf14995d87aa6d8c804b0f9beeea4 -WASP_AGENT_IMAGE=quay.io/openshift-virtualization/wasp-agent@sha256:eabfa6a425213f520f7a9e5b81b43e8b6430779d42c5c8b1bfd48a4f1730447a -DIGEST_LIST="quay.io/kubevirt/virt-operator@sha256:a17e226fe5ab767225eb5b41a15e0bb43e361c0879c35b459aa13af62ae19d21" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/virt-api@sha256:f1e90ebd65379823086d1a843b12dc5ab67a4f976ed5bee01820402523dc5bbc" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/virt-controller@sha256:8bb063af80ebe34ba41d4a6ca2c107adea64e10d4260374df991965200532f17" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/virt-launcher@sha256:7877e87800134a9e5a858f40fb729f429f4f7c6a1d0c73f920cfcdd5db59b520" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/virt-handler@sha256:759c49601df4d0e804ba4f9c13dcf941977ead75256bb4f209aef97b456f6c79" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/virtio-container-disk@sha256:6b823946eb7493347a93d6daa16b4101a68e16a0ee1766e01ac3adf82e4b5838" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/libguestfs-tools@sha256:64e5b12871b91db2997fc30dc2e3ddd15df35298f518cca8dafc48807bcd1116" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/virt-exportproxy@sha256:56a4a825c111f32b208cfd611e37975f53994ad89230e31904530c213a2fa931" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/virt-exportserver@sha256:390041808a4dc68304858ed035dc28c1f584febca4d8651d9ed4f8d0ef49ba63" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/network-passt-binding@sha256:37f9b638d11068efa267a284bd7c7dcececbd07a9df1f53311dfacc0f786aaa1" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/network-passt-binding-cni@sha256:7f0a6d3472b8c897c545aa2b1b000e8c78d72bb105d4e235cce308574920a7cc" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/pr-helper@sha256:5b2c14125c50609141756125a2008f3ee5eec0f7ad55e55a7c42e2b99130b920" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/sidecar-shim@sha256:40efe54013908a136396a13c7c35ecf17efa3ccf7a086a4faaeab490898e1d6c" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/virt-synchronization-controller@sha256:80fe77f0a2a2f5b579f16aed8c1869aee77cec1ad3410998e3252aaca7032ead" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/cluster-network-addons-operator@sha256:088f694943fee574ef92b65d0ed62fd0799fb67023b6368259663236da76a6b5" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/ssp-operator@sha256:7a8d04480403bcbbdd5cd854701013bfe57a4d7ae57aad6e9c83aae331e91bfa" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/kubevirt-template-validator@sha256:87350bb8e68683509b8ffa72738ad719b22f48192b88bc58ab6223980c4ccee9" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/cdi-operator@sha256:8b2028dc3695d1e3ec4b5d3ad0fff4e356f6e22f0c407cc70e5c551a55afaf47" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/cdi-controller@sha256:a173f818e6e7f2be3db6390b638399dd496bc2b5595550e4381ef9586a81c144" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/cdi-apiserver@sha256:7e36cab28362127345282b5f65ca358607cf275a4eacbfff9bafce18128d58e7" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/cdi-cloner@sha256:ff5c705081d59bc62141138979178ca542ebe31ff29906eca23b6d8b5c89aca0" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/cdi-importer@sha256:2ab689c89a7c9256fde8ccf7e13a6cfae7c89b7288fc756f139caf5930c39d10" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/cdi-uploadproxy@sha256:b6b3cfaad4886faa1762888c0dc92105cc90d678f4ac14e12917af77f49d91a6" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/cdi-uploadserver@sha256:db3bf75d7a940e545b1a38d0bfff7fdc271cfc1d64a77609e07a5d0f2e6683ad" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/hostpath-provisioner-operator@sha256:3737d52b8046c9c92dbf36fa9826af6da66f1b54063ad09ff77486727ba44ae5" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/hostpath-provisioner@sha256:bcd397fe2edfdbfa8378ec29a4cd5fe5e9d86fd8b689dcae2a2383ae6af993ad" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/hostpath-csi-driver@sha256:669911b1b4d30f68f5752a1502bb674d9fabe30ed2e0f46bf96908827f8c20cd" -DIGEST_LIST="${DIGEST_LIST},registry.k8s.io/sig-storage/csi-node-driver-registrar@sha256:11f199f6bec47403b03cb49c79a41f445884b213b382582a60710b8c6fdc316a" -DIGEST_LIST="${DIGEST_LIST},registry.k8s.io/sig-storage/livenessprobe@sha256:9b75b9ade162136291d5e8f13a1dfc3dec71ee61419b1bfc112e0796ff8a6aa9" -DIGEST_LIST="${DIGEST_LIST},registry.k8s.io/sig-storage/csi-snapshotter@sha256:c7e0a3718832b6197ce8b29fefb3fed3d84f4fbcdf08f4606140dbec2566501d" -DIGEST_LIST="${DIGEST_LIST},registry.k8s.io/sig-storage/csi-provisioner@sha256:d078dc174323407e8cc6f0f9abd4efaac5db27838f1564d0253d5e3233e3f17f" -DIGEST_LIST="${DIGEST_LIST},quay.io/openshift/origin-kube-rbac-proxy@sha256:e2def4213ec0657e72eb790ae8a115511d5b8f164a62d3568d2f1bff189917e8" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt-ui/kubevirt-plugin@sha256:0b751cf8e97cbe453f00e139f32c0878065ccb08b286bb4719dc417f414eb4b7" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt-ui/kubevirt-apiserver-proxy@sha256:935475c2850466aa5ac57e4de627fb177515cb2c402a95842ead095d82b6df5f" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/aaq-operator@sha256:98c4d2e73c733468f3c4724c72c4d42411f49706cdfa843ce1d507c356621088" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/aaq-server@sha256:dfb46682eb734e73a1142b9af5f94f2f70aa9a7e04a7c804565f2a89fbf0f989" -DIGEST_LIST="${DIGEST_LIST},quay.io/kubevirt/aaq-controller@sha256:04199fad9d42e0d9206ae042545b48da4c3bf14995d87aa6d8c804b0f9beeea4" -DIGEST_LIST="${DIGEST_LIST},quay.io/openshift-virtualization/wasp-agent@sha256:eabfa6a425213f520f7a9e5b81b43e8b6430779d42c5c8b1bfd48a4f1730447a" +KUBEVIRT_OPERATOR_IMAGE="${KUBEVIRT_OPERATOR_IMAGE:-quay.io/kubevirt/virt-operator@sha256:a17e226fe5ab767225eb5b41a15e0bb43e361c0879c35b459aa13af62ae19d21}" +KUBEVIRT_API_IMAGE="${KUBEVIRT_API_IMAGE:-quay.io/kubevirt/virt-api@sha256:f1e90ebd65379823086d1a843b12dc5ab67a4f976ed5bee01820402523dc5bbc}" +KUBEVIRT_CONTROLLER_IMAGE="${KUBEVIRT_CONTROLLER_IMAGE:-quay.io/kubevirt/virt-controller@sha256:8bb063af80ebe34ba41d4a6ca2c107adea64e10d4260374df991965200532f17}" +KUBEVIRT_LAUNCHER_IMAGE="${KUBEVIRT_LAUNCHER_IMAGE:-quay.io/kubevirt/virt-launcher@sha256:7877e87800134a9e5a858f40fb729f429f4f7c6a1d0c73f920cfcdd5db59b520}" +KUBEVIRT_HANDLER_IMAGE="${KUBEVIRT_HANDLER_IMAGE:-quay.io/kubevirt/virt-handler@sha256:759c49601df4d0e804ba4f9c13dcf941977ead75256bb4f209aef97b456f6c79}" +KUBEVIRT_VIRTIO_IMAGE="${KUBEVIRT_VIRTIO_IMAGE:-quay.io/kubevirt/virtio-container-disk@sha256:6b823946eb7493347a93d6daa16b4101a68e16a0ee1766e01ac3adf82e4b5838}" +KUBEVIRT_LIBGUESTFS_TOOLS_IMAGE="${KUBEVIRT_LIBGUESTFS_TOOLS_IMAGE:-quay.io/kubevirt/libguestfs-tools@sha256:64e5b12871b91db2997fc30dc2e3ddd15df35298f518cca8dafc48807bcd1116}" +KUBEVIRT_EXPORTPROXY_IMAGE="${KUBEVIRT_EXPORTPROXY_IMAGE:-quay.io/kubevirt/virt-exportproxy@sha256:56a4a825c111f32b208cfd611e37975f53994ad89230e31904530c213a2fa931}" +KUBEVIRT_EXPORSERVER_IMAGE="${KUBEVIRT_EXPORSERVER_IMAGE:-quay.io/kubevirt/virt-exportserver@sha256:390041808a4dc68304858ed035dc28c1f584febca4d8651d9ed4f8d0ef49ba63}" +NETWORK_PASST_BINDING_IMAGE="${NETWORK_PASST_BINDING_IMAGE:-quay.io/kubevirt/network-passt-binding@sha256:37f9b638d11068efa267a284bd7c7dcececbd07a9df1f53311dfacc0f786aaa1}" +NETWORK_PASST_BINDING_CNI_IMAGE="${NETWORK_PASST_BINDING_CNI_IMAGE:-quay.io/kubevirt/network-passt-binding-cni@sha256:7f0a6d3472b8c897c545aa2b1b000e8c78d72bb105d4e235cce308574920a7cc}" +KUBEVIRT_PR_HELPER="${KUBEVIRT_PR_HELPER:-quay.io/kubevirt/pr-helper@sha256:5b2c14125c50609141756125a2008f3ee5eec0f7ad55e55a7c42e2b99130b920}" +KUBEVIRT_SIDECAR_SHIM="${KUBEVIRT_SIDECAR_SHIM:-quay.io/kubevirt/sidecar-shim@sha256:40efe54013908a136396a13c7c35ecf17efa3ccf7a086a4faaeab490898e1d6c}" +KUBEVIRT_SYNC_CONTROLLER_IMAGE="${KUBEVIRT_SYNC_CONTROLLER_IMAGE:-quay.io/kubevirt/virt-synchronization-controller@sha256:80fe77f0a2a2f5b579f16aed8c1869aee77cec1ad3410998e3252aaca7032ead}" +CNA_OPERATOR_IMAGE="${CNA_OPERATOR_IMAGE:-quay.io/kubevirt/cluster-network-addons-operator@sha256:088f694943fee574ef92b65d0ed62fd0799fb67023b6368259663236da76a6b5}" +SSP_OPERATOR_IMAGE="${SSP_OPERATOR_IMAGE:-quay.io/kubevirt/ssp-operator@sha256:7a8d04480403bcbbdd5cd854701013bfe57a4d7ae57aad6e9c83aae331e91bfa}" +SSP_VALIDATOR_IMAGE="${SSP_VALIDATOR_IMAGE:-quay.io/kubevirt/kubevirt-template-validator@sha256:87350bb8e68683509b8ffa72738ad719b22f48192b88bc58ab6223980c4ccee9}" +CDI_OPERATOR_IMAGE="${CDI_OPERATOR_IMAGE:-quay.io/kubevirt/cdi-operator@sha256:8b2028dc3695d1e3ec4b5d3ad0fff4e356f6e22f0c407cc70e5c551a55afaf47}" +CDI_CONTROLLER_IMAGE="${CDI_CONTROLLER_IMAGE:-quay.io/kubevirt/cdi-controller@sha256:a173f818e6e7f2be3db6390b638399dd496bc2b5595550e4381ef9586a81c144}" +CDI_APISERVER_IMAGE="${CDI_APISERVER_IMAGE:-quay.io/kubevirt/cdi-apiserver@sha256:7e36cab28362127345282b5f65ca358607cf275a4eacbfff9bafce18128d58e7}" +CDI_CLONER_IMAGE="${CDI_CLONER_IMAGE:-quay.io/kubevirt/cdi-cloner@sha256:ff5c705081d59bc62141138979178ca542ebe31ff29906eca23b6d8b5c89aca0}" +CDI_IMPORTER_IMAGE="${CDI_IMPORTER_IMAGE:-quay.io/kubevirt/cdi-importer@sha256:2ab689c89a7c9256fde8ccf7e13a6cfae7c89b7288fc756f139caf5930c39d10}" +CDI_UPLOADPROXY_IMAGE="${CDI_UPLOADPROXY_IMAGE:-quay.io/kubevirt/cdi-uploadproxy@sha256:b6b3cfaad4886faa1762888c0dc92105cc90d678f4ac14e12917af77f49d91a6}" +CDI_UPLOADSERVER_IMAGE="${CDI_UPLOADSERVER_IMAGE:-quay.io/kubevirt/cdi-uploadserver@sha256:db3bf75d7a940e545b1a38d0bfff7fdc271cfc1d64a77609e07a5d0f2e6683ad}" +HPPO_IMAGE="${HPPO_IMAGE:-quay.io/kubevirt/hostpath-provisioner-operator@sha256:3737d52b8046c9c92dbf36fa9826af6da66f1b54063ad09ff77486727ba44ae5}" +HPP_IMAGE="${HPP_IMAGE:-quay.io/kubevirt/hostpath-provisioner@sha256:bcd397fe2edfdbfa8378ec29a4cd5fe5e9d86fd8b689dcae2a2383ae6af993ad}" +HPP_CSI_IMAGE="${HPP_CSI_IMAGE:-quay.io/kubevirt/hostpath-csi-driver@sha256:669911b1b4d30f68f5752a1502bb674d9fabe30ed2e0f46bf96908827f8c20cd}" +NODE_DRIVER_REG_IMAGE="${NODE_DRIVER_REG_IMAGE:-registry.k8s.io/sig-storage/csi-node-driver-registrar@sha256:11f199f6bec47403b03cb49c79a41f445884b213b382582a60710b8c6fdc316a}" +LIVENESS_PROBE_IMAGE="${LIVENESS_PROBE_IMAGE:-registry.k8s.io/sig-storage/livenessprobe@sha256:9b75b9ade162136291d5e8f13a1dfc3dec71ee61419b1bfc112e0796ff8a6aa9}" +CSI_SNAPSHOT_IMAGE="${CSI_SNAPSHOT_IMAGE:-registry.k8s.io/sig-storage/csi-snapshotter@sha256:c7e0a3718832b6197ce8b29fefb3fed3d84f4fbcdf08f4606140dbec2566501d}" +CSI_SIG_STORAGE_PROVISIONER_IMAGE="${CSI_SIG_STORAGE_PROVISIONER_IMAGE:-registry.k8s.io/sig-storage/csi-provisioner@sha256:d078dc174323407e8cc6f0f9abd4efaac5db27838f1564d0253d5e3233e3f17f}" +KUBE_RBAC_PROXY_IMAGE="${KUBE_RBAC_PROXY_IMAGE:-quay.io/openshift/origin-kube-rbac-proxy@sha256:e2def4213ec0657e72eb790ae8a115511d5b8f164a62d3568d2f1bff189917e8}" +KUBEVIRT_CONSOLE_PLUGIN_IMAGE="${KUBEVIRT_CONSOLE_PLUGIN_IMAGE:-quay.io/kubevirt-ui/kubevirt-plugin@sha256:0b751cf8e97cbe453f00e139f32c0878065ccb08b286bb4719dc417f414eb4b7}" +KUBEVIRT_CONSOLE_PROXY_IMAGE="${KUBEVIRT_CONSOLE_PROXY_IMAGE:-quay.io/kubevirt-ui/kubevirt-apiserver-proxy@sha256:935475c2850466aa5ac57e4de627fb177515cb2c402a95842ead095d82b6df5f}" +AAQ_OPERATOR_IMAGE="${AAQ_OPERATOR_IMAGE:-quay.io/kubevirt/aaq-operator@sha256:98c4d2e73c733468f3c4724c72c4d42411f49706cdfa843ce1d507c356621088}" +AAQ_SERVER_IMAGE="${AAQ_SERVER_IMAGE:-quay.io/kubevirt/aaq-server@sha256:dfb46682eb734e73a1142b9af5f94f2f70aa9a7e04a7c804565f2a89fbf0f989}" +AAQ_CONTROLLER_IMAGE="${AAQ_CONTROLLER_IMAGE:-quay.io/kubevirt/aaq-controller@sha256:04199fad9d42e0d9206ae042545b48da4c3bf14995d87aa6d8c804b0f9beeea4}" +WASP_AGENT_IMAGE="${WASP_AGENT_IMAGE:-quay.io/openshift-virtualization/wasp-agent@sha256:eabfa6a425213f520f7a9e5b81b43e8b6430779d42c5c8b1bfd48a4f1730447a}" +DIGEST_LIST="${KUBEVIRT_OPERATOR_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${KUBEVIRT_API_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${KUBEVIRT_CONTROLLER_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${KUBEVIRT_LAUNCHER_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${KUBEVIRT_HANDLER_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${KUBEVIRT_VIRTIO_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${KUBEVIRT_LIBGUESTFS_TOOLS_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${KUBEVIRT_EXPORTPROXY_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${KUBEVIRT_EXPORSERVER_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${NETWORK_PASST_BINDING_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${NETWORK_PASST_BINDING_CNI_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${KUBEVIRT_PR_HELPER}" +DIGEST_LIST="${DIGEST_LIST},${KUBEVIRT_SIDECAR_SHIM}" +DIGEST_LIST="${DIGEST_LIST},${KUBEVIRT_SYNC_CONTROLLER_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${CNA_OPERATOR_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${SSP_OPERATOR_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${SSP_VALIDATOR_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${CDI_OPERATOR_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${CDI_CONTROLLER_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${CDI_APISERVER_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${CDI_CLONER_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${CDI_IMPORTER_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${CDI_UPLOADPROXY_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${CDI_UPLOADSERVER_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${HPPO_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${HPP_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${HPP_CSI_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${NODE_DRIVER_REG_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${LIVENESS_PROBE_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${CSI_SNAPSHOT_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${CSI_SIG_STORAGE_PROVISIONER_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${KUBE_RBAC_PROXY_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${KUBEVIRT_CONSOLE_PLUGIN_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${KUBEVIRT_CONSOLE_PROXY_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${AAQ_OPERATOR_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${AAQ_SERVER_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${AAQ_CONTROLLER_IMAGE}" +DIGEST_LIST="${DIGEST_LIST},${WASP_AGENT_IMAGE}" diff --git a/tools/digester/main.go b/tools/digester/main.go index 1b4912161..8d563d13f 100644 --- a/tools/digester/main.go +++ b/tools/digester/main.go @@ -20,7 +20,6 @@ package main // 31b9c7d48790f0d8c50ab433d9c3b7e17666d6993084c002c2ff1ca09b96391d // import ( - "bufio" "context" "encoding/csv" "flag" @@ -235,32 +234,31 @@ func writeEnvFile(images []*Image) error { return err } defer f.Close() - writer := bufio.NewWriter(f) - imageList := make([]string, len(images)-1, len(images)-1) + imageVarList := make([]string, len(images)-1, len(images)-1) for i, image := range images[1:] { imageDigest := buildImageDigestName(image.Name, image.Digest) - _, err = writer.WriteString(fmt.Sprintf("%s=%s\n", image.EnvVar, imageDigest)) + _, err = fmt.Fprintf(f, `%[1]s="${%[1]s:-%[2]s}"`+"\n", image.EnvVar, imageDigest) if err != nil { return err } - imageList[i] = imageDigest + imageVarList[i] = image.EnvVar //imageDigest } - if len(imageList) > 0 { - _, err = writer.WriteString(fmt.Sprintf("DIGEST_LIST=\"%s\"\n", imageList[0])) + if len(imageVarList) > 0 { + _, err = fmt.Fprintf(f, `DIGEST_LIST="${%s}"`+"\n", imageVarList[0]) if err != nil { return err } - for _, image := range imageList[1:] { - _, err = writer.WriteString(fmt.Sprintf("DIGEST_LIST=\"${DIGEST_LIST},%s\"\n", image)) + for _, image := range imageVarList[1:] { + _, err = fmt.Fprintf(f, `DIGEST_LIST="${DIGEST_LIST},${%s}"`+"\n", image) if err != nil { return err } } } - return writer.Flush() + return nil } func exitOnError(err error, msg string, fmtParams ...interface{}) {