github.com/flavio/docker@v0.1.3-0.20170117145210-f63d1a6eec47/cli/command/volume/create.go (about) 1 package volume 2 3 import ( 4 "fmt" 5 6 volumetypes "github.com/docker/docker/api/types/volume" 7 "github.com/docker/docker/cli" 8 "github.com/docker/docker/cli/command" 9 "github.com/docker/docker/opts" 10 runconfigopts "github.com/docker/docker/runconfig/opts" 11 "github.com/spf13/cobra" 12 "golang.org/x/net/context" 13 ) 14 15 type createOptions struct { 16 name string 17 driver string 18 driverOpts opts.MapOpts 19 labels opts.ListOpts 20 } 21 22 func newCreateCommand(dockerCli *command.DockerCli) *cobra.Command { 23 opts := createOptions{ 24 driverOpts: *opts.NewMapOpts(nil, nil), 25 labels: opts.NewListOpts(opts.ValidateEnv), 26 } 27 28 cmd := &cobra.Command{ 29 Use: "create [OPTIONS] [VOLUME]", 30 Short: "Create a volume", 31 Args: cli.RequiresMaxArgs(1), 32 RunE: func(cmd *cobra.Command, args []string) error { 33 if len(args) == 1 { 34 if opts.name != "" { 35 fmt.Fprint(dockerCli.Err(), "Conflicting options: either specify --name or provide positional arg, not both\n") 36 return cli.StatusError{StatusCode: 1} 37 } 38 opts.name = args[0] 39 } 40 return runCreate(dockerCli, opts) 41 }, 42 } 43 flags := cmd.Flags() 44 flags.StringVarP(&opts.driver, "driver", "d", "local", "Specify volume driver name") 45 flags.StringVar(&opts.name, "name", "", "Specify volume name") 46 flags.Lookup("name").Hidden = true 47 flags.VarP(&opts.driverOpts, "opt", "o", "Set driver specific options") 48 flags.Var(&opts.labels, "label", "Set metadata for a volume") 49 50 return cmd 51 } 52 53 func runCreate(dockerCli *command.DockerCli, opts createOptions) error { 54 client := dockerCli.Client() 55 56 volReq := volumetypes.VolumesCreateBody{ 57 Driver: opts.driver, 58 DriverOpts: opts.driverOpts.GetAll(), 59 Name: opts.name, 60 Labels: runconfigopts.ConvertKVStringsToMap(opts.labels.GetAll()), 61 } 62 63 vol, err := client.VolumeCreate(context.Background(), volReq) 64 if err != nil { 65 return err 66 } 67 68 fmt.Fprintf(dockerCli.Out(), "%s\n", vol.Name) 69 return nil 70 }