github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/pkg/domain/infra/tunnel/volumes.go (about) 1 package tunnel 2 3 import ( 4 "context" 5 6 "github.com/containers/podman/v2/pkg/bindings/volumes" 7 "github.com/containers/podman/v2/pkg/domain/entities" 8 "github.com/pkg/errors" 9 ) 10 11 func (ic *ContainerEngine) VolumeCreate(ctx context.Context, opts entities.VolumeCreateOptions) (*entities.IDOrNameResponse, error) { 12 response, err := volumes.Create(ic.ClientCxt, opts) 13 if err != nil { 14 return nil, err 15 } 16 return &entities.IDOrNameResponse{IDOrName: response.Name}, nil 17 } 18 19 func (ic *ContainerEngine) VolumeRm(ctx context.Context, namesOrIds []string, opts entities.VolumeRmOptions) ([]*entities.VolumeRmReport, error) { 20 if opts.All { 21 vols, err := volumes.List(ic.ClientCxt, nil) 22 if err != nil { 23 return nil, err 24 } 25 for _, v := range vols { 26 namesOrIds = append(namesOrIds, v.Name) 27 } 28 } 29 reports := make([]*entities.VolumeRmReport, 0, len(namesOrIds)) 30 for _, id := range namesOrIds { 31 reports = append(reports, &entities.VolumeRmReport{ 32 Err: volumes.Remove(ic.ClientCxt, id, &opts.Force), 33 Id: id, 34 }) 35 } 36 return reports, nil 37 } 38 39 func (ic *ContainerEngine) VolumeInspect(ctx context.Context, namesOrIds []string, opts entities.InspectOptions) ([]*entities.VolumeInspectReport, []error, error) { 40 var ( 41 reports = make([]*entities.VolumeInspectReport, 0, len(namesOrIds)) 42 errs = []error{} 43 ) 44 if opts.All { 45 vols, err := volumes.List(ic.ClientCxt, nil) 46 if err != nil { 47 return nil, nil, err 48 } 49 for _, v := range vols { 50 namesOrIds = append(namesOrIds, v.Name) 51 } 52 } 53 for _, id := range namesOrIds { 54 data, err := volumes.Inspect(ic.ClientCxt, id) 55 if err != nil { 56 errModel, ok := err.(entities.ErrorModel) 57 if !ok { 58 return nil, nil, err 59 } 60 if errModel.ResponseCode == 404 { 61 errs = append(errs, errors.Errorf("no such volume %q", id)) 62 continue 63 } 64 return nil, nil, err 65 } 66 reports = append(reports, &entities.VolumeInspectReport{VolumeConfigResponse: data}) 67 } 68 return reports, errs, nil 69 } 70 71 func (ic *ContainerEngine) VolumePrune(ctx context.Context) ([]*entities.VolumePruneReport, error) { 72 return volumes.Prune(ic.ClientCxt) 73 } 74 75 func (ic *ContainerEngine) VolumeList(ctx context.Context, opts entities.VolumeListOptions) ([]*entities.VolumeListReport, error) { 76 return volumes.List(ic.ClientCxt, opts.Filter) 77 }