@@ -9,8 +9,10 @@ import (
9
9
apiequality "k8s.io/apimachinery/pkg/api/equality"
10
10
apierrors "k8s.io/apimachinery/pkg/api/errors"
11
11
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12
+ "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
12
13
utilerrors "k8s.io/apimachinery/pkg/util/errors"
13
14
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
15
+ "k8s.io/client-go/dynamic"
14
16
"k8s.io/client-go/informers"
15
17
appsclientv1 "k8s.io/client-go/kubernetes/typed/apps/v1"
16
18
coreclientv1 "k8s.io/client-go/kubernetes/typed/core/v1"
@@ -29,7 +31,8 @@ import (
29
31
const targetNamespaceName = "openshift-service-cert-signer"
30
32
31
33
type serviceCertSignerOperator struct {
32
- operatorConfigClient scsclientv1alpha1.ServiceCertSignerOperatorConfigsGetter
34
+ operatorConfigClient scsclientv1alpha1.ServiceCertSignerOperatorConfigsGetter
35
+ serviceCAOperatorConfigClient dynamic.ResourceInterface
33
36
34
37
appsv1Client appsclientv1.AppsV1Interface
35
38
corev1Client coreclientv1.CoreV1Interface
@@ -40,12 +43,14 @@ func NewServiceCertSignerOperator(
40
43
serviceCertSignerConfigInformer scsinformerv1alpha1.ServiceCertSignerOperatorConfigInformer ,
41
44
namespacedKubeInformers informers.SharedInformerFactory ,
42
45
operatorConfigClient scsclientv1alpha1.ServiceCertSignerOperatorConfigsGetter ,
46
+ serviceCAOperatorConfigClient dynamic.ResourceInterface ,
43
47
appsv1Client appsclientv1.AppsV1Interface ,
44
48
corev1Client coreclientv1.CoreV1Interface ,
45
49
rbacv1Client rbacclientv1.RbacV1Interface ,
46
50
) operator.Runner {
47
51
c := & serviceCertSignerOperator {
48
- operatorConfigClient : operatorConfigClient ,
52
+ operatorConfigClient : operatorConfigClient ,
53
+ serviceCAOperatorConfigClient : serviceCAOperatorConfigClient ,
49
54
50
55
appsv1Client : appsv1Client ,
51
56
corev1Client : corev1Client ,
@@ -115,6 +120,11 @@ func (c serviceCertSignerOperator) Sync(obj metav1.Object) error {
115
120
return nil
116
121
}
117
122
123
+ // don't do anything if ServiceCA operator is running, it's the superior operator
124
+ if isServiceCARunning (c .serviceCAOperatorConfigClient ) {
125
+ return nil
126
+ }
127
+
118
128
operatorConfigOriginal := operatorConfig .DeepCopy ()
119
129
120
130
var currentActualVerion * semver.Version
@@ -194,3 +204,18 @@ func (c serviceCertSignerOperator) Sync(obj metav1.Object) error {
194
204
195
205
return utilerrors .NewAggregate (errors )
196
206
}
207
+
208
+ func isServiceCARunning (serviceCAConfigClient dynamic.ResourceInterface ) bool {
209
+ serviceCAConfig , err := serviceCAConfigClient .Get ("cluster" , metav1.GetOptions {})
210
+ if err != nil {
211
+ return false
212
+ }
213
+
214
+ // discard errors parsing the obtained status
215
+ servicaCAStatus , found , err := unstructured .NestedString (serviceCAConfig .Object , "spec" , "managementState" )
216
+ if err == nil && found && servicaCAStatus == string (operatorsv1alpha1 .Managed ) {
217
+ return true
218
+ }
219
+
220
+ return false
221
+ }
0 commit comments