in pkg/provider/k8s/k8s.go [893:932]
func (c *K8s) persistentVolumeClaimApply(resource runtime.Object) error {
req := resource.(*apiCoreV1.PersistentVolumeClaim)
kind := req.GetObjectKind().GroupVersionKind().Kind
if len(req.Namespace) == 0 {
req.Namespace = "default"
}
switch v := resource.GetObjectKind().GroupVersionKind().Version; v {
case "v1":
client := c.clt.CoreV1().PersistentVolumeClaims(req.Namespace)
list, err := client.List(c.ctx, apiMetaV1.ListOptions{})
if err != nil {
return errors.Wrapf(err, "error listing resource : %v, name: %v", kind, req.Name)
}
var exists bool
for _, l := range list.Items {
if l.Name == req.Name {
exists = true
break
}
}
if exists {
if err := retry.RetryOnConflict(retry.DefaultRetry, func() error {
_, err := client.Update(c.ctx, req, apiMetaV1.UpdateOptions{})
return err
}); err != nil {
return errors.Wrapf(err, "resource update failed - kind: %v, name: %v", kind, req.Name)
}
log.Printf("resource updated - kind: %v, name: %v", kind, req.Name)
return nil
} else if _, err := client.Create(c.ctx, req, apiMetaV1.CreateOptions{}); err != nil {
return errors.Wrapf(err, "resource creation failed - kind: %v, name: %v", kind, req.Name)
}
log.Printf("resource created - kind: %v, name: %v", kind, req.Name)
default:
return fmt.Errorf("unknown object version: %v kind:'%v', name:'%v'", v, kind, req.Name)
}
return nil
}