From e084bc587a91d0fa06f844713c8e1cbcb1435816 Mon Sep 17 00:00:00 2001 From: Felix Kunde <felix-kunde@gmx.de> Date: Tue, 7 May 2019 16:33:33 +0200 Subject: [PATCH] patch existing CRD each time there is an operator update --- manifests/operator-service-account-rbac.yaml | 1 + pkg/controller/util.go | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/manifests/operator-service-account-rbac.yaml b/manifests/operator-service-account-rbac.yaml index 4fd4676c..f87c8d8c 100644 --- a/manifests/operator-service-account-rbac.yaml +++ b/manifests/operator-service-account-rbac.yaml @@ -25,6 +25,7 @@ rules: verbs: - create - get + - patch - apiGroups: - "" resources: diff --git a/pkg/controller/util.go b/pkg/controller/util.go index 57633ae8..f9fc4468 100644 --- a/pkg/controller/util.go +++ b/pkg/controller/util.go @@ -1,11 +1,13 @@ package controller import ( + "encoding/json" "fmt" "k8s.io/api/core/v1" apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" @@ -52,7 +54,15 @@ func (c *Controller) createOperatorCRD(crd *apiextv1beta1.CustomResourceDefiniti if !k8sutil.ResourceAlreadyExists(err) { return fmt.Errorf("could not create customResourceDefinition: %v", err) } - c.logger.Infof("customResourceDefinition %q is already registered", crd.Name) + c.logger.Infof("customResourceDefinition %q is already registered and will only be updated", crd.Name) + + patch, err := json.Marshal(crd) + if err != nil { + return fmt.Errorf("could not marshal new customResourceDefintion: %v", err) + } + if _, err := c.KubeClient.CustomResourceDefinitions().Patch(crd.Name, types.MergePatchType, patch); err != nil { + return fmt.Errorf("could not update customResourceDefinition: %v", err) + } } else { c.logger.Infof("customResourceDefinition %q has been registered", crd.Name) } -- GitLab