From 2cd1a84a463ce2d39d7ca465e0a3051c0904c39d Mon Sep 17 00:00:00 2001 From: awgreene Date: Thu, 21 May 2020 11:03:41 -0400 Subject: [PATCH] WebhookDesc should use containerPort field Problem: The CSV ignores the csv.Spec.WebhookDesc.ContainerPort field when creating the validating / mutating webhook configuration. Solution: Wire the port into the webhook configurations clientConfig. --- .../v1alpha1/clusterserviceversion_test.go | 55 +++++++++++++++++++ .../v1alpha1/clusterserviceversion_types.go | 2 + 2 files changed, 57 insertions(+) diff --git a/pkg/operators/v1alpha1/clusterserviceversion_test.go b/pkg/operators/v1alpha1/clusterserviceversion_test.go index 1a2ea051395..26136c99d97 100644 --- a/pkg/operators/v1alpha1/clusterserviceversion_test.go +++ b/pkg/operators/v1alpha1/clusterserviceversion_test.go @@ -4,6 +4,7 @@ import ( "fmt" "testing" + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/stretchr/testify/assert" @@ -358,6 +359,60 @@ func TestSetPhaseWithConditions(t *testing.T) { } } +func TestWebhookDescGetValidatingConfigurations(t *testing.T) { + expectedPort := int32(444) + timeout := int32(32) + webhookPath := "/test" + failurePolicy := admissionregistrationv1.Fail + matchPolicy := admissionregistrationv1.Exact + sideEffect := admissionregistrationv1.SideEffectClassNone + webhookDesc := WebhookDescription{ + GenerateName: "foo-webhook", + Type: ValidatingAdmissionWebhook, + DeploymentName: "foo-deployment", + ContainerPort: expectedPort, + AdmissionReviewVersions: []string{"v1beta1", "v1"}, + SideEffects: &sideEffect, + MatchPolicy: &matchPolicy, + FailurePolicy: &failurePolicy, + ObjectSelector: &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, + TimeoutSeconds: &timeout, + WebhookPath: &webhookPath, + Rules: []admissionregistrationv1.RuleWithOperations{ + admissionregistrationv1.RuleWithOperations{ + Operations: []admissionregistrationv1.OperationType{}, + Rule: admissionregistrationv1.Rule{ + APIGroups: []string{"*"}, + APIVersions: []string{"*"}, + Resources: []string{"*"}, + }, + }, + }, + } + vWebhookConfig := webhookDesc.GetValidatingWebhook("foo", nil, nil) + require.Equal(t, expectedPort, *vWebhookConfig.ClientConfig.Service.Port) + require.Equal(t, webhookDesc.Rules, vWebhookConfig.Rules) + require.Equal(t, webhookDesc.FailurePolicy, vWebhookConfig.FailurePolicy) + require.Equal(t, webhookDesc.MatchPolicy, vWebhookConfig.MatchPolicy) + require.Equal(t, webhookDesc.ObjectSelector, vWebhookConfig.ObjectSelector) + require.Equal(t, webhookDesc.SideEffects, vWebhookConfig.SideEffects) + require.Equal(t, webhookDesc.TimeoutSeconds, vWebhookConfig.TimeoutSeconds) + require.Equal(t, webhookDesc.AdmissionReviewVersions, vWebhookConfig.AdmissionReviewVersions) + require.Equal(t, webhookDesc.WebhookPath, vWebhookConfig.ClientConfig.Service.Path) + + mWebhookConfig := webhookDesc.GetMutatingWebhook("foo", nil, nil) + require.Equal(t, expectedPort, *mWebhookConfig.ClientConfig.Service.Port) + require.Equal(t, webhookDesc.Rules, mWebhookConfig.Rules) + require.Equal(t, webhookDesc.FailurePolicy, mWebhookConfig.FailurePolicy) + require.Equal(t, webhookDesc.MatchPolicy, mWebhookConfig.MatchPolicy) + require.Equal(t, webhookDesc.ObjectSelector, mWebhookConfig.ObjectSelector) + require.Equal(t, webhookDesc.SideEffects, mWebhookConfig.SideEffects) + require.Equal(t, webhookDesc.TimeoutSeconds, mWebhookConfig.TimeoutSeconds) + require.Equal(t, webhookDesc.AdmissionReviewVersions, mWebhookConfig.AdmissionReviewVersions) + require.Equal(t, webhookDesc.ReinvocationPolicy, mWebhookConfig.ReinvocationPolicy) + require.Equal(t, webhookDesc.WebhookPath, mWebhookConfig.ClientConfig.Service.Path) +} + func helperNewConditions(count int) []ClusterServiceVersionCondition { conditions := make([]ClusterServiceVersionCondition, 0) diff --git a/pkg/operators/v1alpha1/clusterserviceversion_types.go b/pkg/operators/v1alpha1/clusterserviceversion_types.go index 9617f71798e..4127bc91671 100644 --- a/pkg/operators/v1alpha1/clusterserviceversion_types.go +++ b/pkg/operators/v1alpha1/clusterserviceversion_types.go @@ -197,6 +197,7 @@ func (w *WebhookDescription) GetValidatingWebhook(namespace string, namespaceSel Name: w.DomainName() + "-service", Namespace: namespace, Path: w.WebhookPath, + Port: &w.ContainerPort, }, CABundle: caBundle, }, @@ -220,6 +221,7 @@ func (w *WebhookDescription) GetMutatingWebhook(namespace string, namespaceSelec Name: w.DomainName() + "-service", Namespace: namespace, Path: w.WebhookPath, + Port: &w.ContainerPort, }, CABundle: caBundle, },