Skip to content

Commit 71e4eed

Browse files
p0lyn0mialopenshift-cherrypick-robot
authored andcommitted
webhooksupportabilitycontroller: react only to changes to a conversion webhook configuration of a CRD
1 parent 353171f commit 71e4eed

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

pkg/operator/webhooksupportabilitycontroller/degraded_webhook_conversion.go

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ package webhooksupportabilitycontroller
22

33
import (
44
"context"
5-
65
operatorv1 "github.com/openshift/api/operator/v1"
76
"github.com/openshift/library-go/pkg/operator/v1helpers"
7+
8+
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
89
v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
910
"k8s.io/apimachinery/pkg/labels"
1011
)
@@ -21,24 +22,31 @@ func (c *webhookSupportabilityController) updateCRDConversionWebhookConfiguratio
2122
}
2223
var webhookInfos []webhookInfo
2324
for _, crd := range crds {
24-
conversion := crd.Spec.Conversion
25-
if conversion == nil || conversion.Strategy != v1.WebhookConverter {
26-
continue
27-
}
28-
clientConfig := conversion.Webhook.ClientConfig
29-
if clientConfig == nil || clientConfig.Service == nil {
25+
if !hasCRDConversionWebhookConfiguration(crd) {
3026
continue
3127
}
3228
info := webhookInfo{
3329
Name: crd.Name,
34-
CABundle: clientConfig.CABundle,
30+
CABundle: crd.Spec.Conversion.Webhook.ClientConfig.CABundle,
3531
Service: &serviceReference{
36-
Namespace: clientConfig.Service.Namespace,
37-
Name: clientConfig.Service.Name,
38-
Port: clientConfig.Service.Port,
32+
Namespace: crd.Spec.Conversion.Webhook.ClientConfig.Service.Namespace,
33+
Name: crd.Spec.Conversion.Webhook.ClientConfig.Service.Name,
34+
Port: crd.Spec.Conversion.Webhook.ClientConfig.Service.Port,
3935
},
4036
}
4137
webhookInfos = append(webhookInfos, info)
4238
}
4339
return c.updateWebhookConfigurationDegraded(ctx, condition, webhookInfos)
4440
}
41+
42+
func hasCRDConversionWebhookConfiguration(crd *apiextensionsv1.CustomResourceDefinition) bool {
43+
conversion := crd.Spec.Conversion
44+
if conversion == nil || conversion.Strategy != v1.WebhookConverter {
45+
return false
46+
}
47+
clientConfig := conversion.Webhook.ClientConfig
48+
if clientConfig == nil || clientConfig.Service == nil {
49+
return false
50+
}
51+
return true
52+
}

pkg/operator/webhooksupportabilitycontroller/webhook_supportability_controller.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77
"github.com/openshift/library-go/pkg/operator/events"
88
"github.com/openshift/library-go/pkg/operator/management"
99
"github.com/openshift/library-go/pkg/operator/v1helpers"
10+
11+
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
1012
apiextensionsinformers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions"
1113
apiextensionslistersv1 "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1"
1214
admissionregistrationlistersv1 "k8s.io/client-go/listers/admissionregistration/v1"
@@ -43,14 +45,19 @@ func NewWebhookSupportabilityController(
4345
kubeInformersForAllNamespaces.Admissionregistration().V1().MutatingWebhookConfigurations().Informer(),
4446
kubeInformersForAllNamespaces.Admissionregistration().V1().ValidatingWebhookConfigurations().Informer(),
4547
kubeInformersForAllNamespaces.Core().V1().Services().Informer(),
46-
apiExtensionsInformers.Apiextensions().V1().CustomResourceDefinitions().Informer(),
4748
).
49+
WithFilteredEventsInformers(func(obj interface{}) bool {
50+
if crd, ok := obj.(*apiextensionsv1.CustomResourceDefinition); ok {
51+
return hasCRDConversionWebhookConfiguration(crd)
52+
}
53+
return true // re-queue just in case, the checks are fairly cheap
54+
}, apiExtensionsInformers.Apiextensions().V1().CustomResourceDefinitions().Informer()).
4855
WithSync(c.sync).
4956
ToController("webhookSupportabilityController", recorder)
5057
return c
5158
}
5259

53-
func (c *webhookSupportabilityController) sync(ctx context.Context, controllerContext factory.SyncContext) error {
60+
func (c *webhookSupportabilityController) sync(ctx context.Context, _ factory.SyncContext) error {
5461
operatorSpec, _, _, err := c.operatorClient.GetOperatorState()
5562
if err != nil {
5663
return err

0 commit comments

Comments
 (0)