@@ -21,6 +21,7 @@ import (
21
21
22
22
"github.com/pkg/errors"
23
23
"gopkg.in/alecthomas/kingpin.v2"
24
+ admissionregistration "k8s.io/api/admissionregistration/v1"
24
25
appsV1 "k8s.io/api/apps/v1"
25
26
batchV1 "k8s.io/api/batch/v1"
26
27
apiCoreV1 "k8s.io/api/core/v1"
@@ -180,6 +181,8 @@ func (c *K8s) ResourceApply(deployments []Resource) error {
180
181
err = c .statefulSetApply (resource )
181
182
case "job" :
182
183
err = c .jobApply (resource )
184
+ case "validatingwebhookconfiguration" :
185
+ err = c .validatingWebhookConfigurationApply (resource )
183
186
case "ingressclass" :
184
187
err = c .ingressClassApply (resource )
185
188
default :
@@ -232,6 +235,8 @@ func (c *K8s) ResourceDelete(deployments []Resource) error {
232
235
err = c .statefulSetDelete (resource )
233
236
case "job" :
234
237
err = c .jobDelete (resource )
238
+ case "validatingwebhookconfiguration" :
239
+ err = c .validatingWebhookConfigurationDelete (resource )
235
240
case "ingressclass" :
236
241
err = c .ingressClassDelete (resource )
237
242
default :
@@ -548,6 +553,48 @@ func (c *K8s) jobApply(resource runtime.Object) error {
548
553
func () (bool , error ) { return c .jobReady (resource ) })
549
554
}
550
555
556
+ func (c * K8s ) validatingWebhookConfigurationApply (resource runtime.Object ) error {
557
+ req := resource .(* admissionregistration.ValidatingWebhookConfiguration )
558
+ kind := resource .GetObjectKind ().GroupVersionKind ().Kind
559
+
560
+ switch v := resource .GetObjectKind ().GroupVersionKind ().Version ; v {
561
+ case "v1" :
562
+ client := c .clt .AdmissionregistrationV1 ().ValidatingWebhookConfigurations ()
563
+ list , err := client .List (c .ctx , apiMetaV1.ListOptions {})
564
+ if err != nil {
565
+ return errors .Wrapf (err , "error listing resource : %v, name: %v" , kind , req .Name )
566
+ }
567
+ var exists bool
568
+ for _ , l := range list .Items {
569
+ if req .ResourceVersion == "" {
570
+ req .ResourceVersion = l .ResourceVersion
571
+ }
572
+
573
+ if l .Name == req .Name {
574
+ exists = true
575
+ break
576
+ }
577
+ }
578
+
579
+ if exists {
580
+ if err := retry .RetryOnConflict (retry .DefaultRetry , func () error {
581
+ _ , err := client .Update (c .ctx , req , apiMetaV1.UpdateOptions {})
582
+ return err
583
+ }); err != nil {
584
+ return errors .Wrapf (err , "resource update failed - kind: %v, name: %v" , kind , req .Name )
585
+ }
586
+ log .Printf ("resource updated - kind: %v, name: %v" , kind , req .Name )
587
+ return nil
588
+ } else if _ , err := client .Create (c .ctx , req , apiMetaV1.CreateOptions {}); err != nil {
589
+ return errors .Wrapf (err , "resource creation failed - kind: %v, name: %v" , kind , req .Name )
590
+ }
591
+ log .Printf ("resource created - kind: %v, name: %v" , kind , req .Name )
592
+ default :
593
+ return fmt .Errorf ("unknown object version: %v kind:'%v', name:'%v'" , v , kind , req .Name )
594
+ }
595
+ return nil
596
+ }
597
+
551
598
func (c * K8s ) customResourceApply (resource runtime.Object ) error {
552
599
req := resource .(* apiServerExtensionsV1beta1.CustomResourceDefinition )
553
600
kind := resource .GetObjectKind ().GroupVersionKind ().Kind
@@ -1323,6 +1370,24 @@ func (c *K8s) persistentVolumeClaimDelete(resource runtime.Object) error {
1323
1370
return nil
1324
1371
}
1325
1372
1373
+ func (c * K8s ) validatingWebhookConfigurationDelete (resource runtime.Object ) error {
1374
+ req := resource .(* admissionregistration.ValidatingWebhookConfiguration )
1375
+ kind := resource .GetObjectKind ().GroupVersionKind ().Kind
1376
+
1377
+ switch v := resource .GetObjectKind ().GroupVersionKind ().Version ; v {
1378
+ case "v1" :
1379
+ client := c .clt .AdmissionregistrationV1 ().ValidatingWebhookConfigurations ()
1380
+ delPolicy := apiMetaV1 .DeletePropagationForeground
1381
+ if err := client .Delete (c .ctx , req .Name , apiMetaV1.DeleteOptions {PropagationPolicy : & delPolicy }); err != nil {
1382
+ return errors .Wrapf (err , "resource delete failed - kind: %v, name: %v" , kind , req .Name )
1383
+ }
1384
+ log .Printf ("resource deleted - kind: %v , name: %v" , kind , req .Name )
1385
+ default :
1386
+ return fmt .Errorf ("unknown object version: %v kind:'%v', name:'%v'" , v , kind , req .Name )
1387
+ }
1388
+ return nil
1389
+ }
1390
+
1326
1391
func (c * K8s ) serviceExists (resource runtime.Object ) (bool , error ) {
1327
1392
req := resource .(* apiCoreV1.Service )
1328
1393
kind := resource .GetObjectKind ().GroupVersionKind ().Kind
0 commit comments