diff options
Diffstat (limited to 'pkg/varlinkapi/volumes.go')
-rw-r--r-- | pkg/varlinkapi/volumes.go | 57 |
1 files changed, 49 insertions, 8 deletions
diff --git a/pkg/varlinkapi/volumes.go b/pkg/varlinkapi/volumes.go index b0c3608c4..aa0eb1fb5 100644 --- a/pkg/varlinkapi/volumes.go +++ b/pkg/varlinkapi/volumes.go @@ -3,15 +3,16 @@ package varlinkapi import ( + "context" "encoding/json" - "github.com/containers/libpod/cmd/podman/shared" "github.com/containers/libpod/libpod" + "github.com/containers/libpod/pkg/domain/infra/abi/parse" iopodman "github.com/containers/libpod/pkg/varlink" ) // VolumeCreate creates a libpod volume based on input from a varlink connection -func (i *LibpodAPI) VolumeCreate(call iopodman.VarlinkCall, options iopodman.VolumeCreateOpts) error { +func (i *VarlinkAPI) VolumeCreate(call iopodman.VarlinkCall, options iopodman.VolumeCreateOpts) error { var volumeOptions []libpod.VolumeCreateOption if len(options.VolumeName) > 0 { @@ -24,7 +25,7 @@ func (i *LibpodAPI) VolumeCreate(call iopodman.VarlinkCall, options iopodman.Vol volumeOptions = append(volumeOptions, libpod.WithVolumeLabels(options.Labels)) } if len(options.Options) > 0 { - parsedOptions, err := shared.ParseVolumeOptions(options.Options) + parsedOptions, err := parse.ParseVolumeOptions(options.Options) if err != nil { return call.ReplyErrorOccurred(err.Error()) } @@ -38,8 +39,8 @@ func (i *LibpodAPI) VolumeCreate(call iopodman.VarlinkCall, options iopodman.Vol } // VolumeRemove removes volumes by options.All or options.Volumes -func (i *LibpodAPI) VolumeRemove(call iopodman.VarlinkCall, options iopodman.VolumeRemoveOpts) error { - success, failed, err := shared.SharedRemoveVolumes(getContext(), i.Runtime, options.Volumes, options.All, options.Force) +func (i *VarlinkAPI) VolumeRemove(call iopodman.VarlinkCall, options iopodman.VolumeRemoveOpts) error { + success, failed, err := SharedRemoveVolumes(getContext(), i.Runtime, options.Volumes, options.All, options.Force) if err != nil { return call.ReplyErrorOccurred(err.Error()) } @@ -52,7 +53,7 @@ func (i *LibpodAPI) VolumeRemove(call iopodman.VarlinkCall, options iopodman.Vol } // GetVolumes returns all the volumes known to the remote system -func (i *LibpodAPI) GetVolumes(call iopodman.VarlinkCall, args []string, all bool) error { +func (i *VarlinkAPI) GetVolumes(call iopodman.VarlinkCall, args []string, all bool) error { var ( err error reply []*libpod.Volume @@ -87,7 +88,7 @@ func (i *LibpodAPI) GetVolumes(call iopodman.VarlinkCall, args []string, all boo } // InspectVolume inspects a single volume, returning its JSON as a string. -func (i *LibpodAPI) InspectVolume(call iopodman.VarlinkCall, name string) error { +func (i *VarlinkAPI) InspectVolume(call iopodman.VarlinkCall, name string) error { vol, err := i.Runtime.LookupVolume(name) if err != nil { return call.ReplyErrorOccurred(err.Error()) @@ -104,7 +105,7 @@ func (i *LibpodAPI) InspectVolume(call iopodman.VarlinkCall, name string) error } // VolumesPrune removes unused images via a varlink call -func (i *LibpodAPI) VolumesPrune(call iopodman.VarlinkCall) error { +func (i *VarlinkAPI) VolumesPrune(call iopodman.VarlinkCall) error { var ( prunedErrors []string prunedNames []string @@ -122,3 +123,43 @@ func (i *LibpodAPI) VolumesPrune(call iopodman.VarlinkCall) error { } return call.ReplyVolumesPrune(prunedNames, prunedErrors) } + +// Remove given set of volumes +func SharedRemoveVolumes(ctx context.Context, runtime *libpod.Runtime, vols []string, all, force bool) ([]string, map[string]error, error) { + var ( + toRemove []*libpod.Volume + success []string + failed map[string]error + ) + + failed = make(map[string]error) + + if all { + vols, err := runtime.Volumes() + if err != nil { + return nil, nil, err + } + toRemove = vols + } else { + for _, v := range vols { + vol, err := runtime.LookupVolume(v) + if err != nil { + failed[v] = err + continue + } + toRemove = append(toRemove, vol) + } + } + + // We could parallelize this, but I haven't heard anyone complain about + // performance here yet, so hold off. + for _, vol := range toRemove { + if err := runtime.RemoveVolume(ctx, vol, force); err != nil { + failed[vol.Name()] = err + continue + } + success = append(success, vol.Name()) + } + + return success, failed, nil +} |