github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/cmd/podman/volume_create.go (about) 1 package main 2 3 import ( 4 "fmt" 5 6 "github.com/containers/libpod/cmd/podman/cliconfig" 7 "github.com/containers/libpod/cmd/podman/shared/parse" 8 "github.com/containers/libpod/pkg/adapter" 9 "github.com/pkg/errors" 10 "github.com/spf13/cobra" 11 ) 12 13 var ( 14 volumeCreateCommand cliconfig.VolumeCreateValues 15 volumeCreateDescription = `If using the default driver, "local", the volume will be created on the host in the volumes directory under container storage.` 16 17 _volumeCreateCommand = &cobra.Command{ 18 Use: "create [flags] [NAME]", 19 Short: "Create a new volume", 20 Long: volumeCreateDescription, 21 RunE: func(cmd *cobra.Command, args []string) error { 22 volumeCreateCommand.InputArgs = args 23 volumeCreateCommand.GlobalFlags = MainGlobalOpts 24 volumeCreateCommand.Remote = remoteclient 25 return volumeCreateCmd(&volumeCreateCommand) 26 }, 27 Example: `podman volume create myvol 28 podman volume create 29 podman volume create --label foo=bar myvol`, 30 } 31 ) 32 33 func init() { 34 volumeCreateCommand.Command = _volumeCreateCommand 35 volumeCommand.SetHelpTemplate(HelpTemplate()) 36 volumeCreateCommand.SetUsageTemplate(UsageTemplate()) 37 flags := volumeCreateCommand.Flags() 38 flags.StringVar(&volumeCreateCommand.Driver, "driver", "", "Specify volume driver name (default local)") 39 flags.StringSliceVarP(&volumeCreateCommand.Label, "label", "l", []string{}, "Set metadata for a volume (default [])") 40 flags.StringArrayVarP(&volumeCreateCommand.Opt, "opt", "o", []string{}, "Set driver specific options (default [])") 41 } 42 43 func volumeCreateCmd(c *cliconfig.VolumeCreateValues) error { 44 runtime, err := adapter.GetRuntime(getContext(), &c.PodmanCommand) 45 if err != nil { 46 return errors.Wrapf(err, "error creating libpod runtime") 47 } 48 defer runtime.DeferredShutdown(false) 49 50 if len(c.InputArgs) > 1 { 51 return errors.Errorf("too many arguments, create takes at most 1 argument") 52 } 53 54 labels, err := parse.GetAllLabels([]string{}, c.Label) 55 if err != nil { 56 return errors.Wrapf(err, "unable to process labels") 57 } 58 59 opts, err := parse.GetAllLabels([]string{}, c.Opt) 60 if err != nil { 61 return errors.Wrapf(err, "unable to process options") 62 } 63 64 volumeName, err := runtime.CreateVolume(getContext(), c, labels, opts) 65 if err == nil { 66 fmt.Println(volumeName) 67 } 68 return err 69 }