func parseFilter(store types.Store) (*types.Filter, error) { if !store.IsSet("filter") { return nil, nil } fsz := store.GetString("filter") filter, err := filters.CompileFilter(fsz) if err != nil { return nil, utils.NewBadFilterErr(fsz, err) } return filter, nil }
// Handle is the type's Handler function. func (h *serviceValidator) Handle( ctx types.Context, w http.ResponseWriter, req *http.Request, store types.Store) error { if !store.IsSet("service") { return utils.NewStoreKeyErr("service") } serviceName := store.GetString("service") service := services.GetStorageService(ctx, serviceName) if service == nil { return utils.NewNotFoundError(serviceName) } ctx = context.WithStorageService(ctx, service) return h.handler(ctx, w, req, store) }
func (r *router) volumeInspect( ctx types.Context, w http.ResponseWriter, req *http.Request, store types.Store) error { attachments := store.GetAttachments() service := context.MustService(ctx) iid, iidOK := context.InstanceID(ctx) if !iidOK && attachments.RequiresInstanceID() { return utils.NewMissingInstanceIDError(service.Name()) } opts := &types.VolumeInspectOpts{ Attachments: attachments, Opts: store, } var run types.StorageTaskRunFunc if store.IsSet("byName") { run = func( ctx types.Context, svc types.StorageService) (interface{}, error) { vols, err := svc.Driver().Volumes( ctx, &types.VolumesOpts{ Attachments: attachments, Opts: store, }) if err != nil { return nil, err } volID := store.GetString("volumeID") for _, v := range vols { if strings.EqualFold(v.Name, volID) { if !handleVolAttachments(ctx, nil, iid, v, attachments) { return nil, utils.NewNotFoundError(volID) } if OnVolume != nil { ok, err := OnVolume(ctx, req, store, v) if err != nil { return nil, err } if !ok { return nil, utils.NewNotFoundError(volID) } } return v, nil } } return nil, utils.NewNotFoundError(volID) } } else { run = func( ctx types.Context, svc types.StorageService) (interface{}, error) { v, err := svc.Driver().VolumeInspect( ctx, store.GetString("volumeID"), opts) if err != nil { return nil, err } if !handleVolAttachments(ctx, nil, iid, v, attachments) { return nil, utils.NewNotFoundError(v.ID) } if OnVolume != nil { ok, err := OnVolume(ctx, req, store, v) if err != nil { return nil, err } if !ok { return nil, utils.NewNotFoundError(v.ID) } } return v, nil } } return httputils.WriteTask( ctx, r.config, w, store, service.TaskExecute(ctx, run, schema.VolumeSchema), http.StatusOK) }