@@ -21,6 +21,10 @@ import (
21
21
22
22
. "github.com/onsi/ginkgo"
23
23
. "github.com/onsi/gomega"
24
+ admissionv1 "k8s.io/api/admissionregistration/v1"
25
+ admissionv1beta1 "k8s.io/api/admissionregistration/v1beta1"
26
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27
+ "k8s.io/apimachinery/pkg/runtime"
24
28
logf "sigs.k8s.io/controller-runtime/pkg/log"
25
29
"sigs.k8s.io/controller-runtime/pkg/log/zap"
26
30
)
@@ -35,12 +39,101 @@ var env *Environment
35
39
var _ = BeforeSuite (func (done Done ) {
36
40
logf .SetLogger (zap .LoggerTo (GinkgoWriter , true ))
37
41
env = & Environment {}
42
+ // we're initializing webhook here and not in webhook.go to also test the envtest install code via WebhookOptions
43
+ initializeWebhookInEnvironment ()
38
44
_ , err := env .Start ()
39
45
Expect (err ).NotTo (HaveOccurred ())
40
46
41
47
close (done )
42
48
}, StartTimeout )
43
49
50
+ func initializeWebhookInEnvironment () {
51
+ namespacedScopeV1Beta1 := admissionv1beta1 .NamespacedScope
52
+ namespacedScopeV1 := admissionv1 .NamespacedScope
53
+ failedTypeV1Beta1 := admissionv1beta1 .Fail
54
+ failedTypeV1 := admissionv1 .Fail
55
+ equivalentTypeV1Beta1 := admissionv1beta1 .Equivalent
56
+ equivalentTypeV1 := admissionv1 .Equivalent
57
+ noSideEffectsV1Beta1 := admissionv1beta1 .SideEffectClassNone
58
+ noSideEffectsV1 := admissionv1 .SideEffectClassNone
59
+ webhookPathV1 := "/failing"
60
+
61
+ env .WebhookInstallOptions = WebhookInstallOptions {
62
+ ValidatingWebhooks : []runtime.Object {
63
+ & admissionv1beta1.ValidatingWebhookConfiguration {
64
+ ObjectMeta : metav1.ObjectMeta {
65
+ Name : "deployment-validation-webhook-config" ,
66
+ },
67
+ TypeMeta : metav1.TypeMeta {
68
+ Kind : "ValidatingWebhookConfiguration" ,
69
+ APIVersion : "admissionregistration.k8s.io/v1beta1" ,
70
+ },
71
+ Webhooks : []admissionv1beta1.ValidatingWebhook {
72
+ {
73
+ Name : "deployment-validation.kubebuilder.io" ,
74
+ Rules : []admissionv1beta1.RuleWithOperations {
75
+ {
76
+ Operations : []admissionv1beta1.OperationType {"CREATE" , "UPDATE" },
77
+ Rule : admissionv1beta1.Rule {
78
+ APIGroups : []string {"apps" },
79
+ APIVersions : []string {"v1" },
80
+ Resources : []string {"deployments" },
81
+ Scope : & namespacedScopeV1Beta1 ,
82
+ },
83
+ },
84
+ },
85
+ FailurePolicy : & failedTypeV1Beta1 ,
86
+ MatchPolicy : & equivalentTypeV1Beta1 ,
87
+ SideEffects : & noSideEffectsV1Beta1 ,
88
+ ClientConfig : admissionv1beta1.WebhookClientConfig {
89
+ Service : & admissionv1beta1.ServiceReference {
90
+ Name : "deployment-validation-service" ,
91
+ Namespace : "default" ,
92
+ Path : & webhookPathV1 ,
93
+ },
94
+ },
95
+ },
96
+ },
97
+ },
98
+ & admissionv1.ValidatingWebhookConfiguration {
99
+ ObjectMeta : metav1.ObjectMeta {
100
+ Name : "deployment-validation-webhook-config" ,
101
+ },
102
+ TypeMeta : metav1.TypeMeta {
103
+ Kind : "ValidatingWebhookConfiguration" ,
104
+ APIVersion : "admissionregistration.k8s.io/v1beta1" ,
105
+ },
106
+ Webhooks : []admissionv1.ValidatingWebhook {
107
+ {
108
+ Name : "deployment-validation.kubebuilder.io" ,
109
+ Rules : []admissionv1.RuleWithOperations {
110
+ {
111
+ Operations : []admissionv1.OperationType {"CREATE" , "UPDATE" },
112
+ Rule : admissionv1.Rule {
113
+ APIGroups : []string {"apps" },
114
+ APIVersions : []string {"v1" },
115
+ Resources : []string {"deployments" },
116
+ Scope : & namespacedScopeV1 ,
117
+ },
118
+ },
119
+ },
120
+ FailurePolicy : & failedTypeV1 ,
121
+ MatchPolicy : & equivalentTypeV1 ,
122
+ SideEffects : & noSideEffectsV1 ,
123
+ ClientConfig : admissionv1.WebhookClientConfig {
124
+ Service : & admissionv1.ServiceReference {
125
+ Name : "deployment-validation-service" ,
126
+ Namespace : "default" ,
127
+ Path : & webhookPathV1 ,
128
+ },
129
+ },
130
+ },
131
+ },
132
+ },
133
+ },
134
+ }
135
+ }
136
+
44
137
var _ = AfterSuite (func (done Done ) {
45
138
Expect (env .Stop ()).NotTo (HaveOccurred ())
46
139
0 commit comments