44 "fmt"
55
66 corev1 "k8s.io/api/core/v1"
7- "k8s.io/apimachinery /pkg/types "
7+ "sigs. k8s.io/controller-runtime /pkg/client "
88
99 "github.com/openshift/cert-manager-operator/api/operator/v1alpha1"
1010 "github.com/openshift/cert-manager-operator/pkg/operator/assets"
@@ -16,42 +16,48 @@ const (
1616)
1717
1818func (r * Reconciler ) createOrApplyServices (istiocsr * v1alpha1.IstioCSR , resourceLabels map [string ]string , istioCSRCreateRecon bool ) error {
19- desired := r .getServiceObject (istiocsr , resourceLabels )
19+ service := r .getServiceObject (istiocsr , resourceLabels )
20+ if err := r .createOrApplyService (istiocsr , service , istioCSRCreateRecon ); err != nil {
21+ return err
22+ }
23+ if err := r .updateGRPCEndpointInStatus (istiocsr , service ); err != nil {
24+ return FromClientError (err , "failed to update %s/%s istiocsr status with %s service endpoint info" , istiocsr .GetNamespace (), istiocsr .GetName (), service .GetName ())
25+ }
2026
21- serviceName := fmt .Sprintf ("%s/%s" , desired .GetNamespace (), desired .GetName ())
27+ metricsService := r .getMetricsServiceObject (istiocsr , resourceLabels )
28+ if err := r .createOrApplyService (istiocsr , metricsService , istioCSRCreateRecon ); err != nil {
29+ return err
30+ }
31+ return nil
32+ }
33+
34+ func (r * Reconciler ) createOrApplyService (istiocsr * v1alpha1.IstioCSR , svc * corev1.Service , istioCSRCreateRecon bool ) error {
35+ serviceName := fmt .Sprintf ("%s/%s" , svc .GetNamespace (), svc .GetName ())
2236 r .log .V (4 ).Info ("reconciling service resource" , "name" , serviceName )
2337 fetched := & corev1.Service {}
24- key := types.NamespacedName {
25- Name : desired .GetName (),
26- Namespace : desired .GetNamespace (),
27- }
28- exist , err := r .Exists (r .ctx , key , fetched )
38+ exist , err := r .Exists (r .ctx , client .ObjectKeyFromObject (svc ), fetched )
2939 if err != nil {
3040 return FromClientError (err , "failed to check %s service resource already exists" , serviceName )
3141 }
3242
3343 if exist && istioCSRCreateRecon {
3444 r .eventRecorder .Eventf (istiocsr , corev1 .EventTypeWarning , "ResourceAlreadyExists" , "%s service resource already exists, maybe from previous installation" , serviceName )
3545 }
36- if exist && hasObjectChanged (desired , fetched ) {
46+ if exist && hasObjectChanged (svc , fetched ) {
3747 r .log .V (1 ).Info ("service has been modified, updating to desired state" , "name" , serviceName )
38- if err := r .UpdateWithRetry (r .ctx , desired ); err != nil {
48+ if err := r .UpdateWithRetry (r .ctx , svc ); err != nil {
3949 return FromClientError (err , "failed to update %s service resource" , serviceName )
4050 }
4151 r .eventRecorder .Eventf (istiocsr , corev1 .EventTypeNormal , "Reconciled" , "service resource %s reconciled back to desired state" , serviceName )
4252 } else {
4353 r .log .V (4 ).Info ("service resource already exists and is in expected state" , "name" , serviceName )
4454 }
4555 if ! exist {
46- if err := r .Create (r .ctx , desired ); err != nil {
56+ if err := r .Create (r .ctx , svc ); err != nil {
4757 return FromClientError (err , "failed to create %s service resource" , serviceName )
4858 }
4959 r .eventRecorder .Eventf (istiocsr , corev1 .EventTypeNormal , "Reconciled" , "service resource %s created" , serviceName )
5060 }
51-
52- if err := r .updateGRPCEndpointInStatus (istiocsr , desired ); err != nil {
53- return FromClientError (err , "failed to update %s/%s istiocsr status with %s service endpoint info" , istiocsr .GetNamespace (), istiocsr .GetName (), serviceName )
54- }
5561 return nil
5662}
5763
@@ -65,6 +71,13 @@ func (r *Reconciler) getServiceObject(istiocsr *v1alpha1.IstioCSR, resourceLabel
6571 return service
6672}
6773
74+ func (r * Reconciler ) getMetricsServiceObject (istiocsr * v1alpha1.IstioCSR , resourceLabels map [string ]string ) * corev1.Service {
75+ service := decodeServiceObjBytes (assets .MustAsset (metricsServiceAssetName ))
76+ updateNamespace (service , istiocsr .GetNamespace ())
77+ updateResourceLabels (service , resourceLabels )
78+ return service
79+ }
80+
6881func updateServicePort (service * corev1.Service , port int32 ) {
6982 for i , servicePort := range service .Spec .Ports {
7083 if servicePort .Name == grpcServicePortName && port != 0 {
0 commit comments