98 lines
2.2 KiB
Go
98 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/containers/libpod/cmd/podman/libpodruntime"
|
|
"github.com/containers/libpod/libpod"
|
|
"github.com/pkg/errors"
|
|
"github.com/urfave/cli"
|
|
)
|
|
|
|
var volumeCreateDescription = `
|
|
podman volume create
|
|
|
|
Creates a new volume. If using the default driver, "local", the volume will
|
|
be created at.`
|
|
|
|
var volumeCreateFlags = []cli.Flag{
|
|
cli.StringFlag{
|
|
Name: "driver",
|
|
Usage: "Specify volume driver name (default local)",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "label, l",
|
|
Usage: "Set metadata for a volume (default [])",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "opt, o",
|
|
Usage: "Set driver specific options (default [])",
|
|
},
|
|
}
|
|
|
|
var volumeCreateCommand = cli.Command{
|
|
Name: "create",
|
|
Usage: "Create a new volume",
|
|
Description: volumeCreateDescription,
|
|
Flags: volumeCreateFlags,
|
|
Action: volumeCreateCmd,
|
|
SkipArgReorder: true,
|
|
ArgsUsage: "[VOLUME-NAME]",
|
|
UseShortOptionHandling: true,
|
|
}
|
|
|
|
func volumeCreateCmd(c *cli.Context) error {
|
|
var (
|
|
options []libpod.VolumeCreateOption
|
|
err error
|
|
volName string
|
|
)
|
|
|
|
if err = validateFlags(c, volumeCreateFlags); err != nil {
|
|
return err
|
|
}
|
|
|
|
runtime, err := libpodruntime.GetRuntime(c)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "error creating libpod runtime")
|
|
}
|
|
defer runtime.Shutdown(false)
|
|
|
|
if len(c.Args()) > 1 {
|
|
return errors.Errorf("too many arguments, create takes at most 1 argument")
|
|
}
|
|
|
|
if len(c.Args()) > 0 {
|
|
volName = c.Args()[0]
|
|
options = append(options, libpod.WithVolumeName(volName))
|
|
}
|
|
|
|
if c.IsSet("driver") {
|
|
options = append(options, libpod.WithVolumeDriver(c.String("driver")))
|
|
}
|
|
|
|
labels, err := getAllLabels([]string{}, c.StringSlice("label"))
|
|
if err != nil {
|
|
return errors.Wrapf(err, "unable to process labels")
|
|
}
|
|
if len(labels) != 0 {
|
|
options = append(options, libpod.WithVolumeLabels(labels))
|
|
}
|
|
|
|
opts, err := getAllLabels([]string{}, c.StringSlice("opt"))
|
|
if err != nil {
|
|
return errors.Wrapf(err, "unable to process options")
|
|
}
|
|
if len(options) != 0 {
|
|
options = append(options, libpod.WithVolumeOptions(opts))
|
|
}
|
|
|
|
vol, err := runtime.NewVolume(getContext(), options...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Printf("%s\n", vol.Name())
|
|
|
|
return nil
|
|
}
|