diff options
author | baude <bbaude@redhat.com> | 2019-02-10 19:34:36 -0600 |
---|---|---|
committer | baude <bbaude@redhat.com> | 2019-02-11 20:14:50 -0600 |
commit | 3101364a3cf00a2b2562bc2510262c3ee992bbab (patch) | |
tree | b4515ae1d155cbdca401f1f7be56cbb62476ec6d /libpod | |
parent | ea20ead35b69b1259f2ff3b00f558c473a921b95 (diff) | |
download | podman-3101364a3cf00a2b2562bc2510262c3ee992bbab.tar.gz podman-3101364a3cf00a2b2562bc2510262c3ee992bbab.tar.bz2 podman-3101364a3cf00a2b2562bc2510262c3ee992bbab.zip |
podman-remote volume rm
add the ability to remove/delete volumes with the podman remote
client.
Signed-off-by: baude <bbaude@redhat.com>
Diffstat (limited to 'libpod')
-rw-r--r-- | libpod/adapter/runtime.go | 5 | ||||
-rw-r--r-- | libpod/adapter/runtime_remote.go | 10 | ||||
-rw-r--r-- | libpod/runtime_volume.go | 51 |
3 files changed, 65 insertions, 1 deletions
diff --git a/libpod/adapter/runtime.go b/libpod/adapter/runtime.go index 050ea6ed4..2b1ddb09d 100644 --- a/libpod/adapter/runtime.go +++ b/libpod/adapter/runtime.go @@ -185,3 +185,8 @@ func (r *LocalRuntime) CreateVolume(ctx context.Context, c *cliconfig.VolumeCrea } return newVolume.Name(), nil } + +// RemoveVolumes is a wrapper to remove volumes +func (r *LocalRuntime) RemoveVolumes(ctx context.Context, c *cliconfig.VolumeRmValues) ([]string, error) { + return r.Runtime.RemoveVolumes(ctx, c.InputArgs, c.All, c.Force) +} diff --git a/libpod/adapter/runtime_remote.go b/libpod/adapter/runtime_remote.go index 3df8afc6e..4dfae34e1 100644 --- a/libpod/adapter/runtime_remote.go +++ b/libpod/adapter/runtime_remote.go @@ -449,3 +449,13 @@ func (r *LocalRuntime) CreateVolume(ctx context.Context, c *cliconfig.VolumeCrea return iopodman.VolumeCreate().Call(r.Conn, cvOpts) } + +// RemoveVolumes removes volumes over a varlink connection for the remote client +func (r *LocalRuntime) RemoveVolumes(ctx context.Context, c *cliconfig.VolumeRmValues) ([]string, error) { + rmOpts := iopodman.VolumeRemoveOpts{ + All: c.All, + Force: c.Force, + Volumes: c.InputArgs, + } + return iopodman.VolumeRemove().Call(r.Conn, rmOpts) +} diff --git a/libpod/runtime_volume.go b/libpod/runtime_volume.go index 3921758ee..485f64bf1 100644 --- a/libpod/runtime_volume.go +++ b/libpod/runtime_volume.go @@ -2,6 +2,9 @@ package libpod import ( "context" + "github.com/pkg/errors" + "github.com/sirupsen/logrus" + "strings" ) // Contains the public Runtime API for volumes @@ -38,6 +41,38 @@ func (r *Runtime) RemoveVolume(ctx context.Context, v *Volume, force, prune bool return r.removeVolume(ctx, v, force, prune) } +// RemoveVolumes removes a slice of volumes or all with a force bool +func (r *Runtime) RemoveVolumes(ctx context.Context, volumes []string, all, force bool) ([]string, error) { + var ( + vols []*Volume + err error + deletedVols []string + ) + if all { + vols, err = r.Volumes() + if err != nil { + return nil, errors.Wrapf(err, "unable to get all volumes") + } + } else { + for _, i := range volumes { + vol, err := r.GetVolume(i) + if err != nil { + return nil, err + } + vols = append(vols, vol) + } + } + + for _, vol := range vols { + if err := r.RemoveVolume(ctx, vol, force, false); err != nil { + return deletedVols, err + } + logrus.Debugf("removed volume %s", vol.Name()) + deletedVols = append(deletedVols, vol.Name()) + } + return deletedVols, nil +} + // GetVolume retrieves a volume by its name func (r *Runtime) GetVolume(name string) (*Volume, error) { r.lock.RLock() @@ -47,7 +82,21 @@ func (r *Runtime) GetVolume(name string) (*Volume, error) { return nil, ErrRuntimeStopped } - return r.state.Volume(name) + vol, err := r.state.Volume(name) + if err == nil { + return vol, err + } + + vols, err := r.GetAllVolumes() + if err != nil { + return nil, err + } + for _, v := range vols { + if strings.HasPrefix(v.Name(), name) { + return v, nil + } + } + return nil, errors.Errorf("unable to find volume %s", name) } // HasVolume checks to see if a volume with the given name exists |