mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-08-11 19:35:43 +00:00
I am constantly attempting to add the podname to the last argument to podman pod create. Allowing this makes it match podman volume create and podman network create. It does not match podman container create, since podman container create arguments specify the arguments to run with the container. Still need to support the --name option for backwards compatibility. Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
80 lines
2.3 KiB
Go
80 lines
2.3 KiB
Go
package volumes
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/containers/common/pkg/completion"
|
|
"github.com/containers/podman/v4/cmd/podman/parse"
|
|
"github.com/containers/podman/v4/cmd/podman/registry"
|
|
"github.com/containers/podman/v4/pkg/domain/entities"
|
|
"github.com/pkg/errors"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
createDescription = `If using the default driver, "local", the volume will be created on the host in the volumes directory under container storage.`
|
|
|
|
createCommand = &cobra.Command{
|
|
Use: "create [options] [NAME]",
|
|
Args: cobra.MaximumNArgs(1),
|
|
Short: "Create a new volume",
|
|
Long: createDescription,
|
|
RunE: create,
|
|
ValidArgsFunction: completion.AutocompleteNone,
|
|
Example: `podman volume create myvol
|
|
podman volume create
|
|
podman volume create --label foo=bar myvol`,
|
|
}
|
|
)
|
|
|
|
var (
|
|
createOpts = entities.VolumeCreateOptions{}
|
|
opts = struct {
|
|
Label []string
|
|
Opts []string
|
|
}{}
|
|
)
|
|
|
|
func init() {
|
|
registry.Commands = append(registry.Commands, registry.CliCommand{
|
|
Command: createCommand,
|
|
Parent: volumeCmd,
|
|
})
|
|
flags := createCommand.Flags()
|
|
|
|
driverFlagName := "driver"
|
|
flags.StringVar(&createOpts.Driver, driverFlagName, "local", "Specify volume driver name")
|
|
_ = createCommand.RegisterFlagCompletionFunc(driverFlagName, completion.AutocompleteNone)
|
|
|
|
labelFlagName := "label"
|
|
flags.StringSliceVarP(&opts.Label, labelFlagName, "l", []string{}, "Set metadata for a volume (default [])")
|
|
_ = createCommand.RegisterFlagCompletionFunc(labelFlagName, completion.AutocompleteNone)
|
|
|
|
optFlagName := "opt"
|
|
flags.StringArrayVarP(&opts.Opts, optFlagName, "o", []string{}, "Set driver specific options (default [])")
|
|
_ = createCommand.RegisterFlagCompletionFunc(optFlagName, completion.AutocompleteNone)
|
|
}
|
|
|
|
func create(cmd *cobra.Command, args []string) error {
|
|
var (
|
|
err error
|
|
)
|
|
if len(args) > 0 {
|
|
createOpts.Name = args[0]
|
|
}
|
|
createOpts.Label, err = parse.GetAllLabels([]string{}, opts.Label)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "unable to process labels")
|
|
}
|
|
createOpts.Options, err = parse.GetAllLabels([]string{}, opts.Opts)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "unable to process options")
|
|
}
|
|
response, err := registry.ContainerEngine().VolumeCreate(context.Background(), createOpts)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Println(response.IDOrName)
|
|
return nil
|
|
}
|