Skip to content
This repository was archived by the owner on Mar 26, 2019. It is now read-only.

Commit 3092421

Browse files
Merge pull request #65 from stlaz/serviceca_hack
operator: don't do anything if service-ca-operator is running
2 parents 84f0c33 + c658ab6 commit 3092421

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

pkg/operator/operator.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ import (
99
apiequality "k8s.io/apimachinery/pkg/api/equality"
1010
apierrors "k8s.io/apimachinery/pkg/api/errors"
1111
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12+
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
1213
utilerrors "k8s.io/apimachinery/pkg/util/errors"
1314
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
15+
"k8s.io/client-go/dynamic"
1416
"k8s.io/client-go/informers"
1517
appsclientv1 "k8s.io/client-go/kubernetes/typed/apps/v1"
1618
coreclientv1 "k8s.io/client-go/kubernetes/typed/core/v1"
@@ -29,7 +31,8 @@ import (
2931
const targetNamespaceName = "openshift-service-cert-signer"
3032

3133
type serviceCertSignerOperator struct {
32-
operatorConfigClient scsclientv1alpha1.ServiceCertSignerOperatorConfigsGetter
34+
operatorConfigClient scsclientv1alpha1.ServiceCertSignerOperatorConfigsGetter
35+
serviceCAOperatorConfigClient dynamic.ResourceInterface
3336

3437
appsv1Client appsclientv1.AppsV1Interface
3538
corev1Client coreclientv1.CoreV1Interface
@@ -40,12 +43,14 @@ func NewServiceCertSignerOperator(
4043
serviceCertSignerConfigInformer scsinformerv1alpha1.ServiceCertSignerOperatorConfigInformer,
4144
namespacedKubeInformers informers.SharedInformerFactory,
4245
operatorConfigClient scsclientv1alpha1.ServiceCertSignerOperatorConfigsGetter,
46+
serviceCAOperatorConfigClient dynamic.ResourceInterface,
4347
appsv1Client appsclientv1.AppsV1Interface,
4448
corev1Client coreclientv1.CoreV1Interface,
4549
rbacv1Client rbacclientv1.RbacV1Interface,
4650
) operator.Runner {
4751
c := &serviceCertSignerOperator{
48-
operatorConfigClient: operatorConfigClient,
52+
operatorConfigClient: operatorConfigClient,
53+
serviceCAOperatorConfigClient: serviceCAOperatorConfigClient,
4954

5055
appsv1Client: appsv1Client,
5156
corev1Client: corev1Client,
@@ -115,6 +120,11 @@ func (c serviceCertSignerOperator) Sync(obj metav1.Object) error {
115120
return nil
116121
}
117122

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+
118128
operatorConfigOriginal := operatorConfig.DeepCopy()
119129

120130
var currentActualVerion *semver.Version
@@ -194,3 +204,18 @@ func (c serviceCertSignerOperator) Sync(obj metav1.Object) error {
194204

195205
return utilerrors.NewAggregate(errors)
196206
}
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+
}

pkg/operator/starter.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"time"
66

7+
"k8s.io/apimachinery/pkg/runtime/schema"
78
"k8s.io/client-go/dynamic"
89
"k8s.io/client-go/informers"
910
"k8s.io/client-go/kubernetes"
@@ -16,6 +17,12 @@ import (
1617
"github.com/openshift/library-go/pkg/operator/status"
1718
)
1819

20+
var serviceCAResource = schema.GroupVersionResource{
21+
Group: "operator.openshift.io",
22+
Version: "v1",
23+
Resource: "servicecas",
24+
}
25+
1926
func RunOperator(clientConfig *rest.Config, stopCh <-chan struct{}) error {
2027
kubeClient, err := kubernetes.NewForConfig(clientConfig)
2128
if err != nil {
@@ -29,6 +36,7 @@ func RunOperator(clientConfig *rest.Config, stopCh <-chan struct{}) error {
2936
if err != nil {
3037
return err
3138
}
39+
serviceCAConfigClient := dynamicClient.Resource(serviceCAResource)
3240

3341
operatorInformers := scsinformers.NewSharedInformerFactory(scsClient, 10*time.Minute)
3442
kubeInformersNamespaced := informers.NewFilteredSharedInformerFactory(kubeClient, 10*time.Minute, targetNamespaceName, nil)
@@ -44,6 +52,7 @@ func RunOperator(clientConfig *rest.Config, stopCh <-chan struct{}) error {
4452
operatorInformers.Servicecertsigner().V1alpha1().ServiceCertSignerOperatorConfigs(),
4553
kubeInformersNamespaced,
4654
scsClient.ServicecertsignerV1alpha1(),
55+
serviceCAConfigClient,
4756
kubeClient.AppsV1(),
4857
kubeClient.CoreV1(),
4958
kubeClient.RbacV1(),

0 commit comments

Comments
 (0)