Skip to content

Commit cf77f51

Browse files
authored
Merge pull request #719 from Vandit1604/feat/support-validating-webhook-configurations
Support Validating Webhook Configuration resource in K8s package
2 parents 8c9642f + d6d871f commit cf77f51

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

pkg/provider/k8s/k8s.go

+65
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121

2222
"github.com/pkg/errors"
2323
"gopkg.in/alecthomas/kingpin.v2"
24+
admissionregistration "k8s.io/api/admissionregistration/v1"
2425
appsV1 "k8s.io/api/apps/v1"
2526
batchV1 "k8s.io/api/batch/v1"
2627
apiCoreV1 "k8s.io/api/core/v1"
@@ -180,6 +181,8 @@ func (c *K8s) ResourceApply(deployments []Resource) error {
180181
err = c.statefulSetApply(resource)
181182
case "job":
182183
err = c.jobApply(resource)
184+
case "validatingwebhookconfiguration":
185+
err = c.validatingWebhookConfigurationApply(resource)
183186
case "ingressclass":
184187
err = c.ingressClassApply(resource)
185188
default:
@@ -232,6 +235,8 @@ func (c *K8s) ResourceDelete(deployments []Resource) error {
232235
err = c.statefulSetDelete(resource)
233236
case "job":
234237
err = c.jobDelete(resource)
238+
case "validatingwebhookconfiguration":
239+
err = c.validatingWebhookConfigurationDelete(resource)
235240
case "ingressclass":
236241
err = c.ingressClassDelete(resource)
237242
default:
@@ -548,6 +553,48 @@ func (c *K8s) jobApply(resource runtime.Object) error {
548553
func() (bool, error) { return c.jobReady(resource) })
549554
}
550555

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+
551598
func (c *K8s) customResourceApply(resource runtime.Object) error {
552599
req := resource.(*apiServerExtensionsV1beta1.CustomResourceDefinition)
553600
kind := resource.GetObjectKind().GroupVersionKind().Kind
@@ -1323,6 +1370,24 @@ func (c *K8s) persistentVolumeClaimDelete(resource runtime.Object) error {
13231370
return nil
13241371
}
13251372

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+
13261391
func (c *K8s) serviceExists(resource runtime.Object) (bool, error) {
13271392
req := resource.(*apiCoreV1.Service)
13281393
kind := resource.GetObjectKind().GroupVersionKind().Kind

0 commit comments

Comments
 (0)