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