func()

in ecs-init/volumes/ecs_volume_plugin.go [252:296]


func (a *AmazonECSVolumePlugin) Remove(r *volume.RemoveRequest) error {
	a.lock.Lock()
	defer a.lock.Unlock()
	seelog.Infof("Removing volume %s", r.Name)
	vol, ok := a.volumes[r.Name]
	if !ok {
		seelog.Errorf("Volume %s to remove is not found", r.Name)
		return fmt.Errorf("volume %s not found", r.Name)
	}

	// get corresponding volume driver to unmount
	volDriver, err := a.getVolumeDriver(vol.Type)
	if err != nil {
		seelog.Errorf("Volume %s removal failure: %s", r.Name, err)
		return err
	}
	if volDriver == nil {
		// this case should not happen normally
		return fmt.Errorf("no corresponding volume driver found for type %s", vol.Type)
	}

	req := &RemoveRequest{
		Name: r.Name,
	}
	err = volDriver.Remove(req)
	if err != nil {
		seelog.Errorf("Volume %s removal failure: %v", r.Name, err)
		return err
	}

	// remove the volume information
	delete(a.volumes, r.Name)
	// cleanup the volume's host mount path
	err = a.CleanupMountPath(vol.Path)
	if err != nil {
		seelog.Errorf("Cleaning mount path failed for volume %s: %v", r.Name, err)
	}
	seelog.Infof("Saving state after removing volume %s", r.Name)
	// remove the state of deleted volume
	err = a.state.removeVolume(r.Name)
	if err != nil {
		seelog.Errorf("Error saving state after removing volume %s: %v", r.Name, err)
	}
	return nil
}