func (plugin *rbdPlugin) NewDeleter(spec *volume.Spec) (volume.Deleter, error) { if spec.PersistentVolume != nil && spec.PersistentVolume.Spec.RBD == nil { return nil, fmt.Errorf("spec.PersistentVolumeSource.Spec.RBD is nil") } class, err := volutil.GetClassForVolume(plugin.host.GetKubeClient(), spec.PersistentVolume) if err != nil { return nil, err } adminSecretName := "" adminSecretNamespace := "default" admin := "" for k, v := range class.Parameters { switch dstrings.ToLower(k) { case "adminid": admin = v case "adminsecretname": adminSecretName = v case "adminsecretnamespace": adminSecretNamespace = v } } secret, err := parsePVSecret(adminSecretNamespace, adminSecretName, plugin.host.GetKubeClient()) if err != nil { // log error but don't return yet glog.Errorf("failed to get admin secret from [%q/%q]: %v", adminSecretNamespace, adminSecretName, err) } return plugin.newDeleterInternal(spec, admin, secret, &RBDUtil{}) }
func (d *glusterfsVolumeDeleter) Delete() error { var err error glog.V(2).Infof("glusterfs: delete volume: %s ", d.glusterfsMounter.path) volumeName := d.glusterfsMounter.path volumeId := dstrings.TrimPrefix(volumeName, volPrefix) class, err := volutil.GetClassForVolume(d.plugin.host.GetKubeClient(), d.spec) if err != nil { return err } cfg, err := parseClassParameters(class.Parameters, d.plugin.host.GetKubeClient()) if err != nil { return err } d.provisioningConfig = *cfg glog.V(4).Infof("glusterfs: deleting volume %q with configuration %+v", volumeId, d.provisioningConfig) cli := gcli.NewClient(d.url, d.user, d.secretValue) if cli == nil { glog.Errorf("glusterfs: failed to create glusterfs rest client") return fmt.Errorf("glusterfs: failed to create glusterfs rest client, REST server authentication failed") } err = cli.VolumeDelete(volumeId) if err != nil { glog.Errorf("glusterfs: error when deleting the volume :%v", err) return err } glog.V(2).Infof("glusterfs: volume %s deleted successfully", volumeName) //Deleter takes endpoint and endpointnamespace from pv spec. pvSpec := d.spec.Spec var dynamicEndpoint, dynamicNamespace string if pvSpec.ClaimRef == nil { glog.Errorf("glusterfs: ClaimRef is nil") return fmt.Errorf("glusterfs: ClaimRef is nil") } if pvSpec.ClaimRef.Namespace == "" { glog.Errorf("glusterfs: namespace is nil") return fmt.Errorf("glusterfs: namespace is nil") } dynamicNamespace = pvSpec.ClaimRef.Namespace if pvSpec.Glusterfs.EndpointsName != "" { dynamicEndpoint = pvSpec.Glusterfs.EndpointsName } glog.V(3).Infof("glusterfs: dynamic namespace and endpoint : [%v/%v]", dynamicNamespace, dynamicEndpoint) err = d.deleteEndpointService(dynamicNamespace, dynamicEndpoint) if err != nil { glog.Errorf("glusterfs: error when deleting endpoint/service :%v", err) } else { glog.V(1).Infof("glusterfs: [%v/%v] deleted successfully ", dynamicNamespace, dynamicEndpoint) } return nil }
func (deleter *quobyteVolumeDeleter) Delete() error { class, err := util.GetClassForVolume(deleter.plugin.host.GetKubeClient(), deleter.pv) if err != nil { return err } cfg, err := parseAPIConfig(deleter.plugin, class.Parameters) if err != nil { return err } manager := &quobyteVolumeManager{ config: cfg, } return manager.deleteVolume(deleter) }