From 0f345c6b8252c5223d27927c9af2eeb0073d8bbd Mon Sep 17 00:00:00 2001 From: Danil-Grigorev Date: Wed, 24 Mar 2021 22:44:50 +0100 Subject: [PATCH] Add images config map Mount config map into CCCMO deployment for correct image version evaluation on operator startup. Images will be dynamically passed to operand controllers. --- .../main.go | 12 +++++++++++- controllers/clusteroperator_controller.go | 1 + hack/example-images.json | 4 ++++ ...troller-manager-operator_01_images.configmap.yaml | 11 +++++++++++ ...ud-controller-manager-operator_11_deployment.yaml | 9 +++++++++ manifests/image-references | 8 ++++++++ 6 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 hack/example-images.json create mode 100644 manifests/0000_26_cloud-controller-manager-operator_01_images.configmap.yaml diff --git a/cmd/cluster-cloud-controller-manager-operator/main.go b/cmd/cluster-cloud-controller-manager-operator/main.go index 0b707c159..d7dcb700d 100644 --- a/cmd/cluster-cloud-controller-manager-operator/main.go +++ b/cmd/cluster-cloud-controller-manager-operator/main.go @@ -48,7 +48,10 @@ var ( retryPeriod = 90 * time.Second ) -const defaultManagedNamespace = "openshift-cloud-controller-manager" +const ( + defaultManagedNamespace = "openshift-cloud-controller-manager" + defaultImagesLocation = "/etc/cloud-controller-manager-config/images.json" +) func init() { utilruntime.Must(clientgoscheme.AddToScheme(scheme)) @@ -97,6 +100,12 @@ func main() { "The namespace for managed objects, where out-of-tree CCM binaries will run.", ) + imagesFile := flag.String( + "images-json", + defaultImagesLocation, + "The location of images file to use by operator for managed CCM binaries.", + ) + flag.Parse() ctrl.SetLogger(klogr.New().WithName("CCMOperator")) @@ -125,6 +134,7 @@ func main() { Client: mgr.GetClient(), Scheme: mgr.GetScheme(), ManagedNamespace: *managedNamespace, + ImagesFile: *imagesFile, }).SetupWithManager(mgr); err != nil { setupLog.Error(err, "unable to create controller", "controller", "ClusterOperator") os.Exit(1) diff --git a/controllers/clusteroperator_controller.go b/controllers/clusteroperator_controller.go index d87431259..c06004b1d 100644 --- a/controllers/clusteroperator_controller.go +++ b/controllers/clusteroperator_controller.go @@ -59,6 +59,7 @@ type CloudOperatorReconciler struct { Scheme *runtime.Scheme watcher ObjectWatcher ManagedNamespace string + ImagesFile string } // +kubebuilder:rbac:groups=config.openshift.io,resources=clusteroperators,verbs=get;list;watch;create;update;patch;delete diff --git a/hack/example-images.json b/hack/example-images.json new file mode 100644 index 000000000..abab9243f --- /dev/null +++ b/hack/example-images.json @@ -0,0 +1,4 @@ +{ + "cloudControllerManagerAWS": "registry.svc.ci.openshift.org/openshift:aws-cloud-controller-manager", + "cloudControllerManagerOpenStack": "registry.svc.ci.openshift.org/openshift:openstack-cloud-controller-manager" +} diff --git a/manifests/0000_26_cloud-controller-manager-operator_01_images.configmap.yaml b/manifests/0000_26_cloud-controller-manager-operator_01_images.configmap.yaml new file mode 100644 index 000000000..43e90fa2c --- /dev/null +++ b/manifests/0000_26_cloud-controller-manager-operator_01_images.configmap.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: cloud-controller-manager-images + namespace: openshift-cloud-controller-manager-operator +data: + images.json: > + { + "cloudControllerManagerAWS": "registry.svc.ci.openshift.org/openshift:aws-cloud-controller-manager", + "cloudControllerManagerOpenStack": "registry.svc.ci.openshift.org/openshift:openstack-cloud-controller-manager" + } diff --git a/manifests/0000_26_cloud-controller-manager-operator_11_deployment.yaml b/manifests/0000_26_cloud-controller-manager-operator_11_deployment.yaml index 7eadebc8d..b61ad5bb5 100644 --- a/manifests/0000_26_cloud-controller-manager-operator_11_deployment.yaml +++ b/manifests/0000_26_cloud-controller-manager-operator_11_deployment.yaml @@ -27,6 +27,7 @@ spec: - "/cluster-controller-manager-operator" args: - --leader-elect + - "--images-json=/etc/cloud-controller-manager-config/images.json" env: - name: RELEASE_VERSION value: "0.0.1-snapshot" @@ -34,6 +35,9 @@ spec: requests: cpu: 10m memory: 50Mi + volumeMounts: + - name: images + mountPath: /etc/cloud-controller-manager-config/ nodeSelector: node-role.kubernetes.io/master: "" restartPolicy: Always @@ -49,3 +53,8 @@ spec: operator: "Exists" effect: "NoExecute" tolerationSeconds: 120 + volumes: + - name: images + configMap: + defaultMode: 420 + name: machine-api-operator-images diff --git a/manifests/image-references b/manifests/image-references index 0a9935da8..b266bffa4 100644 --- a/manifests/image-references +++ b/manifests/image-references @@ -6,3 +6,11 @@ spec: from: kind: DockerImage name: registry.svc.ci.openshift.org/openshift:cluster-cloud-controller-manager-operator + - name: aws-machine-controllers + from: + kind: DockerImage + name: registry.svc.ci.openshift.org/openshift:aws-cloud-controller-manager + - name: openstack-machine-controllers + from: + kind: DockerImage + name: registry.svc.ci.openshift.org/openshift:openstack-cloud-controller-manager