func (d *Driver) DeleteVolume(id string, opts map[string]string) error { d.mutex.Lock() defer d.mutex.Unlock() volume := d.blankVolume(id) if err := util.ObjectLoad(volume); err != nil { return err } referenceOnly, _ := strconv.ParseBool(opts[convoydriver.OPT_REFERENCE_ONLY]) if err := d.ebsService.DetachVolume(volume.EBSID); err != nil { if !referenceOnly { return err } //Ignore the error, remove the reference log.Warnf("Unable to detached %v(%v) due to %v, but continue with removing the reference", id, volume.EBSID, err) } else { log.Debugf("Detached %v(%v) from %v", id, volume.EBSID, volume.Device) } if !referenceOnly { if err := d.ebsService.DeleteVolume(volume.EBSID); err != nil { return err } log.Debugf("Deleted %v(%v)", id, volume.EBSID) } return util.ObjectDelete(volume) }
func (d *Driver) DeleteVolume(req Request) error { d.mutex.Lock() defer d.mutex.Unlock() id := req.Name opts := req.Options volume := d.blankVolume(id) if err := util.ObjectLoad(volume); err != nil { return err } if volume.MountPoint != "" { return fmt.Errorf("Cannot delete volume %v. It is still mounted", id) } referenceOnly, _ := strconv.ParseBool(opts[OPT_REFERENCE_ONLY]) if !referenceOnly { log.Debugf("Cleaning up volume %v", id) gVolume := d.gVolumes[d.DefaultVolumePool] if err := util.VolumeMountPointDirectoryRemove(gVolume, volume.Name); err != nil { return err } } return util.ObjectDelete(volume) }
func (d *Driver) DeleteVolume(req Request) error { var err error d.mutex.Lock() defer d.mutex.Unlock() id := req.Name volume := d.blankVolume(id) if err := util.ObjectLoad(volume); err != nil { return err } if volume.MountPoint != "" { return fmt.Errorf("Cannot delete volume %s, it hasn't been umounted", id) } if len(volume.Snapshots) != 0 { for snapshotID := range volume.Snapshots { if err = d.deleteSnapshot(snapshotID, volume.Name); err != nil { return generateError(logrus.Fields{ LOG_FIELD_VOLUME: volume.Name, LOG_FIELD_SNAPSHOT: snapshotID, }, "cannot remove an snapshot of volume, as part of deletion of volume") } } } if err = d.removeDevice(id); err != nil { return err } log.WithFields(logrus.Fields{ LOG_FIELD_REASON: LOG_REASON_START, LOG_FIELD_EVENT: LOG_EVENT_REMOVE, LOG_FIELD_OBJECT: LOG_OBJECT_VOLUME, LOG_FIELD_VOLUME: id, DM_LOG_FIELD_VOLUME_DEVID: volume.DevID, }).Debugf("Deleting device") err = devicemapper.DeleteDevice(d.ThinpoolDevice, volume.DevID) if err != nil { return err } if err := util.ObjectDelete(volume); err != nil { return err } return nil }
func (d *Driver) DeleteVolume(id string, opts map[string]string) error { d.mutex.Lock() defer d.mutex.Unlock() volume := d.blankVolume(id) if err := util.ObjectLoad(volume); err != nil { return err } if volume.MountPoint != "" { return fmt.Errorf("Cannot delete volume %v. It is still mounted", id) } referenceOnly, _ := strconv.ParseBool(opts[convoydriver.OPT_REFERENCE_ONLY]) if !referenceOnly { log.Debugf("Cleaning up %v for volume %v", volume.Path, id) if out, err := util.Execute("rm", []string{"-rf", volume.Path}); err != nil { return fmt.Errorf("Fail to cleanup the volume, output: %v, error: %v", out, err.Error()) } } return util.ObjectDelete(volume) }
func (d *Driver) DeleteVolume(id string, opts map[string]string) error { volume := d.blankVolume(id) if err := util.ObjectLoad(volume); err != nil { return err } if volume.MountPoint != "" { return fmt.Errorf("Cannot delete volume %v. It is still mounted", id) } referenceOnly, _ := strconv.ParseBool(opts[convoydriver.OPT_REFERENCE_ONLY]) if !referenceOnly { log.Debugf("Deleting stack for volume %v", id) if err := volume.Stack(d).Delete(); err != nil { return err } } return util.ObjectDelete(volume) }
func (d *Driver) DeleteVolume(req Request) error { id := req.Name opts := req.Options volume := d.blankVolume(id) if err := util.ObjectLoad(volume); err != nil { return err } if volume.MountPoint != "" { return fmt.Errorf("Cannot delete volume %v. It is still mounted", id) } referenceOnly, _ := strconv.ParseBool(opts[OPT_REFERENCE_ONLY]) if !referenceOnly { log.Debugf("Deleting stack for volume %v", id) if err := volume.Stack(d).Delete(); err != nil { return err } } return util.ObjectDelete(volume) }
func (s *daemon) deleteVolume(volume *Volume) error { volume.configPath = s.Root return util.ObjectDelete(volume) }