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
}