summaryrefslogtreecommitdiff
path: root/cmd/podmanV2
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/podmanV2')
-rw-r--r--cmd/podmanV2/Makefile2
-rw-r--r--cmd/podmanV2/README.md113
-rw-r--r--cmd/podmanV2/common/inspect.go18
-rw-r--r--cmd/podmanV2/common/netflags.go108
-rw-r--r--cmd/podmanV2/common/types.go3
-rw-r--r--cmd/podmanV2/common/util.go43
-rw-r--r--cmd/podmanV2/containers/commit.go79
-rw-r--r--cmd/podmanV2/containers/container.go48
-rw-r--r--cmd/podmanV2/containers/exists.go43
-rw-r--r--cmd/podmanV2/containers/export.go57
-rw-r--r--cmd/podmanV2/containers/inspect.go79
-rw-r--r--cmd/podmanV2/containers/kill.go72
-rw-r--r--cmd/podmanV2/containers/list.go34
-rw-r--r--cmd/podmanV2/containers/pause.go64
-rw-r--r--cmd/podmanV2/containers/ps.go29
-rw-r--r--cmd/podmanV2/containers/restart.go80
-rw-r--r--cmd/podmanV2/containers/rm.go94
-rw-r--r--cmd/podmanV2/containers/stop.go83
-rw-r--r--cmd/podmanV2/containers/top.go91
-rw-r--r--cmd/podmanV2/containers/unpause.go61
-rw-r--r--cmd/podmanV2/containers/utils.go1
-rw-r--r--cmd/podmanV2/containers/wait.go82
-rw-r--r--cmd/podmanV2/healthcheck/healthcheck.go33
-rw-r--r--cmd/podmanV2/healthcheck/run.go42
-rw-r--r--cmd/podmanV2/images/exists.go40
-rw-r--r--cmd/podmanV2/images/history.go123
-rw-r--r--cmd/podmanV2/images/image.go35
-rw-r--r--cmd/podmanV2/images/images.go33
-rw-r--r--cmd/podmanV2/images/import.go87
-rw-r--r--cmd/podmanV2/images/inspect.go109
-rw-r--r--cmd/podmanV2/images/list.go243
-rw-r--r--cmd/podmanV2/images/load.go61
-rw-r--r--cmd/podmanV2/images/prune.go86
-rw-r--r--cmd/podmanV2/images/pull.go140
-rw-r--r--cmd/podmanV2/images/rm.go70
-rw-r--r--cmd/podmanV2/images/rmi.go30
-rw-r--r--cmd/podmanV2/images/tag.go34
-rw-r--r--cmd/podmanV2/images/untag.go33
-rw-r--r--cmd/podmanV2/inspect.go62
-rw-r--r--cmd/podmanV2/main.go86
-rw-r--r--cmd/podmanV2/networks/network.go33
-rw-r--r--cmd/podmanV2/parse/parse.go233
-rw-r--r--cmd/podmanV2/parse/parse_test.go152
-rw-r--r--cmd/podmanV2/pods/create.go132
-rw-r--r--cmd/podmanV2/pods/exists.go43
-rw-r--r--cmd/podmanV2/pods/kill.go68
-rw-r--r--cmd/podmanV2/pods/pause.go66
-rw-r--r--cmd/podmanV2/pods/pod.go63
-rw-r--r--cmd/podmanV2/pods/ps.go166
-rw-r--r--cmd/podmanV2/pods/restart.go68
-rw-r--r--cmd/podmanV2/pods/rm.go71
-rw-r--r--cmd/podmanV2/pods/start.go68
-rw-r--r--cmd/podmanV2/pods/stop.go79
-rw-r--r--cmd/podmanV2/pods/top.go90
-rw-r--r--cmd/podmanV2/pods/unpause.go66
-rw-r--r--cmd/podmanV2/registry/registry.go136
-rw-r--r--cmd/podmanV2/registry/remote.go9
-rw-r--r--cmd/podmanV2/report/templates.go73
-rw-r--r--cmd/podmanV2/root.go99
-rw-r--r--cmd/podmanV2/system/system.go33
-rw-r--r--cmd/podmanV2/utils/alias.go24
-rw-r--r--cmd/podmanV2/utils/error.go16
-rw-r--r--cmd/podmanV2/volumes/create.go72
-rw-r--r--cmd/podmanV2/volumes/inspect.go74
-rw-r--r--cmd/podmanV2/volumes/list.go98
-rw-r--r--cmd/podmanV2/volumes/prune.go74
-rw-r--r--cmd/podmanV2/volumes/rm.go64
-rw-r--r--cmd/podmanV2/volumes/volume.go33
68 files changed, 0 insertions, 4834 deletions
diff --git a/cmd/podmanV2/Makefile b/cmd/podmanV2/Makefile
deleted file mode 100644
index f2f7bd73c..000000000
--- a/cmd/podmanV2/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-all:
- GO111MODULE=off go build -tags 'ABISupport systemd'
diff --git a/cmd/podmanV2/README.md b/cmd/podmanV2/README.md
deleted file mode 100644
index a17e6f850..000000000
--- a/cmd/podmanV2/README.md
+++ /dev/null
@@ -1,113 +0,0 @@
-# Adding a podman V2 commands
-
-## Build podman V2
-
-```shell script
-$ cd $GOPATH/src/github.com/containers/libpod/cmd/podmanV2
-```
-If you wish to include the libpod library in your program,
-```shell script
-$ go build -tags 'ABISupport' .
-```
-The `--remote` flag may be used to connect to the Podman service using the API.
-Otherwise, direct calls will be made to the Libpod library.
-```shell script
-$ go build -tags '!ABISupport' .
-```
-The Libpod library is not linked into the executable.
-All calls are made via the API and `--remote=False` is an error condition.
-
-## Adding a new command `podman manifests`
-```shell script
-$ mkdir -p $GOPATH/src/github.com/containers/libpod/cmd/podmanV2/manifests
-```
-Create the file ```$GOPATH/src/github.com/containers/libpod/cmd/podmanV2/manifests/manifest.go```
-```go
-package manifests
-
-import (
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- // podman _manifests_
- manifestCmd = &cobra.Command{
- Use: "manifest",
- Short: "Manage manifests",
- Long: "Manage manifests",
- Example: "podman manifests IMAGE",
- TraverseChildren: true,
- PersistentPreRunE: preRunE,
- RunE: registry.SubCommandExists, // Report error if there is no sub command given
- }
-)
-func init() {
- // Subscribe command to podman
- registry.Commands = append(registry.Commands, registry.CliCommand{
- // _podman manifest_ will support both ABIMode and TunnelMode
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- // The definition for this command
- Command: manifestCmd,
- })
- // Setup cobra templates, sub commands will inherit
- manifestCmd.SetHelpTemplate(registry.HelpTemplate())
- manifestCmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-// preRunE populates the image engine for sub commands
-func preRunE(cmd *cobra.Command, args []string) error {
- _, err := registry.NewImageEngine(cmd, args)
- return err
-}
-```
-To "wire" in the `manifest` command, edit the file ```$GOPATH/src/github.com/containers/libpod/cmd/podmanV2/main.go``` to add:
-```go
-package main
-
-import _ "github.com/containers/libpod/cmd/podmanV2/manifests"
-```
-
-## Adding a new sub command `podman manifests list`
-Create the file ```$GOPATH/src/github.com/containers/libpod/cmd/podmanV2/manifests/inspect.go```
-```go
-package manifests
-
-import (
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- // podman manifests _inspect_
- inspectCmd = &cobra.Command{
- Use: "inspect IMAGE",
- Short: "Display manifest from image",
- Long: "Displays the low-level information on a manifest identified by image name or ID",
- RunE: inspect,
- Example: "podman manifest DEADBEEF",
- }
-)
-
-func init() {
- // Subscribe inspect sub command to manifest command
- registry.Commands = append(registry.Commands, registry.CliCommand{
- // _podman manifest inspect_ will support both ABIMode and TunnelMode
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- // The definition for this command
- Command: inspectCmd,
- Parent: manifestCmd,
- })
-
- // This is where you would configure the cobra flags using inspectCmd.Flags()
-}
-
-// Business logic: cmd is inspectCmd, args is the positional arguments from os.Args
-func inspect(cmd *cobra.Command, args []string) error {
- // Business logic using registry.ImageEngine
- // Do not pull from libpod directly use the domain objects and types
- return nil
-}
-```
diff --git a/cmd/podmanV2/common/inspect.go b/cmd/podmanV2/common/inspect.go
deleted file mode 100644
index dfc6fe679..000000000
--- a/cmd/podmanV2/common/inspect.go
+++ /dev/null
@@ -1,18 +0,0 @@
-package common
-
-import (
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-// AddInspectFlagSet takes a command and adds the inspect flags and returns an InspectOptions object
-// Since this cannot live in `package main` it lives here until a better home is found
-func AddInspectFlagSet(cmd *cobra.Command) *entities.InspectOptions {
- opts := entities.InspectOptions{}
-
- flags := cmd.Flags()
- flags.BoolVarP(&opts.Size, "size", "s", false, "Display total file size")
- flags.StringVarP(&opts.Format, "format", "f", "", "Change the output format to a Go template")
-
- return &opts
-}
diff --git a/cmd/podmanV2/common/netflags.go b/cmd/podmanV2/common/netflags.go
deleted file mode 100644
index 758f155c8..000000000
--- a/cmd/podmanV2/common/netflags.go
+++ /dev/null
@@ -1,108 +0,0 @@
-package common
-
-import (
- "net"
-
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/containers/libpod/pkg/rootless"
- "github.com/spf13/cobra"
- "github.com/spf13/pflag"
-)
-
-func getDefaultNetwork() string {
- if rootless.IsRootless() {
- return "slirp4netns"
- }
- return "bridge"
-}
-
-func GetNetFlags() *pflag.FlagSet {
- netFlags := pflag.FlagSet{}
- netFlags.StringSlice(
- "add-host", []string{},
- "Add a custom host-to-IP mapping (host:ip) (default [])",
- )
- netFlags.StringSlice(
- "dns", []string{},
- "Set custom DNS servers",
- )
- netFlags.StringSlice(
- "dns-opt", []string{},
- "Set custom DNS options",
- )
- netFlags.StringSlice(
- "dns-search", []string{},
- "Set custom DNS search domains",
- )
- netFlags.String(
- "ip", "",
- "Specify a static IPv4 address for the container",
- )
- netFlags.String(
- "mac-address", "",
- "Container MAC address (e.g. 92:d0:c6:0a:29:33)",
- )
- netFlags.String(
- "network", getDefaultNetwork(),
- "Connect a container to a network",
- )
- netFlags.StringSliceP(
- "publish", "p", []string{},
- "Publish a container's port, or a range of ports, to the host (default [])",
- )
- netFlags.Bool(
- "no-hosts", false,
- "Do not create /etc/hosts within the container, instead use the version from the image",
- )
- return &netFlags
-}
-
-func NetFlagsToNetOptions(cmd *cobra.Command) (*entities.NetOptions, error) {
- var (
- err error
- )
- opts := entities.NetOptions{}
- opts.AddHosts, err = cmd.Flags().GetStringSlice("add-host")
- if err != nil {
- return nil, err
- }
- servers, err := cmd.Flags().GetStringSlice("dns")
- if err != nil {
- return nil, err
- }
- for _, d := range servers {
- if d == "none" {
- opts.DNSHost = true
- break
- }
- opts.DNSServers = append(opts.DNSServers, net.ParseIP(d))
- }
- opts.DNSSearch, err = cmd.Flags().GetStringSlice("dns-search")
- if err != nil {
- return nil, err
- }
-
- m, err := cmd.Flags().GetString("mac-address")
- if err != nil {
- return nil, err
- }
- if len(m) > 0 {
- mac, err := net.ParseMAC(m)
- if err != nil {
- return nil, err
- }
- opts.StaticMAC = &mac
- }
- inputPorts, err := cmd.Flags().GetStringSlice("publish")
- if err != nil {
- return nil, err
- }
- if len(inputPorts) > 0 {
- opts.PublishPorts, err = createPortBindings(inputPorts)
- if err != nil {
- return nil, err
- }
- }
- opts.NoHosts, err = cmd.Flags().GetBool("no-hosts")
- return &opts, err
-}
diff --git a/cmd/podmanV2/common/types.go b/cmd/podmanV2/common/types.go
deleted file mode 100644
index 2427ae975..000000000
--- a/cmd/podmanV2/common/types.go
+++ /dev/null
@@ -1,3 +0,0 @@
-package common
-
-var DefaultKernelNamespaces = "cgroup,ipc,net,uts"
diff --git a/cmd/podmanV2/common/util.go b/cmd/podmanV2/common/util.go
deleted file mode 100644
index 47bbe12fa..000000000
--- a/cmd/podmanV2/common/util.go
+++ /dev/null
@@ -1,43 +0,0 @@
-package common
-
-import (
- "strconv"
-
- "github.com/cri-o/ocicni/pkg/ocicni"
- "github.com/docker/go-connections/nat"
- "github.com/pkg/errors"
-)
-
-// createPortBindings iterates ports mappings and exposed ports into a format CNI understands
-func createPortBindings(ports []string) ([]ocicni.PortMapping, error) {
- // TODO wants someone to rewrite this code in the future
- var portBindings []ocicni.PortMapping
- // The conversion from []string to natBindings is temporary while mheon reworks the port
- // deduplication code. Eventually that step will not be required.
- _, natBindings, err := nat.ParsePortSpecs(ports)
- if err != nil {
- return nil, err
- }
- for containerPb, hostPb := range natBindings {
- var pm ocicni.PortMapping
- pm.ContainerPort = int32(containerPb.Int())
- for _, i := range hostPb {
- var hostPort int
- var err error
- pm.HostIP = i.HostIP
- if i.HostPort == "" {
- hostPort = containerPb.Int()
- } else {
- hostPort, err = strconv.Atoi(i.HostPort)
- if err != nil {
- return nil, errors.Wrapf(err, "unable to convert host port to integer")
- }
- }
-
- pm.HostPort = int32(hostPort)
- pm.Protocol = containerPb.Proto()
- portBindings = append(portBindings, pm)
- }
- }
- return portBindings, nil
-}
diff --git a/cmd/podmanV2/containers/commit.go b/cmd/podmanV2/containers/commit.go
deleted file mode 100644
index 28eb42f33..000000000
--- a/cmd/podmanV2/containers/commit.go
+++ /dev/null
@@ -1,79 +0,0 @@
-package containers
-
-import (
- "context"
- "fmt"
- "io/ioutil"
- "os"
- "strings"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- commitDescription = `Create an image from a container's changes. Optionally tag the image created, set the author with the --author flag, set the commit message with the --message flag, and make changes to the instructions with the --change flag.`
-
- commitCommand = &cobra.Command{
- Use: "commit [flags] CONTAINER [IMAGE]",
- Short: "Create new image based on the changed container",
- Long: commitDescription,
- RunE: commit,
- PreRunE: preRunE,
- Args: cobra.MinimumNArgs(1),
- Example: `podman commit -q --message "committing container to image" reverent_golick image-committed
- podman commit -q --author "firstName lastName" reverent_golick image-committed
- podman commit -q --pause=false containerID image-committed
- podman commit containerID`,
- }
-
- // ChangeCmds is the list of valid Changes commands to passed to the Commit call
- ChangeCmds = []string{"CMD", "ENTRYPOINT", "ENV", "EXPOSE", "LABEL", "ONBUILD", "STOPSIGNAL", "USER", "VOLUME", "WORKDIR"}
-)
-
-var (
- commitOptions = entities.CommitOptions{
- ImageName: "",
- }
- iidFile string
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: commitCommand,
- })
- flags := commitCommand.Flags()
- flags.StringArrayVarP(&commitOptions.Changes, "change", "c", []string{}, "Apply the following possible instructions to the created image (default []): "+strings.Join(ChangeCmds, " | "))
- flags.StringVarP(&commitOptions.Format, "format", "f", "oci", "`Format` of the image manifest and metadata")
- flags.StringVarP(&iidFile, "iidfile", "", "", "`file` to write the image ID to")
- flags.StringVarP(&commitOptions.Message, "message", "m", "", "Set commit message for imported image")
- flags.StringVarP(&commitOptions.Author, "author", "a", "", "Set the author for the image committed")
- flags.BoolVarP(&commitOptions.Pause, "pause", "p", false, "Pause container during commit")
- flags.BoolVarP(&commitOptions.Quiet, "quiet", "q", false, "Suppress output")
- flags.BoolVar(&commitOptions.IncludeVolumes, "include-volumes", false, "Include container volumes as image volumes")
-
-}
-func commit(cmd *cobra.Command, args []string) error {
- container := args[0]
- if len(args) > 1 {
- commitOptions.ImageName = args[1]
- }
- if !commitOptions.Quiet {
- commitOptions.Writer = os.Stderr
- }
-
- response, err := registry.ContainerEngine().ContainerCommit(context.Background(), container, commitOptions)
- if err != nil {
- return err
- }
- if len(iidFile) > 0 {
- if err = ioutil.WriteFile(iidFile, []byte(response.Id), 0644); err != nil {
- return errors.Wrapf(err, "failed to write image ID to file %q", iidFile)
- }
- }
- fmt.Println(response.Id)
- return nil
-}
diff --git a/cmd/podmanV2/containers/container.go b/cmd/podmanV2/containers/container.go
deleted file mode 100644
index b922eea05..000000000
--- a/cmd/podmanV2/containers/container.go
+++ /dev/null
@@ -1,48 +0,0 @@
-package containers
-
-import (
- "os"
-
- "github.com/containers/common/pkg/config"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/sirupsen/logrus"
- "github.com/spf13/cobra"
-)
-
-var (
- // Command: podman _container_
- containerCmd = &cobra.Command{
- Use: "container",
- Short: "Manage containers",
- Long: "Manage containers",
- TraverseChildren: true,
- PersistentPreRunE: preRunE,
- RunE: registry.SubCommandExists,
- }
-
- defaultContainerConfig = getDefaultContainerConfig()
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: containerCmd,
- })
- containerCmd.SetHelpTemplate(registry.HelpTemplate())
- containerCmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
- _, err := registry.NewContainerEngine(cmd, args)
- return err
-}
-
-func getDefaultContainerConfig() *config.Config {
- defaultContainerConfig, err := config.Default()
- if err != nil {
- logrus.Error(err)
- os.Exit(1)
- }
- return defaultContainerConfig
-}
diff --git a/cmd/podmanV2/containers/exists.go b/cmd/podmanV2/containers/exists.go
deleted file mode 100644
index 22c798fcd..000000000
--- a/cmd/podmanV2/containers/exists.go
+++ /dev/null
@@ -1,43 +0,0 @@
-package containers
-
-import (
- "context"
- "os"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- containerExistsDescription = `If the named container exists in local storage, podman container exists exits with 0, otherwise the exit code will be 1.`
-
- existsCommand = &cobra.Command{
- Use: "exists CONTAINER",
- Short: "Check if a container exists in local storage",
- Long: containerExistsDescription,
- Example: `podman container exists containerID
- podman container exists myctr || podman run --name myctr [etc...]`,
- RunE: exists,
- Args: cobra.ExactArgs(1),
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: existsCommand,
- Parent: containerCmd,
- })
-}
-
-func exists(cmd *cobra.Command, args []string) error {
- response, err := registry.ContainerEngine().ContainerExists(context.Background(), args[0])
- if err != nil {
- return err
- }
- if !response.Value {
- os.Exit(1)
- }
- return nil
-}
diff --git a/cmd/podmanV2/containers/export.go b/cmd/podmanV2/containers/export.go
deleted file mode 100644
index b93b60878..000000000
--- a/cmd/podmanV2/containers/export.go
+++ /dev/null
@@ -1,57 +0,0 @@
-package containers
-
-import (
- "context"
- "os"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
- "golang.org/x/crypto/ssh/terminal"
-)
-
-var (
- exportDescription = "Exports container's filesystem contents as a tar archive" +
- " and saves it on the local machine."
-
- exportCommand = &cobra.Command{
- Use: "export [flags] CONTAINER",
- Short: "Export container's filesystem contents as a tar archive",
- Long: exportDescription,
- PersistentPreRunE: preRunE,
- RunE: export,
- Args: cobra.ExactArgs(1),
- Example: `podman export ctrID > myCtr.tar
- podman export --output="myCtr.tar" ctrID`,
- }
-)
-
-var (
- exportOpts entities.ContainerExportOptions
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: exportCommand,
- })
- exportCommand.SetHelpTemplate(registry.HelpTemplate())
- exportCommand.SetUsageTemplate(registry.UsageTemplate())
- flags := exportCommand.Flags()
- flags.StringVarP(&exportOpts.Output, "output", "o", "", "Write to a specified file (default: stdout, which must be redirected)")
-}
-
-func export(cmd *cobra.Command, args []string) error {
- if len(exportOpts.Output) == 0 {
- file := os.Stdout
- if terminal.IsTerminal(int(file.Fd())) {
- return errors.Errorf("refusing to export to terminal. Use -o flag or redirect")
- }
- exportOpts.Output = "/dev/stdout"
- } else if err := parse.ValidateFileName(exportOpts.Output); err != nil {
- return err
- }
- return registry.ContainerEngine().ContainerExport(context.Background(), args[0], exportOpts)
-}
diff --git a/cmd/podmanV2/containers/inspect.go b/cmd/podmanV2/containers/inspect.go
deleted file mode 100644
index 3147426cb..000000000
--- a/cmd/podmanV2/containers/inspect.go
+++ /dev/null
@@ -1,79 +0,0 @@
-package containers
-
-import (
- "context"
- "fmt"
- "os"
- "strings"
- "text/template"
-
- "github.com/containers/libpod/cmd/podmanV2/common"
- "github.com/containers/libpod/cmd/podmanV2/registry"
-
- "github.com/containers/libpod/pkg/domain/entities"
- json "github.com/json-iterator/go"
- "github.com/spf13/cobra"
-)
-
-var (
- // podman container _inspect_
- inspectCmd = &cobra.Command{
- Use: "inspect [flags] CONTAINER",
- Short: "Display the configuration of a container",
- Long: `Displays the low-level information on a container identified by name or ID.`,
- PreRunE: preRunE,
- RunE: inspect,
- Example: `podman container inspect myCtr
- podman container inspect -l --format '{{.Id}} {{.Config.Labels}}'`,
- }
- inspectOpts *entities.InspectOptions
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: inspectCmd,
- Parent: containerCmd,
- })
- inspectOpts = common.AddInspectFlagSet(inspectCmd)
- flags := inspectCmd.Flags()
-
- if !registry.IsRemote() {
- flags.BoolVarP(&inspectOpts.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
- }
-
-}
-
-func inspect(cmd *cobra.Command, args []string) error {
- responses, err := registry.ContainerEngine().ContainerInspect(context.Background(), args, *inspectOpts)
- if err != nil {
- return err
- }
- if inspectOpts.Format == "" {
- b, err := json.MarshalIndent(responses, "", " ")
- if err != nil {
- return err
- }
- fmt.Println(string(b))
- return nil
- }
- format := inspectOpts.Format
- if !strings.HasSuffix(format, "\n") {
- format += "\n"
- }
- tmpl, err := template.New("inspect").Parse(format)
- if err != nil {
- return err
- }
- for _, i := range responses {
- if err := tmpl.Execute(os.Stdout, i); err != nil {
- return err
- }
- }
- return nil
-}
-
-func Inspect(cmd *cobra.Command, args []string, options *entities.InspectOptions) error {
- inspectOpts = options
- return inspect(cmd, args)
-}
diff --git a/cmd/podmanV2/containers/kill.go b/cmd/podmanV2/containers/kill.go
deleted file mode 100644
index 6e6debfec..000000000
--- a/cmd/podmanV2/containers/kill.go
+++ /dev/null
@@ -1,72 +0,0 @@
-package containers
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/containers/libpod/pkg/signal"
- "github.com/spf13/cobra"
-)
-
-var (
- killDescription = "The main process inside each container specified will be sent SIGKILL, or any signal specified with option --signal."
- killCommand = &cobra.Command{
- Use: "kill [flags] CONTAINER [CONTAINER...]",
- Short: "Kill one or more running containers with a specific signal",
- Long: killDescription,
- RunE: kill,
- PersistentPreRunE: preRunE,
- Args: func(cmd *cobra.Command, args []string) error {
- return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
- },
- Example: `podman kill mywebserver
- podman kill 860a4b23
- podman kill --signal TERM ctrID`,
- }
-)
-
-var (
- killOptions = entities.KillOptions{}
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: killCommand,
- })
- flags := killCommand.Flags()
- flags.BoolVarP(&killOptions.All, "all", "a", false, "Signal all running containers")
- flags.StringVarP(&killOptions.Signal, "signal", "s", "KILL", "Signal to send to the container")
- flags.BoolVarP(&killOptions.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
- if registry.IsRemote() {
- _ = flags.MarkHidden("latest")
- }
-}
-
-func kill(cmd *cobra.Command, args []string) error {
- var (
- err error
- errs utils.OutputErrors
- )
- // Check if the signalString provided by the user is valid
- // Invalid signals will return err
- if _, err = signal.ParseSignalNameOrNumber(killOptions.Signal); err != nil {
- return err
- }
- responses, err := registry.ContainerEngine().ContainerKill(context.Background(), args, killOptions)
- if err != nil {
- return err
- }
- for _, r := range responses {
- if r.Err == nil {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Err)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/containers/list.go b/cmd/podmanV2/containers/list.go
deleted file mode 100644
index 630d9bbc7..000000000
--- a/cmd/podmanV2/containers/list.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package containers
-
-import (
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- // podman container _list_
- listCmd = &cobra.Command{
- Use: "list",
- Aliases: []string{"ls"},
- Args: cobra.NoArgs,
- Short: "List containers",
- Long: "Prints out information about the containers",
- RunE: containers,
- Example: `podman container list -a
- podman container list -a --format "{{.ID}} {{.Image}} {{.Labels}} {{.Mounts}}"
- podman container list --size --sort names`,
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: listCmd,
- Parent: containerCmd,
- })
-}
-
-func containers(cmd *cobra.Command, args []string) error {
- return nil
-}
diff --git a/cmd/podmanV2/containers/pause.go b/cmd/podmanV2/containers/pause.go
deleted file mode 100644
index a9b91b68f..000000000
--- a/cmd/podmanV2/containers/pause.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package containers
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/containers/libpod/pkg/rootless"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- pauseDescription = `Pauses one or more running containers. The container name or ID can be used.`
- pauseCommand = &cobra.Command{
- Use: "pause [flags] CONTAINER [CONTAINER...]",
- Short: "Pause all the processes in one or more containers",
- Long: pauseDescription,
- RunE: pause,
- PersistentPreRunE: preRunE,
- Example: `podman pause mywebserver
- podman pause 860a4b23
- podman pause -a`,
- }
-
- pauseOpts = entities.PauseUnPauseOptions{}
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: pauseCommand,
- })
- flags := pauseCommand.Flags()
- flags.BoolVarP(&pauseOpts.All, "all", "a", false, "Pause all running containers")
- pauseCommand.SetHelpTemplate(registry.HelpTemplate())
- pauseCommand.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func pause(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- if rootless.IsRootless() && !registry.IsRemote() {
- return errors.New("pause is not supported for rootless containers")
- }
- if len(args) < 1 && !pauseOpts.All {
- return errors.Errorf("you must provide at least one container name or id")
- }
- responses, err := registry.ContainerEngine().ContainerPause(context.Background(), args, pauseOpts)
- if err != nil {
- return err
- }
- for _, r := range responses {
- if r.Err == nil {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Err)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/containers/ps.go b/cmd/podmanV2/containers/ps.go
deleted file mode 100644
index ce3d66c51..000000000
--- a/cmd/podmanV2/containers/ps.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package containers
-
-import (
- "strings"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- // podman _ps_
- psCmd = &cobra.Command{
- Use: "ps",
- Args: cobra.NoArgs,
- Short: listCmd.Short,
- Long: listCmd.Long,
- PersistentPreRunE: preRunE,
- RunE: containers,
- Example: strings.Replace(listCmd.Example, "container list", "ps", -1),
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: psCmd,
- })
-}
diff --git a/cmd/podmanV2/containers/restart.go b/cmd/podmanV2/containers/restart.go
deleted file mode 100644
index 5f1d3fe51..000000000
--- a/cmd/podmanV2/containers/restart.go
+++ /dev/null
@@ -1,80 +0,0 @@
-package containers
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/libpod/define"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- restartDescription = fmt.Sprintf(`Restarts one or more running containers. The container ID or name can be used.
-
- A timeout before forcibly stopping can be set, but defaults to %d seconds.`, defaultContainerConfig.Engine.StopTimeout)
-
- restartCommand = &cobra.Command{
- Use: "restart [flags] CONTAINER [CONTAINER...]",
- Short: "Restart one or more containers",
- Long: restartDescription,
- RunE: restart,
- PersistentPreRunE: preRunE,
- Args: func(cmd *cobra.Command, args []string) error {
- return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
- },
- Example: `podman restart ctrID
- podman restart --latest
- podman restart ctrID1 ctrID2`,
- }
-)
-
-var (
- restartOptions = entities.RestartOptions{}
- restartTimeout uint
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: restartCommand,
- })
- flags := restartCommand.Flags()
- flags.BoolVarP(&restartOptions.All, "all", "a", false, "Restart all non-running containers")
- flags.BoolVarP(&restartOptions.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
- flags.BoolVar(&restartOptions.Running, "running", false, "Restart only running containers when --all is used")
- flags.UintVarP(&restartTimeout, "time", "t", defaultContainerConfig.Engine.StopTimeout, "Seconds to wait for stop before killing the container")
- if registry.IsRemote() {
- _ = flags.MarkHidden("latest")
- }
- flags.SetNormalizeFunc(utils.AliasFlags)
-}
-
-func restart(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- if len(args) < 1 && !restartOptions.Latest && !restartOptions.All {
- return errors.Wrapf(define.ErrInvalidArg, "you must provide at least one container name or ID")
- }
-
- if cmd.Flag("time").Changed {
- restartOptions.Timeout = &restartTimeout
- }
- responses, err := registry.ContainerEngine().ContainerRestart(context.Background(), args, restartOptions)
- if err != nil {
- return err
- }
- for _, r := range responses {
- if r.Err == nil {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Err)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/containers/rm.go b/cmd/podmanV2/containers/rm.go
deleted file mode 100644
index 75655e4cd..000000000
--- a/cmd/podmanV2/containers/rm.go
+++ /dev/null
@@ -1,94 +0,0 @@
-package containers
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/libpod/define"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/pkg/errors"
- "github.com/sirupsen/logrus"
- "github.com/spf13/cobra"
-)
-
-var (
- rmDescription = `Removes one or more containers from the host. The container name or ID can be used.
-
- Command does not remove images. Running or unusable containers will not be removed without the -f option.`
- rmCommand = &cobra.Command{
- Use: "rm [flags] CONTAINER [CONTAINER...]",
- Short: "Remove one or more containers",
- Long: rmDescription,
- RunE: rm,
- PersistentPreRunE: preRunE,
- Args: func(cmd *cobra.Command, args []string) error {
- return parse.CheckAllLatestAndCIDFile(cmd, args, false, true)
- },
- Example: `podman rm imageID
- podman rm mywebserver myflaskserver 860a4b23
- podman rm --force --all
- podman rm -f c684f0d469f2`,
- }
-)
-
-var (
- rmOptions = entities.RmOptions{}
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: rmCommand,
- })
- flags := rmCommand.Flags()
- flags.BoolVarP(&rmOptions.All, "all", "a", false, "Remove all containers")
- flags.BoolVarP(&rmOptions.Ignore, "ignore", "i", false, "Ignore errors when a specified container is missing")
- flags.BoolVarP(&rmOptions.Force, "force", "f", false, "Force removal of a running or unusable container. The default is false")
- flags.BoolVarP(&rmOptions.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
- flags.BoolVar(&rmOptions.Storage, "storage", false, "Remove container from storage library")
- flags.BoolVarP(&rmOptions.Volumes, "volumes", "v", false, "Remove anonymous volumes associated with the container")
- flags.StringArrayVarP(&rmOptions.CIDFiles, "cidfile", "", nil, "Read the container ID from the file")
- if registry.IsRemote() {
- _ = flags.MarkHidden("latest")
- _ = flags.MarkHidden("ignore")
- _ = flags.MarkHidden("cidfile")
- _ = flags.MarkHidden("storage")
- }
-
-}
-
-func rm(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- // Storage conflicts with --all/--latest/--volumes/--cidfile/--ignore
- if rmOptions.Storage {
- if rmOptions.All || rmOptions.Ignore || rmOptions.Latest || rmOptions.Volumes || rmOptions.CIDFiles != nil {
- return errors.Errorf("--storage conflicts with --volumes, --all, --latest, --ignore and --cidfile")
- }
- }
- responses, err := registry.ContainerEngine().ContainerRm(context.Background(), args, rmOptions)
- if err != nil {
- // TODO exitcode is a global main variable to track exit codes.
- // we need this enabled
- //if len(c.InputArgs) < 2 {
- // exitCode = setExitCode(err)
- //}
- return err
- }
- for _, r := range responses {
- if r.Err != nil {
- // TODO this will not work with the remote client
- if errors.Cause(err) == define.ErrWillDeadlock {
- logrus.Errorf("Potential deadlock detected - please run 'podman system renumber' to resolve")
- }
- errs = append(errs, r.Err)
- } else {
- fmt.Println(r.Id)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/containers/stop.go b/cmd/podmanV2/containers/stop.go
deleted file mode 100644
index d6f31352f..000000000
--- a/cmd/podmanV2/containers/stop.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package containers
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- stopDescription = fmt.Sprintf(`Stops one or more running containers. The container name or ID can be used.
-
- A timeout to forcibly stop the container can also be set but defaults to %d seconds otherwise.`, defaultContainerConfig.Engine.StopTimeout)
- stopCommand = &cobra.Command{
- Use: "stop [flags] CONTAINER [CONTAINER...]",
- Short: "Stop one or more containers",
- Long: stopDescription,
- RunE: stop,
- PersistentPreRunE: preRunE,
- Args: func(cmd *cobra.Command, args []string) error {
- return parse.CheckAllLatestAndCIDFile(cmd, args, false, true)
- },
- Example: `podman stop ctrID
- podman stop --latest
- podman stop --time 2 mywebserver 6e534f14da9d`,
- }
-)
-
-var (
- stopOptions = entities.StopOptions{}
- stopTimeout uint
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: stopCommand,
- })
- flags := stopCommand.Flags()
- flags.BoolVarP(&stopOptions.All, "all", "a", false, "Stop all running containers")
- flags.BoolVarP(&stopOptions.Ignore, "ignore", "i", false, "Ignore errors when a specified container is missing")
- flags.StringArrayVarP(&stopOptions.CIDFiles, "cidfile", "", nil, "Read the container ID from the file")
- flags.BoolVarP(&stopOptions.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
- flags.UintVarP(&stopTimeout, "time", "t", defaultContainerConfig.Engine.StopTimeout, "Seconds to wait for stop before killing the container")
- if registry.EngineOptions.EngineMode == entities.ABIMode {
- _ = flags.MarkHidden("latest")
- _ = flags.MarkHidden("cidfile")
- _ = flags.MarkHidden("ignore")
- }
- flags.SetNormalizeFunc(utils.AliasFlags)
-}
-
-func stop(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- stopOptions.Timeout = defaultContainerConfig.Engine.StopTimeout
- if cmd.Flag("time").Changed {
- stopOptions.Timeout = stopTimeout
- }
-
- // TODO How do we access global attributes?
- //if c.Bool("trace") {
- // span, _ := opentracing.StartSpanFromContext(Ctx, "stopCmd")
- // defer span.Finish()
- //}
- responses, err := registry.ContainerEngine().ContainerStop(context.Background(), args, stopOptions)
- if err != nil {
- return err
- }
- for _, r := range responses {
- if r.Err == nil {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Err)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/containers/top.go b/cmd/podmanV2/containers/top.go
deleted file mode 100644
index a86c12e2a..000000000
--- a/cmd/podmanV2/containers/top.go
+++ /dev/null
@@ -1,91 +0,0 @@
-package containers
-
-import (
- "context"
- "fmt"
- "os"
- "strings"
- "text/tabwriter"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/containers/psgo"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- topDescription = fmt.Sprintf(`Similar to system "top" command.
-
- Specify format descriptors to alter the output.
-
- Running "podman top -l pid pcpu seccomp" will print the process ID, the CPU percentage and the seccomp mode of each process of the latest container.
- Format Descriptors:
- %s`, strings.Join(psgo.ListDescriptors(), ","))
-
- topOptions = entities.TopOptions{}
-
- topCommand = &cobra.Command{
- Use: "top [flags] CONTAINER [FORMAT-DESCRIPTORS|ARGS]",
- Short: "Display the running processes of a container",
- Long: topDescription,
- PersistentPreRunE: preRunE,
- RunE: top,
- Args: cobra.ArbitraryArgs,
- Example: `podman top ctrID
-podman top --latest
-podman top ctrID pid seccomp args %C
-podman top ctrID -eo user,pid,comm`,
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: topCommand,
- })
-
- topCommand.SetHelpTemplate(registry.HelpTemplate())
- topCommand.SetUsageTemplate(registry.UsageTemplate())
-
- flags := topCommand.Flags()
- flags.SetInterspersed(false)
- flags.BoolVar(&topOptions.ListDescriptors, "list-descriptors", false, "")
- flags.BoolVarP(&topOptions.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
-
- _ = flags.MarkHidden("list-descriptors") // meant only for bash completion
- if registry.IsRemote() {
- _ = flags.MarkHidden("latest")
- }
-}
-
-func top(cmd *cobra.Command, args []string) error {
- if topOptions.ListDescriptors {
- fmt.Println(strings.Join(psgo.ListDescriptors(), "\n"))
- return nil
- }
-
- if len(args) < 1 && !topOptions.Latest {
- return errors.Errorf("you must provide the name or id of a running container")
- }
-
- if topOptions.Latest {
- topOptions.Descriptors = args
- } else {
- topOptions.NameOrID = args[0]
- topOptions.Descriptors = args[1:]
- }
-
- topResponse, err := registry.ContainerEngine().ContainerTop(context.Background(), topOptions)
- if err != nil {
- return err
- }
-
- w := tabwriter.NewWriter(os.Stdout, 5, 1, 3, ' ', 0)
- for _, proc := range topResponse.Value {
- if _, err := fmt.Fprintln(w, proc); err != nil {
- return err
- }
- }
- return w.Flush()
-}
diff --git a/cmd/podmanV2/containers/unpause.go b/cmd/podmanV2/containers/unpause.go
deleted file mode 100644
index 6a3179f10..000000000
--- a/cmd/podmanV2/containers/unpause.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package containers
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/containers/libpod/pkg/rootless"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- unpauseDescription = `Unpauses one or more previously paused containers. The container name or ID can be used.`
- unpauseCommand = &cobra.Command{
- Use: "unpause [flags] CONTAINER [CONTAINER...]",
- Short: "Unpause the processes in one or more containers",
- Long: unpauseDescription,
- RunE: unpause,
- PersistentPreRunE: preRunE,
- Example: `podman unpause ctrID
- podman unpause --all`,
- }
- unPauseOptions = entities.PauseUnPauseOptions{}
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: unpauseCommand,
- Parent: containerCmd,
- })
- flags := unpauseCommand.Flags()
- flags.BoolVarP(&unPauseOptions.All, "all", "a", false, "Pause all running containers")
-}
-
-func unpause(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- if rootless.IsRootless() && !registry.IsRemote() {
- return errors.New("unpause is not supported for rootless containers")
- }
- if len(args) < 1 && !unPauseOptions.All {
- return errors.Errorf("you must provide at least one container name or id")
- }
- responses, err := registry.ContainerEngine().ContainerUnpause(context.Background(), args, unPauseOptions)
- if err != nil {
- return err
- }
- for _, r := range responses {
- if r.Err == nil {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Err)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/containers/utils.go b/cmd/podmanV2/containers/utils.go
deleted file mode 100644
index 0c09d3e40..000000000
--- a/cmd/podmanV2/containers/utils.go
+++ /dev/null
@@ -1 +0,0 @@
-package containers
diff --git a/cmd/podmanV2/containers/wait.go b/cmd/podmanV2/containers/wait.go
deleted file mode 100644
index bf3c86200..000000000
--- a/cmd/podmanV2/containers/wait.go
+++ /dev/null
@@ -1,82 +0,0 @@
-package containers
-
-import (
- "context"
- "fmt"
- "time"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/libpod/define"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- waitDescription = `Block until one or more containers stop and then print their exit codes.
-`
- waitCommand = &cobra.Command{
- Use: "wait [flags] CONTAINER [CONTAINER...]",
- Short: "Block on one or more containers",
- Long: waitDescription,
- RunE: wait,
- PersistentPreRunE: preRunE,
- Args: func(cmd *cobra.Command, args []string) error {
- return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
- },
- Example: `podman wait --latest
- podman wait --interval 5000 ctrID
- podman wait ctrID1 ctrID2`,
- }
-)
-
-var (
- waitOptions = entities.WaitOptions{}
- waitCondition string
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: waitCommand,
- })
-
- flags := waitCommand.Flags()
- flags.DurationVarP(&waitOptions.Interval, "interval", "i", time.Duration(250), "Milliseconds to wait before polling for completion")
- flags.BoolVarP(&waitOptions.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
- flags.StringVar(&waitCondition, "condition", "stopped", "Condition to wait on")
- if registry.EngineOptions.EngineMode == entities.ABIMode {
- // TODO: This is the same as V1. We could skip creating the flag altogether in V2...
- _ = flags.MarkHidden("latest")
- }
-}
-
-func wait(cmd *cobra.Command, args []string) error {
- var (
- err error
- errs utils.OutputErrors
- )
- if waitOptions.Interval == 0 {
- return errors.New("interval must be greater then 0")
- }
-
- waitOptions.Condition, err = define.StringToContainerStatus(waitCondition)
- if err != nil {
- return err
- }
-
- responses, err := registry.ContainerEngine().ContainerWait(context.Background(), args, waitOptions)
- if err != nil {
- return err
- }
- for _, r := range responses {
- if r.Error == nil {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Error)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/healthcheck/healthcheck.go b/cmd/podmanV2/healthcheck/healthcheck.go
deleted file mode 100644
index 2af398ff0..000000000
--- a/cmd/podmanV2/healthcheck/healthcheck.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package healthcheck
-
-import (
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- // Command: healthcheck
- healthCmd = &cobra.Command{
- Use: "healthcheck",
- Short: "Manage Healthcheck",
- Long: "Manage Healthcheck",
- TraverseChildren: true,
- PersistentPreRunE: preRunE,
- RunE: registry.SubCommandExists,
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: healthCmd,
- })
- healthCmd.SetHelpTemplate(registry.HelpTemplate())
- healthCmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
- _, err := registry.NewContainerEngine(cmd, args)
- return err
-}
diff --git a/cmd/podmanV2/healthcheck/run.go b/cmd/podmanV2/healthcheck/run.go
deleted file mode 100644
index bb2962eaf..000000000
--- a/cmd/podmanV2/healthcheck/run.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package healthcheck
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- healthcheckRunDescription = "run the health check of a container"
- healthcheckrunCommand = &cobra.Command{
- Use: "run [flags] CONTAINER",
- Short: "run the health check of a container",
- Long: healthcheckRunDescription,
- Example: `podman healthcheck run mywebapp`,
- RunE: run,
- Args: cobra.ExactArgs(1),
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: healthcheckrunCommand,
- Parent: healthCmd,
- })
-}
-
-func run(cmd *cobra.Command, args []string) error {
- response, err := registry.ContainerEngine().HealthCheckRun(context.Background(), args[0], entities.HealthCheckOptions{})
- if err != nil {
- return err
- }
- if response.Status == "unhealthy" {
- registry.SetExitCode(1)
- }
- fmt.Println(response.Status)
- return err
-}
diff --git a/cmd/podmanV2/images/exists.go b/cmd/podmanV2/images/exists.go
deleted file mode 100644
index d35d6825e..000000000
--- a/cmd/podmanV2/images/exists.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package images
-
-import (
- "os"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- existsCmd = &cobra.Command{
- Use: "exists IMAGE",
- Short: "Check if an image exists in local storage",
- Long: `If the named image exists in local storage, podman image exists exits with 0, otherwise the exit code will be 1.`,
- Args: cobra.ExactArgs(1),
- RunE: exists,
- Example: `podman image exists ID
- podman image exists IMAGE && podman pull IMAGE`,
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: existsCmd,
- Parent: imageCmd,
- })
-}
-
-func exists(cmd *cobra.Command, args []string) error {
- found, err := registry.ImageEngine().Exists(registry.GetContext(), args[0])
- if err != nil {
- return err
- }
- if !found.Value {
- os.Exit(1)
- }
- return nil
-}
diff --git a/cmd/podmanV2/images/history.go b/cmd/podmanV2/images/history.go
deleted file mode 100644
index f6f15e2f2..000000000
--- a/cmd/podmanV2/images/history.go
+++ /dev/null
@@ -1,123 +0,0 @@
-package images
-
-import (
- "context"
- "fmt"
- "os"
- "strings"
- "text/tabwriter"
- "text/template"
- "time"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/report"
- "github.com/containers/libpod/pkg/domain/entities"
- jsoniter "github.com/json-iterator/go"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- long = `Displays the history of an image.
-
- The information can be printed out in an easy to read, or user specified format, and can be truncated.`
-
- // podman _history_
- historyCmd = &cobra.Command{
- Use: "history [flags] IMAGE",
- Short: "Show history of a specified image",
- Long: long,
- Example: "podman history quay.io/fedora/fedora",
- Args: cobra.ExactArgs(1),
- PersistentPreRunE: preRunE,
- RunE: history,
- }
-
- opts = struct {
- human bool
- noTrunc bool
- quiet bool
- format string
- }{}
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: historyCmd,
- })
-
- historyCmd.SetHelpTemplate(registry.HelpTemplate())
- historyCmd.SetUsageTemplate(registry.UsageTemplate())
-
- flags := historyCmd.Flags()
- flags.StringVar(&opts.format, "format", "", "Change the output to JSON or a Go template")
- flags.BoolVarP(&opts.human, "human", "H", false, "Display sizes and dates in human readable format")
- flags.BoolVar(&opts.noTrunc, "no-trunc", false, "Do not truncate the output")
- flags.BoolVar(&opts.noTrunc, "notruncate", false, "Do not truncate the output")
- flags.BoolVarP(&opts.quiet, "quiet", "q", false, "Display the numeric IDs only")
-}
-
-func history(cmd *cobra.Command, args []string) error {
- results, err := registry.ImageEngine().History(context.Background(), args[0], entities.ImageHistoryOptions{})
- if err != nil {
- return err
- }
-
- if opts.format == "json" {
- var err error
- if len(results.Layers) == 0 {
- _, err = fmt.Fprintf(os.Stdout, "[]\n")
- } else {
- // ah-hoc change to "Created": type and format
- type layer struct {
- entities.ImageHistoryLayer
- Created string `json:"Created"`
- }
-
- layers := make([]layer, len(results.Layers))
- for i, l := range results.Layers {
- layers[i].ImageHistoryLayer = l
- layers[i].Created = time.Unix(l.Created, 0).Format(time.RFC3339)
- }
- json := jsoniter.ConfigCompatibleWithStandardLibrary
- enc := json.NewEncoder(os.Stdout)
- err = enc.Encode(layers)
- }
- return err
- }
-
- // Defaults
- hdr := "ID\tCREATED\tCREATED BY\tSIZE\tCOMMENT\n"
- row := "{{slice .ID 0 12}}\t{{humanDuration .Created}}\t{{ellipsis .CreatedBy 45}}\t{{.Size}}\t{{.Comment}}\n"
-
- if len(opts.format) > 0 {
- hdr = ""
- row = opts.format
- if !strings.HasSuffix(opts.format, "\n") {
- row += "\n"
- }
- } else {
- switch {
- case opts.human:
- row = "{{slice .ID 0 12}}\t{{humanDuration .Created}}\t{{ellipsis .CreatedBy 45}}\t{{humanSize .Size}}\t{{.Comment}}\n"
- case opts.noTrunc:
- row = "{{.ID}}\t{{humanDuration .Created}}\t{{.CreatedBy}}\t{{humanSize .Size}}\t{{.Comment}}\n"
- case opts.quiet:
- hdr = ""
- row = "{{.ID}}\n"
- }
- }
- format := hdr + "{{range . }}" + row + "{{end}}"
-
- tmpl := template.Must(template.New("report").Funcs(report.PodmanTemplateFuncs()).Parse(format))
- w := tabwriter.NewWriter(os.Stdout, 8, 2, 2, ' ', 0)
-
- _, _ = w.Write(report.ReportHeader("id", "created", "created by", "size", "comment"))
- err = tmpl.Execute(w, results.Layers)
- if err != nil {
- fmt.Fprintln(os.Stderr, errors.Wrapf(err, "Failed to print report"))
- }
- w.Flush()
- return nil
-}
diff --git a/cmd/podmanV2/images/image.go b/cmd/podmanV2/images/image.go
deleted file mode 100644
index 9fc7b21d1..000000000
--- a/cmd/podmanV2/images/image.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package images
-
-import (
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- // Command: podman _image_
- imageCmd = &cobra.Command{
- Use: "image",
- Short: "Manage images",
- Long: "Manage images",
- TraverseChildren: true,
- PersistentPreRunE: preRunE,
- RunE: registry.SubCommandExists,
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: imageCmd,
- })
- imageCmd.SetHelpTemplate(registry.HelpTemplate())
- imageCmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
- if _, err := registry.NewImageEngine(cmd, args); err != nil {
- return err
- }
- return nil
-}
diff --git a/cmd/podmanV2/images/images.go b/cmd/podmanV2/images/images.go
deleted file mode 100644
index d00f0996e..000000000
--- a/cmd/podmanV2/images/images.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package images
-
-import (
- "strings"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- // podman _images_ Alias for podman image _list_
- imagesCmd = &cobra.Command{
- Use: strings.Replace(listCmd.Use, "list", "images", 1),
- Args: listCmd.Args,
- Short: listCmd.Short,
- Long: listCmd.Long,
- PreRunE: preRunE,
- RunE: listCmd.RunE,
- Example: strings.Replace(listCmd.Example, "podman image list", "podman images", -1),
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: imagesCmd,
- })
- imagesCmd.SetHelpTemplate(registry.HelpTemplate())
- imagesCmd.SetUsageTemplate(registry.UsageTemplate())
-
- imageListFlagSet(imagesCmd.Flags())
-}
diff --git a/cmd/podmanV2/images/import.go b/cmd/podmanV2/images/import.go
deleted file mode 100644
index 09a15585f..000000000
--- a/cmd/podmanV2/images/import.go
+++ /dev/null
@@ -1,87 +0,0 @@
-package images
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/hashicorp/go-multierror"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- importDescription = `Create a container image from the contents of the specified tarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz).
-
- Note remote tar balls can be specified, via web address.
- Optionally tag the image. You can specify the instructions using the --change option.`
- importCommand = &cobra.Command{
- Use: "import [flags] PATH [REFERENCE]",
- Short: "Import a tarball to create a filesystem image",
- Long: importDescription,
- RunE: importCon,
- PersistentPreRunE: preRunE,
- Example: `podman import http://example.com/ctr.tar url-image
- cat ctr.tar | podman -q import --message "importing the ctr.tar tarball" - image-imported
- cat ctr.tar | podman import -`,
- }
-)
-
-var (
- importOpts entities.ImageImportOptions
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: importCommand,
- })
-
- importCommand.SetHelpTemplate(registry.HelpTemplate())
- importCommand.SetUsageTemplate(registry.UsageTemplate())
- flags := importCommand.Flags()
- flags.StringArrayVarP(&importOpts.Changes, "change", "c", []string{}, "Apply the following possible instructions to the created image (default []): CMD | ENTRYPOINT | ENV | EXPOSE | LABEL | STOPSIGNAL | USER | VOLUME | WORKDIR")
- flags.StringVarP(&importOpts.Message, "message", "m", "", "Set commit message for imported image")
- flags.BoolVarP(&importOpts.Quiet, "quiet", "q", false, "Suppress output")
-}
-
-func importCon(cmd *cobra.Command, args []string) error {
- var (
- source string
- reference string
- )
- switch len(args) {
- case 0:
- return errors.Errorf("need to give the path to the tarball, or must specify a tarball of '-' for stdin")
- case 1:
- source = args[0]
- case 2:
- source = args[0]
- // TODO when save is merged, we need to process reference
- // like it is done in there or we end up with docker.io prepends
- // instead of the localhost ones
- reference = args[1]
- default:
- return errors.Errorf("too many arguments. Usage TARBALL [REFERENCE]")
- }
- errFileName := parse.ValidateFileName(source)
- errURL := parse.ValidURL(source)
- if errURL == nil {
- importOpts.SourceIsURL = true
- }
- if errFileName != nil && errURL != nil {
- return multierror.Append(errFileName, errURL)
- }
-
- importOpts.Source = source
- importOpts.Reference = reference
-
- response, err := registry.ImageEngine().Import(context.Background(), importOpts)
- if err != nil {
- return err
- }
- fmt.Println(response.Id)
- return nil
-}
diff --git a/cmd/podmanV2/images/inspect.go b/cmd/podmanV2/images/inspect.go
deleted file mode 100644
index d7f6b0ee1..000000000
--- a/cmd/podmanV2/images/inspect.go
+++ /dev/null
@@ -1,109 +0,0 @@
-package images
-
-import (
- "context"
- "encoding/json"
- "fmt"
- "os"
- "strings"
- "text/tabwriter"
- "text/template"
-
- "github.com/containers/buildah/pkg/formats"
- "github.com/containers/libpod/cmd/podmanV2/common"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- // Command: podman image _inspect_
- inspectCmd = &cobra.Command{
- Use: "inspect [flags] IMAGE",
- Short: "Display the configuration of an image",
- Long: `Displays the low-level information on an image identified by name or ID.`,
- RunE: inspect,
- Example: `podman image inspect alpine`,
- }
- inspectOpts *entities.InspectOptions
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: inspectCmd,
- Parent: imageCmd,
- })
- inspectOpts = common.AddInspectFlagSet(inspectCmd)
-}
-
-func inspect(cmd *cobra.Command, args []string) error {
- latestContainer := inspectOpts.Latest
-
- if len(args) == 0 && !latestContainer {
- return errors.Errorf("container or image name must be specified: podman inspect [options [...]] name")
- }
-
- if len(args) > 0 && latestContainer {
- return errors.Errorf("you cannot provide additional arguments with --latest")
- }
-
- results, err := registry.ImageEngine().Inspect(context.Background(), args, *inspectOpts)
- if err != nil {
- return err
- }
-
- if len(results.Images) > 0 {
- if inspectOpts.Format == "" {
- buf, err := json.MarshalIndent(results.Images, "", " ")
- if err != nil {
- return err
- }
- fmt.Println(string(buf))
-
- for id, e := range results.Errors {
- fmt.Fprintf(os.Stderr, "%s: %s\n", id, e.Error())
- }
- return nil
- }
-
- row := inspectFormat(inspectOpts.Format)
- format := "{{range . }}" + row + "{{end}}"
- tmpl, err := template.New("inspect").Parse(format)
- if err != nil {
- return err
- }
-
- w := tabwriter.NewWriter(os.Stdout, 8, 2, 2, ' ', 0)
- defer func() { _ = w.Flush() }()
- err = tmpl.Execute(w, results)
- if err != nil {
- return err
- }
- }
-
- for id, e := range results.Errors {
- fmt.Fprintf(os.Stderr, "%s: %s\n", id, e.Error())
- }
- return nil
-}
-
-func inspectFormat(row string) string {
- r := strings.NewReplacer("{{.Id}}", formats.IDString,
- ".Src", ".Source",
- ".Dst", ".Destination",
- ".ImageID", ".Image",
- )
- row = r.Replace(row)
-
- if !strings.HasSuffix(row, "\n") {
- row += "\n"
- }
- return row
-}
-
-func Inspect(cmd *cobra.Command, args []string, options *entities.InspectOptions) error {
- inspectOpts = options
- return inspect(cmd, args)
-}
diff --git a/cmd/podmanV2/images/list.go b/cmd/podmanV2/images/list.go
deleted file mode 100644
index 2d6cb3596..000000000
--- a/cmd/podmanV2/images/list.go
+++ /dev/null
@@ -1,243 +0,0 @@
-package images
-
-import (
- "errors"
- "fmt"
- "os"
- "sort"
- "strings"
- "text/tabwriter"
- "text/template"
- "time"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/report"
- "github.com/containers/libpod/pkg/domain/entities"
- jsoniter "github.com/json-iterator/go"
- "github.com/spf13/cobra"
- "github.com/spf13/pflag"
-)
-
-type listFlagType struct {
- format string
- history bool
- noHeading bool
- noTrunc bool
- quiet bool
- sort string
- readOnly bool
- digests bool
-}
-
-var (
- // Command: podman image _list_
- listCmd = &cobra.Command{
- Use: "list [flag] [IMAGE]",
- Aliases: []string{"ls"},
- Args: cobra.MaximumNArgs(1),
- Short: "List images in local storage",
- Long: "Lists images previously pulled to the system or created on the system.",
- RunE: images,
- Example: `podman image list --format json
- podman image list --sort repository --format "table {{.ID}} {{.Repository}} {{.Tag}}"
- podman image list --filter dangling=true`,
- }
-
- // Options to pull data
- listOptions = entities.ImageListOptions{}
-
- // Options for presenting data
- listFlag = listFlagType{}
-
- sortFields = entities.NewStringSet(
- "created",
- "id",
- "repository",
- "size",
- "tag")
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: listCmd,
- Parent: imageCmd,
- })
- imageListFlagSet(listCmd.Flags())
-}
-
-func imageListFlagSet(flags *pflag.FlagSet) {
- flags.BoolVarP(&listOptions.All, "all", "a", false, "Show all images (default hides intermediate images)")
- flags.StringSliceVarP(&listOptions.Filter, "filter", "f", []string{}, "Filter output based on conditions provided (default [])")
- flags.StringVar(&listFlag.format, "format", "", "Change the output format to JSON or a Go template")
- flags.BoolVar(&listFlag.digests, "digests", false, "Show digests")
- flags.BoolVarP(&listFlag.noHeading, "noheading", "n", false, "Do not print column headings")
- flags.BoolVar(&listFlag.noTrunc, "no-trunc", false, "Do not truncate output")
- flags.BoolVar(&listFlag.noTrunc, "notruncate", false, "Do not truncate output")
- flags.BoolVarP(&listFlag.quiet, "quiet", "q", false, "Display only image IDs")
- flags.StringVar(&listFlag.sort, "sort", "created", "Sort by "+sortFields.String())
- flags.BoolVarP(&listFlag.history, "history", "", false, "Display the image name history")
-}
-
-func images(cmd *cobra.Command, args []string) error {
- if len(listOptions.Filter) > 0 && len(args) > 0 {
- return errors.New("cannot specify an image and a filter(s)")
- }
-
- if len(listOptions.Filter) < 1 && len(args) > 0 {
- listOptions.Filter = append(listOptions.Filter, "reference="+args[0])
- }
-
- if cmd.Flag("sort").Changed && !sortFields.Contains(listFlag.sort) {
- return fmt.Errorf("\"%s\" is not a valid field for sorting. Choose from: %s",
- listFlag.sort, sortFields.String())
- }
-
- summaries, err := registry.ImageEngine().List(registry.GetContext(), listOptions)
- if err != nil {
- return err
- }
-
- imageS := summaries
- sort.Slice(imageS, sortFunc(listFlag.sort, imageS))
-
- if cmd.Flag("format").Changed && listFlag.format == "json" {
- return writeJSON(imageS)
- } else {
- return writeTemplate(imageS, err)
- }
-}
-
-func writeJSON(imageS []*entities.ImageSummary) error {
- type image struct {
- entities.ImageSummary
- Created string
- }
-
- imgs := make([]image, 0, len(imageS))
- for _, e := range imageS {
- var h image
- h.ImageSummary = *e
- h.Created = time.Unix(e.Created, 0).Format(time.RFC3339)
- h.RepoTags = nil
-
- imgs = append(imgs, h)
- }
-
- json := jsoniter.ConfigCompatibleWithStandardLibrary
- enc := json.NewEncoder(os.Stdout)
- return enc.Encode(imgs)
-}
-
-func writeTemplate(imageS []*entities.ImageSummary, err error) error {
- type image struct {
- entities.ImageSummary
- Repository string `json:"repository,omitempty"`
- Tag string `json:"tag,omitempty"`
- }
-
- imgs := make([]image, 0, len(imageS))
- for _, e := range imageS {
- for _, tag := range e.RepoTags {
- var h image
- h.ImageSummary = *e
- h.Repository, h.Tag = tokenRepoTag(tag)
- imgs = append(imgs, h)
- }
- if e.IsReadOnly() {
- listFlag.readOnly = true
- }
- }
-
- hdr, row := imageListFormat(listFlag)
- format := hdr + "{{range . }}" + row + "{{end}}"
-
- tmpl := template.Must(template.New("list").Funcs(report.PodmanTemplateFuncs()).Parse(format))
- w := tabwriter.NewWriter(os.Stdout, 8, 2, 2, ' ', 0)
- defer w.Flush()
- return tmpl.Execute(w, imgs)
-}
-
-func tokenRepoTag(tag string) (string, string) {
- tokens := strings.SplitN(tag, ":", 2)
- switch len(tokens) {
- case 0:
- return tag, ""
- case 1:
- return tokens[0], ""
- case 2:
- return tokens[0], tokens[1]
- default:
- return "<N/A>", ""
- }
-}
-
-func sortFunc(key string, data []*entities.ImageSummary) func(i, j int) bool {
- switch key {
- case "id":
- return func(i, j int) bool {
- return data[i].ID < data[j].ID
- }
- case "repository":
- return func(i, j int) bool {
- return data[i].RepoTags[0] < data[j].RepoTags[0]
- }
- case "size":
- return func(i, j int) bool {
- return data[i].Size < data[j].Size
- }
- case "tag":
- return func(i, j int) bool {
- return data[i].RepoTags[0] < data[j].RepoTags[0]
- }
- default:
- // case "created":
- return func(i, j int) bool {
- return data[i].Created >= data[j].Created
- }
- }
-}
-
-func imageListFormat(flags listFlagType) (string, string) {
- if flags.quiet {
- return "", "{{slice .ID 0 12}}\n"
- }
-
- // Defaults
- hdr := "REPOSITORY\tTAG"
- row := "{{.Repository}}\t{{if .Tag}}{{.Tag}}{{else}}<none>{{end}}"
-
- if flags.digests {
- hdr += "\tDIGEST"
- row += "\t{{.Digest}}"
- }
-
- hdr += "\tIMAGE ID"
- if flags.noTrunc {
- row += "\tsha256:{{.ID}}"
- } else {
- row += "\t{{slice .ID 0 12}}"
- }
-
- hdr += "\tCREATED\tSIZE"
- row += "\t{{humanDuration .Created}}\t{{humanSize .Size}}"
-
- if flags.history {
- hdr += "\tHISTORY"
- row += "\t{{if .History}}{{join .History \", \"}}{{else}}<none>{{end}}"
- }
-
- if flags.readOnly {
- hdr += "\tReadOnly"
- row += "\t{{.ReadOnly}}"
- }
-
- if flags.noHeading {
- hdr = ""
- } else {
- hdr += "\n"
- }
-
- row += "\n"
- return hdr, row
-}
diff --git a/cmd/podmanV2/images/load.go b/cmd/podmanV2/images/load.go
deleted file mode 100644
index f60dc4908..000000000
--- a/cmd/podmanV2/images/load.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package images
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/libpod/image"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- loadDescription = "Loads an image from a locally stored archive (tar file) into container storage."
- loadCommand = &cobra.Command{
- Use: "load [flags] [NAME[:TAG]]",
- Short: "Load an image from container archive",
- Long: loadDescription,
- RunE: load,
- Args: cobra.MaximumNArgs(1),
- PersistentPreRunE: preRunE,
- }
-)
-
-var (
- loadOpts entities.ImageLoadOptions
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: loadCommand,
- })
-
- loadCommand.SetHelpTemplate(registry.HelpTemplate())
- loadCommand.SetUsageTemplate(registry.UsageTemplate())
- flags := loadCommand.Flags()
- flags.StringVarP(&loadOpts.Input, "input", "i", "", "Read from specified archive file (default: stdin)")
- flags.BoolVarP(&loadOpts.Quiet, "quiet", "q", false, "Suppress the output")
- flags.StringVar(&loadOpts.SignaturePolicy, "signature-policy", "", "Pathname of signature policy file")
- if registry.IsRemote() {
- _ = flags.MarkHidden("signature-policy")
- }
-
-}
-
-func load(cmd *cobra.Command, args []string) error {
- if len(args) > 0 {
- repo, err := image.NormalizedTag(args[0])
- if err != nil {
- return err
- }
- loadOpts.Name = repo.Name()
- }
- response, err := registry.ImageEngine().Load(context.Background(), loadOpts)
- if err != nil {
- return err
- }
- fmt.Println("Loaded image: " + response.Name)
- return nil
-}
diff --git a/cmd/podmanV2/images/prune.go b/cmd/podmanV2/images/prune.go
deleted file mode 100644
index 6577c458e..000000000
--- a/cmd/podmanV2/images/prune.go
+++ /dev/null
@@ -1,86 +0,0 @@
-package images
-
-import (
- "bufio"
- "fmt"
- "os"
- "strings"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- pruneDescription = `Removes all unnamed images from local storage.
-
- If an image is not being used by a container, it will be removed from the system.`
- pruneCmd = &cobra.Command{
- Use: "prune",
- Args: cobra.NoArgs,
- Short: "Remove unused images",
- Long: pruneDescription,
- RunE: prune,
- Example: `podman image prune`,
- }
-
- pruneOpts = entities.ImagePruneOptions{}
- force bool
- filter = []string{}
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: pruneCmd,
- Parent: imageCmd,
- })
-
- flags := pruneCmd.Flags()
- flags.BoolVarP(&pruneOpts.All, "all", "a", false, "Remove all unused images, not just dangling ones")
- flags.BoolVarP(&force, "force", "f", false, "Do not prompt for confirmation")
- flags.StringArrayVar(&filter, "filter", []string{}, "Provide filter values (e.g. 'label=<key>=<value>')")
-
-}
-
-func prune(cmd *cobra.Command, args []string) error {
- if !force {
- reader := bufio.NewReader(os.Stdin)
- fmt.Printf(`
-WARNING! This will remove all dangling images.
-Are you sure you want to continue? [y/N] `)
- answer, err := reader.ReadString('\n')
- if err != nil {
- return errors.Wrapf(err, "error reading input")
- }
- if strings.ToLower(answer)[0] != 'y' {
- return nil
- }
- }
-
- // TODO Remove once filter refactor is finished and url.Values rules :)
- for _, f := range filter {
- t := strings.SplitN(f, "=", 2)
- pruneOpts.Filters.Add(t[0], t[1])
- }
-
- results, err := registry.ImageEngine().Prune(registry.GetContext(), pruneOpts)
- if err != nil {
- return err
- }
-
- for _, i := range results.Report.Id {
- fmt.Println(i)
- }
-
- for _, e := range results.Report.Err {
- fmt.Fprint(os.Stderr, e.Error()+"\n")
- }
-
- if results.Size > 0 {
- fmt.Fprintf(os.Stdout, "Size: %d\n", results.Size)
- }
-
- return nil
-}
diff --git a/cmd/podmanV2/images/pull.go b/cmd/podmanV2/images/pull.go
deleted file mode 100644
index c7e325409..000000000
--- a/cmd/podmanV2/images/pull.go
+++ /dev/null
@@ -1,140 +0,0 @@
-package images
-
-import (
- "fmt"
-
- buildahcli "github.com/containers/buildah/pkg/cli"
- "github.com/containers/image/v5/types"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/opentracing/opentracing-go"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
- "github.com/spf13/pflag"
-)
-
-// pullOptionsWrapper wraps entities.ImagePullOptions and prevents leaking
-// CLI-only fields into the API types.
-type pullOptionsWrapper struct {
- entities.ImagePullOptions
- TLSVerifyCLI bool // CLI only
-}
-
-var (
- pullOptions = pullOptionsWrapper{}
- pullDescription = `Pulls an image from a registry and stores it locally.
-
- An image can be pulled by tag or digest. If a tag is not specified, the image with the 'latest' tag is pulled.`
-
- // Command: podman pull
- pullCmd = &cobra.Command{
- Use: "pull [flags] IMAGE",
- Short: "Pull an image from a registry",
- Long: pullDescription,
- PreRunE: preRunE,
- RunE: imagePull,
- Example: `podman pull imageName
- podman pull fedora:latest`,
- }
-
- // Command: podman image pull
- // It's basically a clone of `pullCmd` with the exception of being a
- // child of the images command.
- imagesPullCmd = &cobra.Command{
- Use: pullCmd.Use,
- Short: pullCmd.Short,
- Long: pullCmd.Long,
- PreRunE: pullCmd.PreRunE,
- RunE: pullCmd.RunE,
- Example: `podman image pull imageName
- podman image pull fedora:latest`,
- }
-)
-
-func init() {
- // pull
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: pullCmd,
- })
-
- pullCmd.SetHelpTemplate(registry.HelpTemplate())
- pullCmd.SetUsageTemplate(registry.UsageTemplate())
-
- flags := pullCmd.Flags()
- pullFlags(flags)
-
- // images pull
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: imagesPullCmd,
- Parent: imageCmd,
- })
-
- imagesPullCmd.SetHelpTemplate(registry.HelpTemplate())
- imagesPullCmd.SetUsageTemplate(registry.UsageTemplate())
- imagesPullFlags := imagesPullCmd.Flags()
- pullFlags(imagesPullFlags)
-}
-
-// pullFlags set the flags for the pull command.
-func pullFlags(flags *pflag.FlagSet) {
- flags.BoolVar(&pullOptions.AllTags, "all-tags", false, "All tagged images in the repository will be pulled")
- flags.StringVar(&pullOptions.Authfile, "authfile", buildahcli.GetDefaultAuthFile(), "Path of the authentication file. Use REGISTRY_AUTH_FILE environment variable to override")
- flags.StringVar(&pullOptions.CertDir, "cert-dir", "", "`Pathname` of a directory containing TLS certificates and keys")
- flags.StringVar(&pullOptions.Credentials, "creds", "", "`Credentials` (USERNAME:PASSWORD) to use for authenticating to a registry")
- flags.StringVar(&pullOptions.OverrideArch, "override-arch", "", "Use `ARCH` instead of the architecture of the machine for choosing images")
- flags.StringVar(&pullOptions.OverrideOS, "override-os", "", "Use `OS` instead of the running OS for choosing images")
- flags.BoolVarP(&pullOptions.Quiet, "quiet", "q", false, "Suppress output information when pulling images")
- flags.StringVar(&pullOptions.SignaturePolicy, "signature-policy", "", "`Pathname` of signature policy file (not usually used)")
- flags.BoolVar(&pullOptions.TLSVerifyCLI, "tls-verify", true, "Require HTTPS and verify certificates when contacting registries")
-
- if registry.IsRemote() {
- _ = flags.MarkHidden("authfile")
- _ = flags.MarkHidden("cert-dir")
- _ = flags.MarkHidden("signature-policy")
- _ = flags.MarkHidden("tls-verify")
- }
-}
-
-// imagePull is implement the command for pulling images.
-func imagePull(cmd *cobra.Command, args []string) error {
- // Sanity check input.
- if len(args) == 0 {
- return errors.Errorf("an image name must be specified")
- }
- if len(args) > 1 {
- return errors.Errorf("too many arguments. Requires exactly 1")
- }
-
- // Start tracing if requested.
- if cmd.Flags().Changed("trace") {
- span, _ := opentracing.StartSpanFromContext(registry.GetContext(), "pullCmd")
- defer span.Finish()
- }
-
- pullOptsAPI := pullOptions.ImagePullOptions
- // TLS verification in c/image is controlled via a `types.OptionalBool`
- // which allows for distinguishing among set-true, set-false, unspecified
- // which is important to implement a sane way of dealing with defaults of
- // boolean CLI flags.
- if cmd.Flags().Changed("tls-verify") {
- pullOptsAPI.TLSVerify = types.NewOptionalBool(pullOptions.TLSVerifyCLI)
- }
-
- // Let's do all the remaining Yoga in the API to prevent us from
- // scattering logic across (too) many parts of the code.
- pullReport, err := registry.ImageEngine().Pull(registry.GetContext(), args[0], pullOptsAPI)
- if err != nil {
- return err
- }
-
- if len(pullReport.Images) > 1 {
- fmt.Println("Pulled Images:")
- }
- for _, img := range pullReport.Images {
- fmt.Println(img)
- }
-
- return nil
-}
diff --git a/cmd/podmanV2/images/rm.go b/cmd/podmanV2/images/rm.go
deleted file mode 100644
index bb5880de3..000000000
--- a/cmd/podmanV2/images/rm.go
+++ /dev/null
@@ -1,70 +0,0 @@
-package images
-
-import (
- "fmt"
- "os"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- rmDescription = "Removes one or more previously pulled or locally created images."
- rmCmd = &cobra.Command{
- Use: "rm [flags] IMAGE [IMAGE...]",
- Short: "Removes one or more images from local storage",
- Long: rmDescription,
- PreRunE: preRunE,
- RunE: rm,
- Example: `podman image rm imageID
- podman image rm --force alpine
- podman image rm c4dfb1609ee2 93fd78260bd1 c0ed59d05ff7`,
- }
-
- imageOpts = entities.ImageDeleteOptions{}
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: rmCmd,
- Parent: imageCmd,
- })
-
- flags := rmCmd.Flags()
- flags.BoolVarP(&imageOpts.All, "all", "a", false, "Remove all images")
- flags.BoolVarP(&imageOpts.Force, "force", "f", false, "Force Removal of the image")
-}
-
-func rm(cmd *cobra.Command, args []string) error {
-
- if len(args) < 1 && !imageOpts.All {
- return errors.Errorf("image name or ID must be specified")
- }
- if len(args) > 0 && imageOpts.All {
- return errors.Errorf("when using the --all switch, you may not pass any images names or IDs")
- }
-
- report, err := registry.ImageEngine().Delete(registry.GetContext(), args, imageOpts)
- if err != nil {
- switch {
- case report != nil && report.ImageNotFound != nil:
- fmt.Fprintln(os.Stderr, err.Error())
- registry.SetExitCode(2)
- case report != nil && report.ImageInUse != nil:
- fmt.Fprintln(os.Stderr, err.Error())
- default:
- return err
- }
- }
-
- for _, u := range report.Untagged {
- fmt.Println("Untagged: " + u)
- }
- for _, d := range report.Deleted {
- fmt.Println("Deleted: " + d)
- }
- return nil
-}
diff --git a/cmd/podmanV2/images/rmi.go b/cmd/podmanV2/images/rmi.go
deleted file mode 100644
index 7f9297bc9..000000000
--- a/cmd/podmanV2/images/rmi.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package images
-
-import (
- "strings"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- rmiCmd = &cobra.Command{
- Use: strings.Replace(rmCmd.Use, "rm ", "rmi ", 1),
- Args: rmCmd.Args,
- Short: rmCmd.Short,
- Long: rmCmd.Long,
- PreRunE: rmCmd.PreRunE,
- RunE: rmCmd.RunE,
- Example: strings.Replace(rmCmd.Example, "podman image rm", "podman rmi", -1),
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: rmiCmd,
- })
- rmiCmd.SetHelpTemplate(registry.HelpTemplate())
- rmiCmd.SetUsageTemplate(registry.UsageTemplate())
-}
diff --git a/cmd/podmanV2/images/tag.go b/cmd/podmanV2/images/tag.go
deleted file mode 100644
index f66fe7857..000000000
--- a/cmd/podmanV2/images/tag.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package images
-
-import (
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- tagDescription = "Adds one or more additional names to locally-stored image."
- tagCommand = &cobra.Command{
- Use: "tag [flags] IMAGE TARGET_NAME [TARGET_NAME...]",
- Short: "Add an additional name to a local image",
- Long: tagDescription,
- RunE: tag,
- Args: cobra.MinimumNArgs(2),
- Example: `podman tag 0e3bbc2 fedora:latest
- podman tag imageID:latest myNewImage:newTag
- podman tag httpd myregistryhost:5000/fedora/httpd:v2`,
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: tagCommand,
- })
- tagCommand.SetHelpTemplate(registry.HelpTemplate())
- tagCommand.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func tag(cmd *cobra.Command, args []string) error {
- return registry.ImageEngine().Tag(registry.GetContext(), args[0], args[1:], entities.ImageTagOptions{})
-}
diff --git a/cmd/podmanV2/images/untag.go b/cmd/podmanV2/images/untag.go
deleted file mode 100644
index c84827bb3..000000000
--- a/cmd/podmanV2/images/untag.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package images
-
-import (
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- untagCommand = &cobra.Command{
- Use: "untag [flags] IMAGE [NAME...]",
- Short: "Remove a name from a local image",
- Long: "Removes one or more names from a locally-stored image.",
- RunE: untag,
- Args: cobra.MinimumNArgs(1),
- Example: `podman untag 0e3bbc2
- podman untag imageID:latest otherImageName:latest
- podman untag httpd myregistryhost:5000/fedora/httpd:v2`,
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: untagCommand,
- })
- untagCommand.SetHelpTemplate(registry.HelpTemplate())
- untagCommand.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func untag(cmd *cobra.Command, args []string) error {
- return registry.ImageEngine().Untag(registry.GetContext(), args[0], args[1:], entities.ImageUntagOptions{})
-}
diff --git a/cmd/podmanV2/inspect.go b/cmd/podmanV2/inspect.go
deleted file mode 100644
index 4975cf632..000000000
--- a/cmd/podmanV2/inspect.go
+++ /dev/null
@@ -1,62 +0,0 @@
-package main
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/common"
- "github.com/containers/libpod/cmd/podmanV2/containers"
- "github.com/containers/libpod/cmd/podmanV2/images"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-// Inspect is one of the out layer commands in that it operates on images/containers/...
-
-var (
- inspectOpts *entities.InspectOptions
-
- // Command: podman _inspect_ Object_ID
- inspectCmd = &cobra.Command{
- Use: "inspect [flags] {CONTAINER_ID | IMAGE_ID}",
- Args: cobra.ExactArgs(1),
- Short: "Display the configuration of object denoted by ID",
- Long: "Displays the low-level information on an object identified by name or ID",
- TraverseChildren: true,
- RunE: inspect,
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: inspectCmd,
- })
- inspectOpts = common.AddInspectFlagSet(inspectCmd)
-}
-
-func inspect(cmd *cobra.Command, args []string) error {
- ie, err := registry.NewImageEngine(cmd, args)
- if err != nil {
- return err
- }
-
- if found, err := ie.Exists(context.Background(), args[0]); err != nil {
- return err
- } else if found.Value {
- return images.Inspect(cmd, args, inspectOpts)
- }
-
- ce, err := registry.NewContainerEngine(cmd, args)
- if err != nil {
- return err
- }
-
- if found, err := ce.ContainerExists(context.Background(), args[0]); err != nil {
- return err
- } else if found.Value {
- return containers.Inspect(cmd, args, inspectOpts)
- }
- return fmt.Errorf("%s not found on system", args[0])
-}
diff --git a/cmd/podmanV2/main.go b/cmd/podmanV2/main.go
deleted file mode 100644
index 6781a7f06..000000000
--- a/cmd/podmanV2/main.go
+++ /dev/null
@@ -1,86 +0,0 @@
-package main
-
-import (
- "os"
- "reflect"
- "runtime"
- "strings"
-
- _ "github.com/containers/libpod/cmd/podmanV2/containers"
- _ "github.com/containers/libpod/cmd/podmanV2/healthcheck"
- _ "github.com/containers/libpod/cmd/podmanV2/images"
- _ "github.com/containers/libpod/cmd/podmanV2/networks"
- _ "github.com/containers/libpod/cmd/podmanV2/pods"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- _ "github.com/containers/libpod/cmd/podmanV2/volumes"
- "github.com/containers/libpod/libpod"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/containers/storage/pkg/reexec"
- "github.com/sirupsen/logrus"
-)
-
-func init() {
- if err := libpod.SetXdgDirs(); err != nil {
- logrus.Errorf(err.Error())
- os.Exit(1)
- }
-
- switch runtime.GOOS {
- case "darwin":
- fallthrough
- case "windows":
- registry.EngineOptions.EngineMode = entities.TunnelMode
- case "linux":
- registry.EngineOptions.EngineMode = entities.ABIMode
- default:
- logrus.Errorf("%s is not a supported OS", runtime.GOOS)
- os.Exit(1)
- }
-
- // TODO: Is there a Cobra way to "peek" at os.Args?
- for _, v := range os.Args {
- if strings.HasPrefix(v, "--remote") {
- registry.EngineOptions.EngineMode = entities.TunnelMode
- }
- }
-}
-
-func main() {
- if reexec.Init() {
- // We were invoked with a different argv[0] indicating that we
- // had a specific job to do as a subprocess, and it's done.
- return
- }
- for _, c := range registry.Commands {
- if Contains(registry.EngineOptions.EngineMode, c.Mode) {
- parent := rootCmd
- if c.Parent != nil {
- parent = c.Parent
- }
- parent.AddCommand(c.Command)
- }
- }
-
- Execute()
- os.Exit(0)
-}
-
-func Contains(item interface{}, slice interface{}) bool {
- s := reflect.ValueOf(slice)
-
- switch s.Kind() {
- case reflect.Array:
- fallthrough
- case reflect.Slice:
- break
- default:
- return false
- }
-
- for i := 0; i < s.Len(); i++ {
- if s.Index(i).Interface() == item {
- return true
- }
- }
- return false
-}
diff --git a/cmd/podmanV2/networks/network.go b/cmd/podmanV2/networks/network.go
deleted file mode 100644
index fc92d2321..000000000
--- a/cmd/podmanV2/networks/network.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package images
-
-import (
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- // Command: podman _network_
- cmd = &cobra.Command{
- Use: "network",
- Short: "Manage networks",
- Long: "Manage networks",
- TraverseChildren: true,
- PersistentPreRunE: preRunE,
- RunE: registry.SubCommandExists,
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode},
- Command: cmd,
- })
- cmd.SetHelpTemplate(registry.HelpTemplate())
- cmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
- _, err := registry.NewContainerEngine(cmd, args)
- return err
-}
diff --git a/cmd/podmanV2/parse/parse.go b/cmd/podmanV2/parse/parse.go
deleted file mode 100644
index 10d2146fa..000000000
--- a/cmd/podmanV2/parse/parse.go
+++ /dev/null
@@ -1,233 +0,0 @@
-//nolint
-// most of these validate and parse functions have been taken from projectatomic/docker
-// and modified for cri-o
-package parse
-
-import (
- "bufio"
- "fmt"
- "net"
- "net/url"
- "os"
- "regexp"
- "strings"
-
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-const (
- Protocol_TCP Protocol = 0
- Protocol_UDP Protocol = 1
-)
-
-type Protocol int32
-
-// PortMapping specifies the port mapping configurations of a sandbox.
-type PortMapping struct {
- // Protocol of the port mapping.
- Protocol Protocol `protobuf:"varint,1,opt,name=protocol,proto3,enum=runtime.Protocol" json:"protocol,omitempty"`
- // Port number within the container. Default: 0 (not specified).
- ContainerPort int32 `protobuf:"varint,2,opt,name=container_port,json=containerPort,proto3" json:"container_port,omitempty"`
- // Port number on the host. Default: 0 (not specified).
- HostPort int32 `protobuf:"varint,3,opt,name=host_port,json=hostPort,proto3" json:"host_port,omitempty"`
- // Host IP.
- HostIp string `protobuf:"bytes,4,opt,name=host_ip,json=hostIp,proto3" json:"host_ip,omitempty"`
-}
-
-// Note: for flags that are in the form <number><unit>, use the RAMInBytes function
-// from the units package in docker/go-units/size.go
-
-var (
- whiteSpaces = " \t"
- alphaRegexp = regexp.MustCompile(`[a-zA-Z]`)
- domainRegexp = regexp.MustCompile(`^(:?(:?[a-zA-Z0-9]|(:?[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]))(:?\.(:?[a-zA-Z0-9]|(:?[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])))*)\.?\s*$`)
-)
-
-// validateExtraHost validates that the specified string is a valid extrahost and returns it.
-// ExtraHost is in the form of name:ip where the ip has to be a valid ip (ipv4 or ipv6).
-// for add-host flag
-func ValidateExtraHost(val string) (string, error) { //nolint
- // allow for IPv6 addresses in extra hosts by only splitting on first ":"
- arr := strings.SplitN(val, ":", 2)
- if len(arr) != 2 || len(arr[0]) == 0 {
- return "", fmt.Errorf("bad format for add-host: %q", val)
- }
- if _, err := validateIPAddress(arr[1]); err != nil {
- return "", fmt.Errorf("invalid IP address in add-host: %q", arr[1])
- }
- return val, nil
-}
-
-// validateIPAddress validates an Ip address.
-// for dns, ip, and ip6 flags also
-func validateIPAddress(val string) (string, error) {
- var ip = net.ParseIP(strings.TrimSpace(val))
- if ip != nil {
- return ip.String(), nil
- }
- return "", fmt.Errorf("%s is not an ip address", val)
-}
-
-func ValidateDomain(val string) (string, error) {
- if alphaRegexp.FindString(val) == "" {
- return "", fmt.Errorf("%s is not a valid domain", val)
- }
- ns := domainRegexp.FindSubmatch([]byte(val))
- if len(ns) > 0 && len(ns[1]) < 255 {
- return string(ns[1]), nil
- }
- return "", fmt.Errorf("%s is not a valid domain", val)
-}
-
-// GetAllLabels retrieves all labels given a potential label file and a number
-// of labels provided from the command line.
-func GetAllLabels(labelFile, inputLabels []string) (map[string]string, error) {
- labels := make(map[string]string)
- for _, file := range labelFile {
- // Use of parseEnvFile still seems safe, as it's missing the
- // extra parsing logic of parseEnv.
- // There's an argument that we SHOULD be doing that parsing for
- // all environment variables, even those sourced from files, but
- // that would require a substantial rework.
- if err := parseEnvFile(labels, file); err != nil {
- // FIXME: parseEnvFile is using parseEnv, so we need to add extra
- // logic for labels.
- return nil, err
- }
- }
- for _, label := range inputLabels {
- split := strings.SplitN(label, "=", 2)
- if split[0] == "" {
- return nil, errors.Errorf("invalid label format: %q", label)
- }
- value := ""
- if len(split) > 1 {
- value = split[1]
- }
- labels[split[0]] = value
- }
- return labels, nil
-}
-
-func parseEnv(env map[string]string, line string) error {
- data := strings.SplitN(line, "=", 2)
-
- // catch invalid variables such as "=" or "=A"
- if data[0] == "" {
- return errors.Errorf("invalid environment variable: %q", line)
- }
-
- // trim the front of a variable, but nothing else
- name := strings.TrimLeft(data[0], whiteSpaces)
- if strings.ContainsAny(name, whiteSpaces) {
- return errors.Errorf("name %q has white spaces, poorly formatted name", name)
- }
-
- if len(data) > 1 {
- env[name] = data[1]
- } else {
- if strings.HasSuffix(name, "*") {
- name = strings.TrimSuffix(name, "*")
- for _, e := range os.Environ() {
- part := strings.SplitN(e, "=", 2)
- if len(part) < 2 {
- continue
- }
- if strings.HasPrefix(part[0], name) {
- env[part[0]] = part[1]
- }
- }
- } else {
- // if only a pass-through variable is given, clean it up.
- if val, ok := os.LookupEnv(name); ok {
- env[name] = val
- }
- }
- }
- return nil
-}
-
-// parseEnvFile reads a file with environment variables enumerated by lines
-func parseEnvFile(env map[string]string, filename string) error {
- fh, err := os.Open(filename)
- if err != nil {
- return err
- }
- defer fh.Close()
-
- scanner := bufio.NewScanner(fh)
- for scanner.Scan() {
- // trim the line from all leading whitespace first
- line := strings.TrimLeft(scanner.Text(), whiteSpaces)
- // line is not empty, and not starting with '#'
- if len(line) > 0 && !strings.HasPrefix(line, "#") {
- if err := parseEnv(env, line); err != nil {
- return err
- }
- }
- }
- return scanner.Err()
-}
-
-// ValidateFileName returns an error if filename contains ":"
-// as it is currently not supported
-func ValidateFileName(filename string) error {
- if strings.Contains(filename, ":") {
- return errors.Errorf("invalid filename (should not contain ':') %q", filename)
- }
- return nil
-}
-
-// ValidURL checks a string urlStr is a url or not
-func ValidURL(urlStr string) error {
- _, err := url.ParseRequestURI(urlStr)
- if err != nil {
- return errors.Wrapf(err, "invalid url path: %q", urlStr)
- }
- return nil
-}
-
-// checkAllLatestAndCIDFile checks that --all and --latest are used correctly.
-// If cidfile is set, also check for the --cidfile flag.
-func CheckAllLatestAndCIDFile(c *cobra.Command, args []string, ignoreArgLen bool, cidfile bool) error {
- argLen := len(args)
- if c.Flags().Lookup("all") == nil || c.Flags().Lookup("latest") == nil {
- if !cidfile {
- return errors.New("unable to lookup values for 'latest' or 'all'")
- } else if c.Flags().Lookup("cidfile") == nil {
- return errors.New("unable to lookup values for 'latest', 'all' or 'cidfile'")
- }
- }
-
- specifiedAll, _ := c.Flags().GetBool("all")
- specifiedLatest, _ := c.Flags().GetBool("latest")
- specifiedCIDFile := false
- if cid, _ := c.Flags().GetStringArray("cidfile"); len(cid) > 0 {
- specifiedCIDFile = true
- }
-
- if specifiedCIDFile && (specifiedAll || specifiedLatest) {
- return errors.Errorf("--all, --latest and --cidfile cannot be used together")
- } else if specifiedAll && specifiedLatest {
- return errors.Errorf("--all and --latest cannot be used together")
- }
-
- if ignoreArgLen {
- return nil
- }
- if (argLen > 0) && (specifiedAll || specifiedLatest) {
- return errors.Errorf("no arguments are needed with --all or --latest")
- } else if cidfile && (argLen > 0) && (specifiedAll || specifiedLatest || specifiedCIDFile) {
- return errors.Errorf("no arguments are needed with --all, --latest or --cidfile")
- }
-
- if specifiedCIDFile {
- return nil
- }
-
- if argLen < 1 && !specifiedAll && !specifiedLatest && !specifiedCIDFile {
- return errors.Errorf("you must provide at least one name or id")
- }
- return nil
-}
diff --git a/cmd/podmanV2/parse/parse_test.go b/cmd/podmanV2/parse/parse_test.go
deleted file mode 100644
index a6ddc2be9..000000000
--- a/cmd/podmanV2/parse/parse_test.go
+++ /dev/null
@@ -1,152 +0,0 @@
-//nolint
-// most of these validate and parse functions have been taken from projectatomic/docker
-// and modified for cri-o
-package parse
-
-import (
- "io/ioutil"
- "os"
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-var (
- Var1 = []string{"ONE=1", "TWO=2"}
-)
-
-func createTmpFile(content []byte) (string, error) {
- tmpfile, err := ioutil.TempFile(os.TempDir(), "unittest")
- if err != nil {
- return "", err
- }
-
- if _, err := tmpfile.Write(content); err != nil {
- return "", err
-
- }
- if err := tmpfile.Close(); err != nil {
- return "", err
- }
- return tmpfile.Name(), nil
-}
-
-func TestValidateExtraHost(t *testing.T) {
- type args struct {
- val string
- }
- tests := []struct {
- name string
- args args
- want string
- wantErr bool
- }{
- //2001:0db8:85a3:0000:0000:8a2e:0370:7334
- {name: "good-ipv4", args: args{val: "foobar:192.168.1.1"}, want: "foobar:192.168.1.1", wantErr: false},
- {name: "bad-ipv4", args: args{val: "foobar:999.999.999.99"}, want: "", wantErr: true},
- {name: "bad-ipv4", args: args{val: "foobar:999.999.999"}, want: "", wantErr: true},
- {name: "noname-ipv4", args: args{val: "192.168.1.1"}, want: "", wantErr: true},
- {name: "noname-ipv4", args: args{val: ":192.168.1.1"}, want: "", wantErr: true},
- {name: "noip", args: args{val: "foobar:"}, want: "", wantErr: true},
- {name: "noip", args: args{val: "foobar"}, want: "", wantErr: true},
- {name: "good-ipv6", args: args{val: "foobar:2001:0db8:85a3:0000:0000:8a2e:0370:7334"}, want: "foobar:2001:0db8:85a3:0000:0000:8a2e:0370:7334", wantErr: false},
- {name: "bad-ipv6", args: args{val: "foobar:0db8:85a3:0000:0000:8a2e:0370:7334"}, want: "", wantErr: true},
- {name: "bad-ipv6", args: args{val: "foobar:0db8:85a3:0000:0000:8a2e:0370:7334.0000.0000.000"}, want: "", wantErr: true},
- {name: "noname-ipv6", args: args{val: "2001:0db8:85a3:0000:0000:8a2e:0370:7334"}, want: "", wantErr: true},
- {name: "noname-ipv6", args: args{val: ":2001:0db8:85a3:0000:0000:8a2e:0370:7334"}, want: "", wantErr: true},
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- got, err := ValidateExtraHost(tt.args.val)
- if (err != nil) != tt.wantErr {
- t.Errorf("ValidateExtraHost() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- if got != tt.want {
- t.Errorf("ValidateExtraHost() = %v, want %v", got, tt.want)
- }
- })
- }
-}
-
-func Test_validateIPAddress(t *testing.T) {
- type args struct {
- val string
- }
- tests := []struct {
- name string
- args args
- want string
- wantErr bool
- }{
- {name: "ipv4-good", args: args{val: "192.168.1.1"}, want: "192.168.1.1", wantErr: false},
- {name: "ipv4-bad", args: args{val: "192.168.1.1.1"}, want: "", wantErr: true},
- {name: "ipv4-bad", args: args{val: "192."}, want: "", wantErr: true},
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- got, err := validateIPAddress(tt.args.val)
- if (err != nil) != tt.wantErr {
- t.Errorf("validateIPAddress() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- if got != tt.want {
- t.Errorf("validateIPAddress() = %v, want %v", got, tt.want)
- }
- })
- }
-}
-
-func TestValidateFileName(t *testing.T) {
- type args struct {
- filename string
- }
- tests := []struct {
- name string
- args args
- wantErr bool
- }{
- {name: "good", args: args{filename: "/some/rand/path"}, wantErr: false},
- {name: "good", args: args{filename: "some/rand/path"}, wantErr: false},
- {name: "good", args: args{filename: "/"}, wantErr: false},
- {name: "bad", args: args{filename: "/:"}, wantErr: true},
- {name: "bad", args: args{filename: ":/"}, wantErr: true},
- {name: "bad", args: args{filename: "/some/rand:/path"}, wantErr: true},
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if err := ValidateFileName(tt.args.filename); (err != nil) != tt.wantErr {
- t.Errorf("ValidateFileName() error = %v, wantErr %v", err, tt.wantErr)
- }
- })
- }
-}
-
-func TestGetAllLabels(t *testing.T) {
- fileLabels := []string{}
- labels, _ := GetAllLabels(fileLabels, Var1)
- assert.Equal(t, len(labels), 2)
-}
-
-func TestGetAllLabelsBadKeyValue(t *testing.T) {
- inLabels := []string{"=badValue", "="}
- fileLabels := []string{}
- _, err := GetAllLabels(fileLabels, inLabels)
- assert.Error(t, err, assert.AnError)
-}
-
-func TestGetAllLabelsBadLabelFile(t *testing.T) {
- fileLabels := []string{"/foobar5001/be"}
- _, err := GetAllLabels(fileLabels, Var1)
- assert.Error(t, err, assert.AnError)
-}
-
-func TestGetAllLabelsFile(t *testing.T) {
- content := []byte("THREE=3")
- tFile, err := createTmpFile(content)
- defer os.Remove(tFile)
- assert.NoError(t, err)
- fileLabels := []string{tFile}
- result, _ := GetAllLabels(fileLabels, Var1)
- assert.Equal(t, len(result), 3)
-}
diff --git a/cmd/podmanV2/pods/create.go b/cmd/podmanV2/pods/create.go
deleted file mode 100644
index ab8957ee3..000000000
--- a/cmd/podmanV2/pods/create.go
+++ /dev/null
@@ -1,132 +0,0 @@
-package pods
-
-import (
- "context"
- "fmt"
- "os"
- "strings"
-
- "github.com/containers/libpod/cmd/podmanV2/common"
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/libpod/define"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/containers/libpod/pkg/errorhandling"
- "github.com/containers/libpod/pkg/specgen"
- "github.com/containers/libpod/pkg/util"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- podCreateDescription = `After creating the pod, the pod ID is printed to stdout.
-
- You can then start it at any time with the podman pod start <pod_id> command. The pod will be created with the initial state 'created'.`
-
- createCommand = &cobra.Command{
- Use: "create",
- Args: cobra.NoArgs,
- Short: "Create a new empty pod",
- Long: podCreateDescription,
- RunE: create,
- }
-)
-
-var (
- createOptions entities.PodCreateOptions
- labels, labelFile []string
- podIDFile string
- share string
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: createCommand,
- Parent: podCmd,
- })
- flags := createCommand.Flags()
- flags.SetInterspersed(false)
- flags.AddFlagSet(common.GetNetFlags())
- flags.StringVar(&createOptions.CGroupParent, "cgroup-parent", "", "Set parent cgroup for the pod")
- flags.BoolVar(&createOptions.Infra, "infra", true, "Create an infra container associated with the pod to share namespaces with")
- flags.StringVar(&createOptions.InfraImage, "infra-image", define.DefaultInfraImage, "The image of the infra container to associate with the pod")
- flags.StringVar(&createOptions.InfraCommand, "infra-command", define.DefaultInfraCommand, "The command to run on the infra container when the pod is started")
- flags.StringSliceVar(&labelFile, "label-file", []string{}, "Read in a line delimited file of labels")
- flags.StringSliceVarP(&labels, "label", "l", []string{}, "Set metadata on pod (default [])")
- flags.StringVarP(&createOptions.Name, "name", "n", "", "Assign a name to the pod")
- flags.StringVarP(&createOptions.Hostname, "hostname", "", "", "Set a hostname to the pod")
- flags.StringVar(&podIDFile, "pod-id-file", "", "Write the pod ID to the file")
- flags.StringVar(&share, "share", common.DefaultKernelNamespaces, "A comma delimited list of kernel namespaces the pod will share")
-}
-
-func create(cmd *cobra.Command, args []string) error {
- var (
- err error
- podIdFile *os.File
- )
- createOptions.Labels, err = parse.GetAllLabels(labelFile, labels)
- if err != nil {
- return errors.Wrapf(err, "unable to process labels")
- }
-
- if !createOptions.Infra && cmd.Flag("share").Changed && share != "none" && share != "" {
- return errors.Errorf("You cannot share kernel namespaces on the pod level without an infra container")
- }
- createOptions.Share = strings.Split(share, ",")
- if cmd.Flag("pod-id-file").Changed {
- podIdFile, err = util.OpenExclusiveFile(podIDFile)
- if err != nil && os.IsExist(err) {
- return errors.Errorf("pod id file exists. Ensure another pod is not using it or delete %s", podIDFile)
- }
- if err != nil {
- return errors.Errorf("error opening pod-id-file %s", podIDFile)
- }
- defer errorhandling.CloseQuiet(podIdFile)
- defer errorhandling.SyncQuiet(podIdFile)
- }
-
- createOptions.Net, err = common.NetFlagsToNetOptions(cmd)
- if err != nil {
- return err
- }
- netInput, err := cmd.Flags().GetString("network")
- if err != nil {
- return err
- }
- n := specgen.Namespace{}
- switch netInput {
- case "bridge":
- n.NSMode = specgen.Bridge
- case "host":
- n.NSMode = specgen.Host
- case "slip4netns":
- n.NSMode = specgen.Slirp
- default:
- if strings.HasPrefix(netInput, "container:") { //nolint
- split := strings.Split(netInput, ":")
- if len(split) != 2 {
- return errors.Errorf("invalid network paramater: %q", netInput)
- }
- n.NSMode = specgen.FromContainer
- n.Value = split[1]
- } else if strings.HasPrefix(netInput, "ns:") {
- return errors.New("the ns: network option is not supported for pods")
- } else {
- n.NSMode = specgen.Bridge
- createOptions.Net.CNINetworks = strings.Split(netInput, ",")
- }
- }
- if len(createOptions.Net.PublishPorts) > 0 {
- if !createOptions.Infra {
- return errors.Errorf("you must have an infra container to publish port bindings to the host")
- }
- }
-
- response, err := registry.ContainerEngine().PodCreate(context.Background(), createOptions)
- if err != nil {
- return err
- }
- fmt.Println(response.Id)
- return nil
-}
diff --git a/cmd/podmanV2/pods/exists.go b/cmd/podmanV2/pods/exists.go
deleted file mode 100644
index e37f2ebd7..000000000
--- a/cmd/podmanV2/pods/exists.go
+++ /dev/null
@@ -1,43 +0,0 @@
-package pods
-
-import (
- "context"
- "os"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- podExistsDescription = `If the named pod exists in local storage, podman pod exists exits with 0, otherwise the exit code will be 1.`
-
- existsCommand = &cobra.Command{
- Use: "exists POD",
- Short: "Check if a pod exists in local storage",
- Long: podExistsDescription,
- RunE: exists,
- Args: cobra.ExactArgs(1),
- Example: `podman pod exists podID
- podman pod exists mypod || podman pod create --name mypod`,
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: existsCommand,
- Parent: podCmd,
- })
-}
-
-func exists(cmd *cobra.Command, args []string) error {
- response, err := registry.ContainerEngine().PodExists(context.Background(), args[0])
- if err != nil {
- return err
- }
- if !response.Value {
- os.Exit(1)
- }
- return nil
-}
diff --git a/cmd/podmanV2/pods/kill.go b/cmd/podmanV2/pods/kill.go
deleted file mode 100644
index 06cca916c..000000000
--- a/cmd/podmanV2/pods/kill.go
+++ /dev/null
@@ -1,68 +0,0 @@
-package pods
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- podKillDescription = `Signals are sent to the main process of each container inside the specified pod.
-
- The default signal is SIGKILL, or any signal specified with option --signal.`
- killCommand = &cobra.Command{
- Use: "kill [flags] POD [POD...]",
- Short: "Send the specified signal or SIGKILL to containers in pod",
- Long: podKillDescription,
- RunE: kill,
- Args: func(cmd *cobra.Command, args []string) error {
- return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
- },
- Example: `podman pod kill podID
- podman pod kill --signal TERM mywebserver
- podman pod kill --latest`,
- }
-)
-
-var (
- killOpts entities.PodKillOptions
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: killCommand,
- Parent: podCmd,
- })
- flags := killCommand.Flags()
- flags.BoolVarP(&killOpts.All, "all", "a", false, "Kill all containers in all pods")
- flags.BoolVarP(&killOpts.Latest, "latest", "l", false, "Act on the latest pod podman is aware of")
- flags.StringVarP(&killOpts.Signal, "signal", "s", "KILL", "Signal to send to the containers in the pod")
- if registry.IsRemote() {
- _ = flags.MarkHidden("latest")
- }
-
-}
-func kill(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- responses, err := registry.ContainerEngine().PodKill(context.Background(), args, killOpts)
- if err != nil {
- return err
- }
- // in the cli, first we print out all the successful attempts
- for _, r := range responses {
- if len(r.Errs) == 0 {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Errs...)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/pods/pause.go b/cmd/podmanV2/pods/pause.go
deleted file mode 100644
index dc86e534d..000000000
--- a/cmd/podmanV2/pods/pause.go
+++ /dev/null
@@ -1,66 +0,0 @@
-package pods
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- podPauseDescription = `The pod name or ID can be used.
-
- All running containers within each specified pod will then be paused.`
- pauseCommand = &cobra.Command{
- Use: "pause [flags] POD [POD...]",
- Short: "Pause one or more pods",
- Long: podPauseDescription,
- RunE: pause,
- Args: func(cmd *cobra.Command, args []string) error {
- return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
- },
- Example: `podman pod pause podID1 podID2
- podman pod pause --latest
- podman pod pause --all`,
- }
-)
-
-var (
- pauseOptions entities.PodPauseOptions
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: pauseCommand,
- Parent: podCmd,
- })
- flags := pauseCommand.Flags()
- flags.BoolVarP(&pauseOptions.All, "all", "a", false, "Pause all running pods")
- flags.BoolVarP(&pauseOptions.Latest, "latest", "l", false, "Act on the latest pod podman is aware of")
- if registry.IsRemote() {
- _ = flags.MarkHidden("latest")
- }
-}
-func pause(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- responses, err := registry.ContainerEngine().PodPause(context.Background(), args, pauseOptions)
- if err != nil {
- return err
- }
- // in the cli, first we print out all the successful attempts
- for _, r := range responses {
- if len(r.Errs) == 0 {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Errs...)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/pods/pod.go b/cmd/podmanV2/pods/pod.go
deleted file mode 100644
index 3766893bb..000000000
--- a/cmd/podmanV2/pods/pod.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package pods
-
-import (
- "strings"
- "text/template"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- // Command: podman _pod_
- podCmd = &cobra.Command{
- Use: "pod",
- Short: "Manage pods",
- Long: "Manage pods",
- TraverseChildren: true,
- PersistentPreRunE: preRunE,
- RunE: registry.SubCommandExists,
- }
-)
-
-var podFuncMap = template.FuncMap{
- "numCons": func(cons []*entities.ListPodContainer) int {
- return len(cons)
- },
- "podcids": func(cons []*entities.ListPodContainer) string {
- var ctrids []string
- for _, c := range cons {
- ctrids = append(ctrids, c.Id[:12])
- }
- return strings.Join(ctrids, ",")
- },
- "podconnames": func(cons []*entities.ListPodContainer) string {
- var ctrNames []string
- for _, c := range cons {
- ctrNames = append(ctrNames, c.Names[:12])
- }
- return strings.Join(ctrNames, ",")
- },
- "podconstatuses": func(cons []*entities.ListPodContainer) string {
- var statuses []string
- for _, c := range cons {
- statuses = append(statuses, c.Status)
- }
- return strings.Join(statuses, ",")
- },
-}
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: podCmd,
- })
- podCmd.SetHelpTemplate(registry.HelpTemplate())
- podCmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
- _, err := registry.NewContainerEngine(cmd, args)
- return err
-}
diff --git a/cmd/podmanV2/pods/ps.go b/cmd/podmanV2/pods/ps.go
deleted file mode 100644
index 9546dff9e..000000000
--- a/cmd/podmanV2/pods/ps.go
+++ /dev/null
@@ -1,166 +0,0 @@
-package pods
-
-import (
- "context"
- "encoding/json"
- "fmt"
- "io"
- "os"
- "strings"
- "text/tabwriter"
- "text/template"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/report"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- psDescription = "List all pods on system including their names, ids and current state."
-
- // Command: podman pod _ps_
- psCmd = &cobra.Command{
- Use: "ps",
- Aliases: []string{"ls", "list"},
- Short: "list pods",
- Long: psDescription,
- RunE: pods,
- }
-)
-
-var (
- defaultHeaders string = "POD ID\tNAME\tSTATUS\tCREATED"
- inputFilters string
- noTrunc bool
- psInput entities.PodPSOptions
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: psCmd,
- Parent: podCmd,
- })
- flags := psCmd.Flags()
- flags.BoolVar(&psInput.CtrNames, "ctr-names", false, "Display the container names")
- flags.BoolVar(&psInput.CtrIds, "ctr-ids", false, "Display the container UUIDs. If no-trunc is not set they will be truncated")
- flags.BoolVar(&psInput.CtrStatus, "ctr-status", false, "Display the container status")
- // TODO should we make this a [] ?
- flags.StringVarP(&inputFilters, "filter", "f", "", "Filter output based on conditions given")
- flags.StringVar(&psInput.Format, "format", "", "Pretty-print pods to JSON or using a Go template")
- flags.BoolVarP(&psInput.Latest, "latest", "l", false, "Act on the latest pod podman is aware of")
- flags.BoolVar(&psInput.Namespace, "namespace", false, "Display namespace information of the pod")
- flags.BoolVar(&psInput.Namespace, "ns", false, "Display namespace information of the pod")
- flags.BoolVar(&noTrunc, "no-trunc", false, "Do not truncate pod and container IDs")
- flags.BoolVarP(&psInput.Quiet, "quiet", "q", false, "Print the numeric IDs of the pods only")
- flags.StringVar(&psInput.Sort, "sort", "created", "Sort output by created, id, name, or number")
- if registry.IsRemote() {
- _ = flags.MarkHidden("latest")
- }
-}
-
-func pods(cmd *cobra.Command, args []string) error {
- var (
- w io.Writer = os.Stdout
- row string
- )
- if cmd.Flag("filter").Changed {
- for _, f := range strings.Split(inputFilters, ",") {
- split := strings.Split(f, "=")
- if len(split) < 2 {
- return errors.Errorf("filter input must be in the form of filter=value: %s is invalid", f)
- }
- psInput.Filters[split[0]] = append(psInput.Filters[split[0]], split[1])
- }
- }
- responses, err := registry.ContainerEngine().PodPs(context.Background(), psInput)
- if err != nil {
- return err
- }
-
- if psInput.Format == "json" {
- b, err := json.MarshalIndent(responses, "", " ")
- if err != nil {
- return err
- }
- fmt.Println(string(b))
- return nil
- }
- headers, row := createPodPsOut(cmd)
- if psInput.Quiet {
- if noTrunc {
- row = "{{.Id}}\n"
- } else {
- row = "{{slice .Id 0 12}}\n"
- }
- }
- if cmd.Flag("format").Changed {
- row = psInput.Format
- if !strings.HasPrefix(row, "\n") {
- row += "\n"
- }
- }
- format := "{{range . }}" + row + "{{end}}"
- if !psInput.Quiet && !cmd.Flag("format").Changed {
- format = headers + format
- }
- funcs := report.AppendFuncMap(podFuncMap)
- tmpl, err := template.New("listPods").Funcs(funcs).Parse(format)
- if err != nil {
- return err
- }
- if !psInput.Quiet {
- w = tabwriter.NewWriter(os.Stdout, 8, 2, 2, ' ', 0)
- }
- if err := tmpl.Execute(w, responses); err != nil {
- return err
- }
- if flusher, ok := w.(interface{ Flush() error }); ok {
- return flusher.Flush()
- }
- return nil
-}
-
-func createPodPsOut(cmd *cobra.Command) (string, string) {
- var row string
- headers := defaultHeaders
- if noTrunc {
- row += "{{.Id}}"
- } else {
- row += "{{slice .Id 0 12}}"
- }
-
- row += "\t{{.Name}}\t{{.Status}}\t{{humanDurationFromTime .Created}}"
-
- //rowFormat string = "{{slice .Id 0 12}}\t{{.Name}}\t{{.Status}}\t{{humanDurationFromTime .Created}}"
- if psInput.CtrIds {
- headers += "\tIDS"
- row += "\t{{podcids .Containers}}"
- }
- if psInput.CtrNames {
- headers += "\tNAMES"
- row += "\t{{podconnames .Containers}}"
- }
- if psInput.CtrStatus {
- headers += "\tSTATUS"
- row += "\t{{podconstatuses .Containers}}"
- }
- if psInput.Namespace {
- headers += "\tCGROUP\tNAMESPACES"
- row += "\t{{.Cgroup}}\t{{.Namespace}}"
- }
- if !psInput.CtrStatus && !psInput.CtrNames && !psInput.CtrIds {
- headers += "\t# OF CONTAINERS"
- row += "\t{{numCons .Containers}}"
-
- }
- headers += "\tINFRA ID\n"
- if noTrunc {
- row += "\t{{.InfraId}}\n"
- } else {
- row += "\t{{slice .InfraId 0 12}}\n"
- }
- return headers, row
-}
diff --git a/cmd/podmanV2/pods/restart.go b/cmd/podmanV2/pods/restart.go
deleted file mode 100644
index 1c8709704..000000000
--- a/cmd/podmanV2/pods/restart.go
+++ /dev/null
@@ -1,68 +0,0 @@
-package pods
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- podRestartDescription = `The pod ID or name can be used.
-
- All of the containers within each of the specified pods will be restarted. If a container in a pod is not currently running it will be started.`
- restartCommand = &cobra.Command{
- Use: "restart [flags] POD [POD...]",
- Short: "Restart one or more pods",
- Long: podRestartDescription,
- RunE: restart,
- Args: func(cmd *cobra.Command, args []string) error {
- return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
- },
- Example: `podman pod restart podID1 podID2
- podman pod restart --latest
- podman pod restart --all`,
- }
-)
-
-var (
- restartOptions = entities.PodRestartOptions{}
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: restartCommand,
- Parent: podCmd,
- })
-
- flags := restartCommand.Flags()
- flags.BoolVarP(&restartOptions.All, "all", "a", false, "Restart all running pods")
- flags.BoolVarP(&restartOptions.Latest, "latest", "l", false, "Restart the latest pod podman is aware of")
- if registry.IsRemote() {
- _ = flags.MarkHidden("latest")
- }
-}
-
-func restart(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- responses, err := registry.ContainerEngine().PodRestart(context.Background(), args, restartOptions)
- if err != nil {
- return err
- }
- // in the cli, first we print out all the successful attempts
- for _, r := range responses {
- if len(r.Errs) == 0 {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Errs...)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/pods/rm.go b/cmd/podmanV2/pods/rm.go
deleted file mode 100644
index b43dd2d6c..000000000
--- a/cmd/podmanV2/pods/rm.go
+++ /dev/null
@@ -1,71 +0,0 @@
-package pods
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- podRmDescription = fmt.Sprintf(`podman rm will remove one or more stopped pods and their containers from the host.
-
- The pod name or ID can be used. A pod with containers will not be removed without --force. If --force is specified, all containers will be stopped, then removed.`)
- rmCommand = &cobra.Command{
- Use: "rm [flags] POD [POD...]",
- Short: "Remove one or more pods",
- Long: podRmDescription,
- RunE: rm,
- Args: func(cmd *cobra.Command, args []string) error {
- return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
- },
- Example: `podman pod rm mywebserverpod
- podman pod rm -f 860a4b23
- podman pod rm -f -a`,
- }
-)
-
-var (
- rmOptions = entities.PodRmOptions{}
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: rmCommand,
- Parent: podCmd,
- })
-
- flags := rmCommand.Flags()
- flags.BoolVarP(&rmOptions.All, "all", "a", false, "Restart all running pods")
- flags.BoolVarP(&rmOptions.Force, "force", "f", false, "Force removal of a running pod by first stopping all containers, then removing all containers in the pod. The default is false")
- flags.BoolVarP(&rmOptions.Ignore, "ignore", "i", false, "Ignore errors when a specified pod is missing")
- flags.BoolVarP(&rmOptions.Latest, "latest", "l", false, "Restart the latest pod podman is aware of")
- if registry.IsRemote() {
- _ = flags.MarkHidden("latest")
- _ = flags.MarkHidden("ignore")
- }
-}
-
-func rm(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- responses, err := registry.ContainerEngine().PodRm(context.Background(), args, rmOptions)
- if err != nil {
- return err
- }
- // in the cli, first we print out all the successful attempts
- for _, r := range responses {
- if r.Err == nil {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Err)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/pods/start.go b/cmd/podmanV2/pods/start.go
deleted file mode 100644
index 11ac312f9..000000000
--- a/cmd/podmanV2/pods/start.go
+++ /dev/null
@@ -1,68 +0,0 @@
-package pods
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- podStartDescription = `The pod name or ID can be used.
-
- All containers defined in the pod will be started.`
- startCommand = &cobra.Command{
- Use: "start [flags] POD [POD...]",
- Short: "Start one or more pods",
- Long: podStartDescription,
- RunE: start,
- Args: func(cmd *cobra.Command, args []string) error {
- return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
- },
- Example: `podman pod start podID
- podman pod start --latest
- podman pod start --all`,
- }
-)
-
-var (
- startOptions = entities.PodStartOptions{}
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: startCommand,
- Parent: podCmd,
- })
-
- flags := startCommand.Flags()
- flags.BoolVarP(&startOptions.All, "all", "a", false, "Restart all running pods")
- flags.BoolVarP(&startOptions.Latest, "latest", "l", false, "Restart the latest pod podman is aware of")
- if registry.IsRemote() {
- _ = flags.MarkHidden("latest")
- }
-}
-
-func start(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- responses, err := registry.ContainerEngine().PodStart(context.Background(), args, startOptions)
- if err != nil {
- return err
- }
- // in the cli, first we print out all the successful attempts
- for _, r := range responses {
- if len(r.Errs) == 0 {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Errs...)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/pods/stop.go b/cmd/podmanV2/pods/stop.go
deleted file mode 100644
index 403c7d95d..000000000
--- a/cmd/podmanV2/pods/stop.go
+++ /dev/null
@@ -1,79 +0,0 @@
-package pods
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- podStopDescription = `The pod name or ID can be used.
-
- This command will stop all running containers in each of the specified pods.`
-
- stopCommand = &cobra.Command{
- Use: "stop [flags] POD [POD...]",
- Short: "Stop one or more pods",
- Long: podStopDescription,
- RunE: stop,
- Args: func(cmd *cobra.Command, args []string) error {
- return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
- },
- Example: `podman pod stop mywebserverpod
- podman pod stop --latest
- podman pod stop --time 0 490eb 3557fb`,
- }
-)
-
-var (
- stopOptions = entities.PodStopOptions{
- Timeout: -1,
- }
- timeout uint
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: stopCommand,
- Parent: podCmd,
- })
- flags := stopCommand.Flags()
- flags.BoolVarP(&stopOptions.All, "all", "a", false, "Stop all running pods")
- flags.BoolVarP(&stopOptions.Ignore, "ignore", "i", false, "Ignore errors when a specified pod is missing")
- flags.BoolVarP(&stopOptions.Latest, "latest", "l", false, "Stop the latest pod podman is aware of")
- flags.UintVarP(&timeout, "time", "t", 0, "Seconds to wait for pod stop before killing the container")
- if registry.IsRemote() {
- _ = flags.MarkHidden("latest")
- _ = flags.MarkHidden("ignore")
-
- }
- flags.SetNormalizeFunc(utils.AliasFlags)
-}
-
-func stop(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- if cmd.Flag("time").Changed {
- stopOptions.Timeout = int(timeout)
- }
- responses, err := registry.ContainerEngine().PodStop(context.Background(), args, stopOptions)
- if err != nil {
- return err
- }
- // in the cli, first we print out all the successful attempts
- for _, r := range responses {
- if len(r.Errs) == 0 {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Errs...)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/pods/top.go b/cmd/podmanV2/pods/top.go
deleted file mode 100644
index 5ef282238..000000000
--- a/cmd/podmanV2/pods/top.go
+++ /dev/null
@@ -1,90 +0,0 @@
-package pods
-
-import (
- "context"
- "fmt"
- "os"
- "strings"
- "text/tabwriter"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/containers/psgo"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- topDescription = fmt.Sprintf(`Specify format descriptors to alter the output.
-
- You may run "podman pod top -l pid pcpu seccomp" to print the process ID, the CPU percentage and the seccomp mode of each process of the latest pod.
- Format Descriptors:
- %s`, strings.Join(psgo.ListDescriptors(), ","))
-
- topOptions = entities.PodTopOptions{}
-
- topCommand = &cobra.Command{
- Use: "top [flags] POD [FORMAT-DESCRIPTORS|ARGS]",
- Short: "Display the running processes in a pod",
- Long: topDescription,
- PersistentPreRunE: preRunE,
- RunE: top,
- Args: cobra.ArbitraryArgs,
- Example: `podman pod top podID
-podman pod top --latest
-podman pod top podID pid seccomp args %C
-podman pod top podID -eo user,pid,comm`,
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: topCommand,
- Parent: podCmd,
- })
-
- topCommand.SetHelpTemplate(registry.HelpTemplate())
- topCommand.SetUsageTemplate(registry.UsageTemplate())
-
- flags := topCommand.Flags()
- flags.SetInterspersed(false)
- flags.BoolVar(&topOptions.ListDescriptors, "list-descriptors", false, "")
- flags.BoolVarP(&topOptions.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
-
- _ = flags.MarkHidden("list-descriptors") // meant only for bash completion
- if registry.IsRemote() {
- _ = flags.MarkHidden("latest")
- }
-}
-
-func top(cmd *cobra.Command, args []string) error {
- if topOptions.ListDescriptors {
- fmt.Println(strings.Join(psgo.ListDescriptors(), "\n"))
- return nil
- }
-
- if len(args) < 1 && !topOptions.Latest {
- return errors.Errorf("you must provide the name or id of a running pod")
- }
-
- if topOptions.Latest {
- topOptions.Descriptors = args
- } else {
- topOptions.NameOrID = args[0]
- topOptions.Descriptors = args[1:]
- }
-
- topResponse, err := registry.ContainerEngine().PodTop(context.Background(), topOptions)
- if err != nil {
- return err
- }
-
- w := tabwriter.NewWriter(os.Stdout, 5, 1, 3, ' ', 0)
- for _, proc := range topResponse.Value {
- if _, err := fmt.Fprintln(w, proc); err != nil {
- return err
- }
- }
- return w.Flush()
-}
diff --git a/cmd/podmanV2/pods/unpause.go b/cmd/podmanV2/pods/unpause.go
deleted file mode 100644
index 2de7b964f..000000000
--- a/cmd/podmanV2/pods/unpause.go
+++ /dev/null
@@ -1,66 +0,0 @@
-package pods
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- podUnpauseDescription = `The podman unpause command will unpause all "paused" containers assigned to the pod.
-
- The pod name or ID can be used.`
- unpauseCommand = &cobra.Command{
- Use: "unpause [flags] POD [POD...]",
- Short: "Unpause one or more pods",
- Long: podUnpauseDescription,
- RunE: unpause,
- Args: func(cmd *cobra.Command, args []string) error {
- return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
- },
- Example: `podman pod unpause podID1 podID2
- podman pod unpause --all
- podman pod unpause --latest`,
- }
-)
-
-var (
- unpauseOptions entities.PodunpauseOptions
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: unpauseCommand,
- Parent: podCmd,
- })
- flags := unpauseCommand.Flags()
- flags.BoolVarP(&unpauseOptions.All, "all", "a", false, "Pause all running pods")
- flags.BoolVarP(&unpauseOptions.Latest, "latest", "l", false, "Act on the latest pod podman is aware of")
- if registry.IsRemote() {
- _ = flags.MarkHidden("latest")
- }
-}
-func unpause(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- responses, err := registry.ContainerEngine().PodUnpause(context.Background(), args, unpauseOptions)
- if err != nil {
- return err
- }
- // in the cli, first we print out all the successful attempts
- for _, r := range responses {
- if len(r.Errs) == 0 {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Errs...)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/registry/registry.go b/cmd/podmanV2/registry/registry.go
deleted file mode 100644
index 401f82718..000000000
--- a/cmd/podmanV2/registry/registry.go
+++ /dev/null
@@ -1,136 +0,0 @@
-package registry
-
-import (
- "context"
-
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/containers/libpod/pkg/domain/infra"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-type CobraFuncs func(cmd *cobra.Command, args []string) error
-
-type CliCommand struct {
- Mode []entities.EngineMode
- Command *cobra.Command
- Parent *cobra.Command
-}
-
-const ExecErrorCodeGeneric = 125
-
-var (
- cliCtx context.Context
- containerEngine entities.ContainerEngine
- exitCode = ExecErrorCodeGeneric
- imageEngine entities.ImageEngine
-
- Commands []CliCommand
- EngineOptions entities.EngineOptions
-)
-
-func SetExitCode(code int) {
- exitCode = code
-}
-
-func GetExitCode() int {
- return exitCode
-}
-
-// HelpTemplate returns the help template for podman commands
-// This uses the short and long options.
-// command should not use this.
-func HelpTemplate() string {
- return `{{.Short}}
-
-Description:
- {{.Long}}
-
-{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}`
-}
-
-// UsageTemplate returns the usage template for podman commands
-// This blocks the displaying of the global options. The main podman
-// command should not use this.
-func UsageTemplate() string {
- return `Usage(v2):{{if (and .Runnable (not .HasAvailableSubCommands))}}
- {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}
- {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}
-
-Aliases:
- {{.NameAndAliases}}{{end}}{{if .HasExample}}
-
-Examples:
- {{.Example}}{{end}}{{if .HasAvailableSubCommands}}
-
-Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name "help"))}}
- {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}
-
-Flags:
-{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}
-{{end}}
-`
-}
-
-func ImageEngine() entities.ImageEngine {
- return imageEngine
-}
-
-// NewImageEngine is a wrapper for building an ImageEngine to be used for PreRunE functions
-func NewImageEngine(cmd *cobra.Command, args []string) (entities.ImageEngine, error) {
- if imageEngine == nil {
- EngineOptions.FlagSet = cmd.Flags()
- engine, err := infra.NewImageEngine(EngineOptions)
- if err != nil {
- return nil, err
- }
- imageEngine = engine
- }
- return imageEngine, nil
-}
-
-func ContainerEngine() entities.ContainerEngine {
- return containerEngine
-}
-
-// NewContainerEngine is a wrapper for building an ContainerEngine to be used for PreRunE functions
-func NewContainerEngine(cmd *cobra.Command, args []string) (entities.ContainerEngine, error) {
- if containerEngine == nil {
- EngineOptions.FlagSet = cmd.Flags()
- engine, err := infra.NewContainerEngine(EngineOptions)
- if err != nil {
- return nil, err
- }
- containerEngine = engine
- }
- return containerEngine, nil
-}
-
-func SubCommandExists(cmd *cobra.Command, args []string) error {
- if len(args) > 0 {
- return errors.Errorf("unrecognized command `%[1]s %[2]s`\nTry '%[1]s --help' for more information.", cmd.CommandPath(), args[0])
- }
- return errors.Errorf("missing command '%[1]s COMMAND'\nTry '%[1]s --help' for more information.", cmd.CommandPath())
-}
-
-type podmanContextKey string
-
-var podmanFactsKey = podmanContextKey("engineOptions")
-
-func NewOptions(ctx context.Context, facts *entities.EngineOptions) context.Context {
- return context.WithValue(ctx, podmanFactsKey, facts)
-}
-
-func Options(cmd *cobra.Command) (*entities.EngineOptions, error) {
- if f, ok := cmd.Context().Value(podmanFactsKey).(*entities.EngineOptions); ok {
- return f, errors.New("Command Context ")
- }
- return nil, nil
-}
-
-func GetContext() context.Context {
- if cliCtx == nil {
- cliCtx = context.TODO()
- }
- return cliCtx
-}
diff --git a/cmd/podmanV2/registry/remote.go b/cmd/podmanV2/registry/remote.go
deleted file mode 100644
index 32a231ac4..000000000
--- a/cmd/podmanV2/registry/remote.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package registry
-
-import (
- "github.com/containers/libpod/pkg/domain/entities"
-)
-
-func IsRemote() bool {
- return EngineOptions.EngineMode == entities.TunnelMode
-}
diff --git a/cmd/podmanV2/report/templates.go b/cmd/podmanV2/report/templates.go
deleted file mode 100644
index e46048e97..000000000
--- a/cmd/podmanV2/report/templates.go
+++ /dev/null
@@ -1,73 +0,0 @@
-package report
-
-import (
- "strings"
- "text/template"
- "time"
- "unicode"
-
- "github.com/docker/go-units"
-)
-
-var defaultFuncMap = template.FuncMap{
- "ellipsis": func(s string, length int) string {
- if len(s) > length {
- return s[:length-3] + "..."
- }
- return s
- },
- "humanDuration": func(t int64) string {
- return units.HumanDuration(time.Since(time.Unix(t, 0))) + " ago"
- },
- "humanDurationFromTime": func(t time.Time) string {
- return units.HumanDuration(time.Since(t)) + " ago"
- },
- "humanSize": func(sz int64) string {
- s := units.HumanSizeWithPrecision(float64(sz), 3)
- i := strings.LastIndexFunc(s, unicode.IsNumber)
- return s[:i+1] + " " + s[i+1:]
- },
- "join": strings.Join,
- "lower": strings.ToLower,
- "rfc3339": func(t int64) string {
- return time.Unix(t, 0).Format(time.RFC3339)
- },
- "replace": strings.Replace,
- "split": strings.Split,
- "title": strings.Title,
- "upper": strings.ToUpper,
- // TODO: Remove after Go 1.14 port
- "slice": func(s string, i, j int) string {
- if i > j || len(s) < i {
- return s
- }
- if len(s) < j {
- return s[i:]
- }
- return s[i:j]
- },
-}
-
-func ReportHeader(columns ...string) []byte {
- hdr := make([]string, len(columns))
- for i, h := range columns {
- hdr[i] = strings.ToUpper(h)
- }
- return []byte(strings.Join(hdr, "\t") + "\n")
-}
-
-func AppendFuncMap(funcMap template.FuncMap) template.FuncMap {
- merged := PodmanTemplateFuncs()
- for k, v := range funcMap {
- merged[k] = v
- }
- return merged
-}
-
-func PodmanTemplateFuncs() template.FuncMap {
- merged := make(template.FuncMap)
- for k, v := range defaultFuncMap {
- merged[k] = v
- }
- return merged
-}
diff --git a/cmd/podmanV2/root.go b/cmd/podmanV2/root.go
deleted file mode 100644
index 6fc12f57e..000000000
--- a/cmd/podmanV2/root.go
+++ /dev/null
@@ -1,99 +0,0 @@
-package main
-
-import (
- "fmt"
- "log/syslog"
- "os"
- "path"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/containers/libpod/version"
- "github.com/sirupsen/logrus"
- logrusSyslog "github.com/sirupsen/logrus/hooks/syslog"
- "github.com/spf13/cobra"
-)
-
-var (
- rootCmd = &cobra.Command{
- Use: path.Base(os.Args[0]),
- Long: "Manage pods, containers and images",
- SilenceUsage: true,
- SilenceErrors: true,
- TraverseChildren: true,
- PersistentPreRunE: preRunE,
- RunE: registry.SubCommandExists,
- Version: version.Version,
- }
-
- logLevels = entities.NewStringSet("debug", "info", "warn", "error", "fatal", "panic")
- logLevel = "error"
- useSyslog bool
-)
-
-func init() {
- // Override default --help information of `--version` global flag}
- var dummyVersion bool
- // TODO had to disable shorthand -v for version due to -v rm with volume
- rootCmd.PersistentFlags().BoolVar(&dummyVersion, "version", false, "Version of Podman")
- rootCmd.PersistentFlags().StringVarP(&registry.EngineOptions.Uri, "remote", "r", "", "URL to access Podman service")
- rootCmd.PersistentFlags().StringSliceVar(&registry.EngineOptions.Identities, "identity", []string{}, "path to SSH identity file")
- rootCmd.PersistentFlags().StringVar(&logLevel, "log-level", "error", fmt.Sprintf("Log messages above specified level (%s)", logLevels.String()))
- rootCmd.PersistentFlags().BoolVar(&useSyslog, "syslog", false, "Output logging information to syslog as well as the console (default false)")
-
- cobra.OnInitialize(
- logging,
- syslogHook,
- )
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
- cmd.SetHelpTemplate(registry.HelpTemplate())
- cmd.SetUsageTemplate(registry.UsageTemplate())
- return nil
-}
-
-func logging() {
- if !logLevels.Contains(logLevel) {
- fmt.Fprintf(os.Stderr, "Log Level \"%s\" is not supported, choose from: %s\n", logLevel, logLevels.String())
- os.Exit(1)
- }
-
- level, err := logrus.ParseLevel(logLevel)
- if err != nil {
- fmt.Fprintf(os.Stderr, err.Error())
- os.Exit(1)
- }
- logrus.SetLevel(level)
-
- if logrus.IsLevelEnabled(logrus.InfoLevel) {
- logrus.Infof("%s filtering at log level %s", os.Args[0], logrus.GetLevel())
- }
-}
-
-func syslogHook() {
- if useSyslog {
- hook, err := logrusSyslog.NewSyslogHook("", "", syslog.LOG_INFO, "")
- if err != nil {
- logrus.WithError(err).Error("Failed to initialize syslog hook")
- }
- if err == nil {
- logrus.AddHook(hook)
- }
- }
-}
-
-func Execute() {
- o := registry.NewOptions(rootCmd.Context(), &registry.EngineOptions)
- if err := rootCmd.ExecuteContext(o); err != nil {
- fmt.Fprintln(os.Stderr, "Error:", err.Error())
- } else if registry.GetExitCode() == registry.ExecErrorCodeGeneric {
- // The exitCode modified from registry.ExecErrorCodeGeneric,
- // indicates an application
- // running inside of a container failed, as opposed to the
- // podman command failed. Must exit with that exit code
- // otherwise command exited correctly.
- registry.SetExitCode(0)
- }
- os.Exit(registry.GetExitCode())
-}
diff --git a/cmd/podmanV2/system/system.go b/cmd/podmanV2/system/system.go
deleted file mode 100644
index 4e805c7bd..000000000
--- a/cmd/podmanV2/system/system.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package system
-
-import (
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- // Command: podman _system_
- cmd = &cobra.Command{
- Use: "system",
- Short: "Manage podman",
- Long: "Manage podman",
- TraverseChildren: true,
- PersistentPreRunE: preRunE,
- RunE: registry.SubCommandExists,
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: cmd,
- })
- cmd.SetHelpTemplate(registry.HelpTemplate())
- cmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
- _, err := registry.NewContainerEngine(cmd, args)
- return err
-}
diff --git a/cmd/podmanV2/utils/alias.go b/cmd/podmanV2/utils/alias.go
deleted file mode 100644
index 54b3c5e89..000000000
--- a/cmd/podmanV2/utils/alias.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package utils
-
-import "github.com/spf13/pflag"
-
-// AliasFlags is a function to handle backwards compatability with old flags
-func AliasFlags(f *pflag.FlagSet, name string) pflag.NormalizedName {
- switch name {
- case "healthcheck-command":
- name = "health-cmd"
- case "healthcheck-interval":
- name = "health-interval"
- case "healthcheck-retries":
- name = "health-retries"
- case "healthcheck-start-period":
- name = "health-start-period"
- case "healthcheck-timeout":
- name = "health-timeout"
- case "net":
- name = "network"
- case "timeout":
- name = "time"
- }
- return pflag.NormalizedName(name)
-}
diff --git a/cmd/podmanV2/utils/error.go b/cmd/podmanV2/utils/error.go
deleted file mode 100644
index 3464f0779..000000000
--- a/cmd/podmanV2/utils/error.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package utils
-
-import "fmt"
-
-type OutputErrors []error
-
-func (o OutputErrors) PrintErrors() (lastError error) {
- if len(o) == 0 {
- return
- }
- lastError = o[len(o)-1]
- for e := 0; e < len(o)-1; e++ {
- fmt.Println(o[e])
- }
- return
-}
diff --git a/cmd/podmanV2/volumes/create.go b/cmd/podmanV2/volumes/create.go
deleted file mode 100644
index 91181dd03..000000000
--- a/cmd/podmanV2/volumes/create.go
+++ /dev/null
@@ -1,72 +0,0 @@
-package volumes
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/parse"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/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 [flags] [NAME]",
- Short: "Create a new volume",
- Long: createDescription,
- RunE: create,
- 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{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: createCommand,
- Parent: volumeCmd,
- })
- flags := createCommand.Flags()
- flags.StringVar(&createOpts.Driver, "driver", "", "Specify volume driver name (default local)")
- flags.StringSliceVarP(&opts.Label, "label", "l", []string{}, "Set metadata for a volume (default [])")
- flags.StringArrayVarP(&opts.Opts, "opt", "o", []string{}, "Set driver specific options (default [])")
-}
-
-func create(cmd *cobra.Command, args []string) error {
- var (
- err error
- )
- if len(args) > 1 {
- return errors.Errorf("too many arguments, create takes at most 1 argument")
- }
- 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
-}
diff --git a/cmd/podmanV2/volumes/inspect.go b/cmd/podmanV2/volumes/inspect.go
deleted file mode 100644
index 4d9720432..000000000
--- a/cmd/podmanV2/volumes/inspect.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package volumes
-
-import (
- "encoding/json"
- "fmt"
- "html/template"
- "os"
-
- "github.com/containers/buildah/pkg/formats"
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
- "golang.org/x/net/context"
-)
-
-var (
- volumeInspectDescription = `Display detailed information on one or more volumes.
-
- Use a Go template to change the format from JSON.`
- inspectCommand = &cobra.Command{
- Use: "inspect [flags] VOLUME [VOLUME...]",
- Short: "Display detailed information on one or more volumes",
- Long: volumeInspectDescription,
- RunE: inspect,
- Example: `podman volume inspect myvol
- podman volume inspect --all
- podman volume inspect --format "{{.Driver}} {{.Scope}}" myvol`,
- }
-)
-
-var (
- inspectOpts = entities.VolumeInspectOptions{}
- inspectFormat string
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: inspectCommand,
- Parent: volumeCmd,
- })
- flags := inspectCommand.Flags()
- flags.BoolVarP(&inspectOpts.All, "all", "a", false, "Inspect all volumes")
- flags.StringVarP(&inspectFormat, "format", "f", "json", "Format volume output using Go template")
-}
-
-func inspect(cmd *cobra.Command, args []string) error {
- if (inspectOpts.All && len(args) > 0) || (!inspectOpts.All && len(args) < 1) {
- return errors.New("provide one or more volume names or use --all")
- }
- responses, err := registry.ContainerEngine().VolumeInspect(context.Background(), args, inspectOpts)
- if err != nil {
- return err
- }
- switch inspectFormat {
- case "", formats.JSONString:
- jsonOut, err := json.MarshalIndent(responses, "", " ")
- if err != nil {
- return errors.Wrapf(err, "error marshalling inspect JSON")
- }
- fmt.Println(string(jsonOut))
- default:
- tmpl, err := template.New("volumeInspect").Parse(inspectFormat)
- if err != nil {
- return err
- }
- if err := tmpl.Execute(os.Stdout, responses); err != nil {
- return err
- }
- }
- return nil
-
-}
diff --git a/cmd/podmanV2/volumes/list.go b/cmd/podmanV2/volumes/list.go
deleted file mode 100644
index c38f78c73..000000000
--- a/cmd/podmanV2/volumes/list.go
+++ /dev/null
@@ -1,98 +0,0 @@
-package volumes
-
-import (
- "context"
- "html/template"
- "io"
- "os"
- "strings"
- "text/tabwriter"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- volumeLsDescription = `
-podman volume ls
-
-List all available volumes. The output of the volumes can be filtered
-and the output format can be changed to JSON or a user specified Go template.`
- lsCommand = &cobra.Command{
- Use: "ls",
- Aliases: []string{"list"},
- Args: cobra.NoArgs,
- Short: "List volumes",
- Long: volumeLsDescription,
- RunE: list,
- }
-)
-
-var (
- // Temporary struct to hold cli values.
- cliOpts = struct {
- Filter []string
- Format string
- Quiet bool
- }{}
- lsOpts = entities.VolumeListOptions{}
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: lsCommand,
- Parent: volumeCmd,
- })
- flags := lsCommand.Flags()
- flags.StringSliceVarP(&cliOpts.Filter, "filter", "f", []string{}, "Filter volume output")
- flags.StringVar(&cliOpts.Format, "format", "{{.Driver}}\t{{.Name}}\n", "Format volume output using Go template")
- flags.BoolVarP(&cliOpts.Quiet, "quiet", "q", false, "Print volume output in quiet mode")
-}
-
-func list(cmd *cobra.Command, args []string) error {
- var w io.Writer = os.Stdout
- if cliOpts.Quiet && cmd.Flag("format").Changed {
- return errors.New("quiet and format flags cannot be used together")
- }
- for _, f := range cliOpts.Filter {
- filterSplit := strings.Split(f, "=")
- if len(filterSplit) < 2 {
- return errors.Errorf("filter input must be in the form of filter=value: %s is invalid", f)
- }
- lsOpts.Filter[filterSplit[0]] = append(lsOpts.Filter[filterSplit[0]], filterSplit[1:]...)
- }
- responses, err := registry.ContainerEngine().VolumeList(context.Background(), lsOpts)
- if err != nil {
- return err
- }
- // "\t" from the command line is not being recognized as a tab
- // replacing the string "\t" to a tab character if the user passes in "\t"
- cliOpts.Format = strings.Replace(cliOpts.Format, `\t`, "\t", -1)
- if cliOpts.Quiet {
- cliOpts.Format = "{{.Name}}\n"
- }
- headers := "DRIVER\tVOLUME NAME\n"
- row := cliOpts.Format
- if !strings.HasSuffix(cliOpts.Format, "\n") {
- row += "\n"
- }
- format := "{{range . }}" + row + "{{end}}"
- if !cliOpts.Quiet && !cmd.Flag("format").Changed {
- w = tabwriter.NewWriter(os.Stdout, 12, 2, 2, ' ', 0)
- format = headers + format
- }
- tmpl, err := template.New("listVolume").Parse(format)
- if err != nil {
- return err
- }
- if err := tmpl.Execute(w, responses); err != nil {
- return err
- }
- if flusher, ok := w.(interface{ Flush() error }); ok {
- return flusher.Flush()
- }
- return nil
-}
diff --git a/cmd/podmanV2/volumes/prune.go b/cmd/podmanV2/volumes/prune.go
deleted file mode 100644
index 148065f56..000000000
--- a/cmd/podmanV2/volumes/prune.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package volumes
-
-import (
- "bufio"
- "context"
- "fmt"
- "os"
- "strings"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- volumePruneDescription = `Volumes that are not currently owned by a container will be removed.
-
- The command prompts for confirmation which can be overridden with the --force flag.
- Note all data will be destroyed.`
- pruneCommand = &cobra.Command{
- Use: "prune",
- Args: cobra.NoArgs,
- Short: "Remove all unused volumes",
- Long: volumePruneDescription,
- RunE: prune,
- }
-)
-
-var (
- pruneOptions entities.VolumePruneOptions
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: pruneCommand,
- Parent: volumeCmd,
- })
- flags := pruneCommand.Flags()
- flags.BoolVarP(&pruneOptions.Force, "force", "f", false, "Do not prompt for confirmation")
-}
-
-func prune(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- // Prompt for confirmation if --force is not set
- if !pruneOptions.Force {
- reader := bufio.NewReader(os.Stdin)
- fmt.Println("WARNING! This will remove all volumes not used by at least one container.")
- fmt.Print("Are you sure you want to continue? [y/N] ")
- answer, err := reader.ReadString('\n')
- if err != nil {
- return errors.Wrapf(err, "error reading input")
- }
- if strings.ToLower(answer)[0] != 'y' {
- return nil
- }
- }
- responses, err := registry.ContainerEngine().VolumePrune(context.Background(), pruneOptions)
- if err != nil {
- return err
- }
- for _, r := range responses {
- if r.Err == nil {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Err)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/volumes/rm.go b/cmd/podmanV2/volumes/rm.go
deleted file mode 100644
index b019285d8..000000000
--- a/cmd/podmanV2/volumes/rm.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package volumes
-
-import (
- "context"
- "fmt"
-
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/cmd/podmanV2/utils"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
-)
-
-var (
- volumeRmDescription = `Remove one or more existing volumes.
-
- By default only volumes that are not being used by any containers will be removed. To remove the volumes anyways, use the --force flag.`
- rmCommand = &cobra.Command{
- Use: "rm [flags] VOLUME [VOLUME...]",
- Aliases: []string{"remove"},
- Short: "Remove one or more volumes",
- Long: volumeRmDescription,
- RunE: rm,
- Example: `podman volume rm myvol1 myvol2
- podman volume rm --all
- podman volume rm --force myvol`,
- }
-)
-
-var (
- rmOptions = entities.VolumeRmOptions{}
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: rmCommand,
- Parent: volumeCmd,
- })
- flags := rmCommand.Flags()
- flags.BoolVarP(&rmOptions.All, "all", "a", false, "Remove all volumes")
- flags.BoolVarP(&rmOptions.Force, "force", "f", false, "Remove a volume by force, even if it is being used by a container")
-}
-
-func rm(cmd *cobra.Command, args []string) error {
- var (
- errs utils.OutputErrors
- )
- if (len(args) > 0 && rmOptions.All) || (len(args) < 1 && !rmOptions.All) {
- return errors.New("choose either one or more volumes or all")
- }
- responses, err := registry.ContainerEngine().VolumeRm(context.Background(), args, rmOptions)
- if err != nil {
- return err
- }
- for _, r := range responses {
- if r.Err == nil {
- fmt.Println(r.Id)
- } else {
- errs = append(errs, r.Err)
- }
- }
- return errs.PrintErrors()
-}
diff --git a/cmd/podmanV2/volumes/volume.go b/cmd/podmanV2/volumes/volume.go
deleted file mode 100644
index 84abe3d24..000000000
--- a/cmd/podmanV2/volumes/volume.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package volumes
-
-import (
- "github.com/containers/libpod/cmd/podmanV2/registry"
- "github.com/containers/libpod/pkg/domain/entities"
- "github.com/spf13/cobra"
-)
-
-var (
- // Command: podman _volume_
- volumeCmd = &cobra.Command{
- Use: "volume",
- Short: "Manage volumes",
- Long: "Volumes are created in and can be shared between containers",
- TraverseChildren: true,
- PersistentPreRunE: preRunE,
- RunE: registry.SubCommandExists,
- }
-)
-
-func init() {
- registry.Commands = append(registry.Commands, registry.CliCommand{
- Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
- Command: volumeCmd,
- })
- volumeCmd.SetHelpTemplate(registry.HelpTemplate())
- volumeCmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
- _, err := registry.NewContainerEngine(cmd, args)
- return err
-}