summaryrefslogtreecommitdiff
path: root/cmd/podman/main.go
diff options
context:
space:
mode:
authorJhon Honce <jhonce@redhat.com>2021-05-18 11:23:25 -0700
committerJhon Honce <jhonce@redhat.com>2021-05-27 11:40:43 -0700
commit33944cefe7c1f3e11c8389bedb3e4c80af8541bd (patch)
tree594d3da7b2cb2a8620be0afbca2cd27087192326 /cmd/podman/main.go
parent4f4a440afd521913745c314f2bebd0da45d9668e (diff)
downloadpodman-33944cefe7c1f3e11c8389bedb3e4c80af8541bd.tar.gz
podman-33944cefe7c1f3e11c8389bedb3e4c80af8541bd.tar.bz2
podman-33944cefe7c1f3e11c8389bedb3e4c80af8541bd.zip
[Techinal Debt] Cleanup ABI vs. Tunnel CLI commands
[NO TESTS NEEDED] This commit cleans up two issues: * Most commands support all EngineModes so default to that. Let outlayers declare their intent. * Use cobra.Annotations to set supported EngineMode. This simplies instantiating commands as there is now one method to communicate a commands requirements rather than two. * Combined aliased commands into one file * Fixed aliased commands where Args field did not match * Updated examples in README.md for writing commands * Remove redundant flag DisableFlagsInUseLine in cobra.Command initialization. Signed-off-by: Jhon Honce <jhonce@redhat.com>
Diffstat (limited to 'cmd/podman/main.go')
-rw-r--r--cmd/podman/main.go60
1 files changed, 32 insertions, 28 deletions
diff --git a/cmd/podman/main.go b/cmd/podman/main.go
index 5219da26d..b7f5f1720 100644
--- a/cmd/podman/main.go
+++ b/cmd/podman/main.go
@@ -3,6 +3,7 @@ package main
import (
"fmt"
"os"
+ "strings"
_ "github.com/containers/podman/v3/cmd/podman/completion"
_ "github.com/containers/podman/v3/cmd/podman/containers"
@@ -42,38 +43,41 @@ func main() {
func parseCommands() *cobra.Command {
cfg := registry.PodmanConfig()
for _, c := range registry.Commands {
- for _, m := range c.Mode {
- if cfg.EngineMode == m {
- // Command cannot be run rootless
- _, found := c.Command.Annotations[registry.UnshareNSRequired]
- if found {
- if rootless.IsRootless() && found && os.Getuid() != 0 {
- c.Command.RunE = func(cmd *cobra.Command, args []string) error {
- return fmt.Errorf("cannot run command %q in rootless mode, must execute `podman unshare` first", cmd.CommandPath())
- }
- }
- } else {
- _, found = c.Command.Annotations[registry.ParentNSRequired]
- if rootless.IsRootless() && found {
- c.Command.RunE = func(cmd *cobra.Command, args []string) error {
- return fmt.Errorf("cannot run command %q in rootless mode", cmd.CommandPath())
- }
- }
+ if supported, found := c.Command.Annotations[registry.EngineMode]; found {
+ if !strings.Contains(cfg.EngineMode.String(), supported) {
+ continue
+ }
+ }
+
+ // Command cannot be run rootless
+ _, found := c.Command.Annotations[registry.UnshareNSRequired]
+ if found {
+ if rootless.IsRootless() && os.Getuid() != 0 {
+ c.Command.RunE = func(cmd *cobra.Command, args []string) error {
+ return fmt.Errorf("cannot run command %q in rootless mode, must execute `podman unshare` first", cmd.CommandPath())
}
- parent := rootCmd
- if c.Parent != nil {
- parent = c.Parent
+ }
+ } else {
+ _, found = c.Command.Annotations[registry.ParentNSRequired]
+ if rootless.IsRootless() && found {
+ c.Command.RunE = func(cmd *cobra.Command, args []string) error {
+ return fmt.Errorf("cannot run command %q in rootless mode", cmd.CommandPath())
}
- parent.AddCommand(c.Command)
-
- // - templates need to be set here, as PersistentPreRunE() is
- // not called when --help is used.
- // - rootCmd uses cobra default template not ours
- c.Command.SetHelpTemplate(helpTemplate)
- c.Command.SetUsageTemplate(usageTemplate)
- c.Command.DisableFlagsInUseLine = true
}
}
+
+ parent := rootCmd
+ if c.Parent != nil {
+ parent = c.Parent
+ }
+ parent.AddCommand(c.Command)
+
+ // - templates need to be set here, as PersistentPreRunE() is
+ // not called when --help is used.
+ // - rootCmd uses cobra default template not ours
+ c.Command.SetHelpTemplate(helpTemplate)
+ c.Command.SetUsageTemplate(usageTemplate)
+ c.Command.DisableFlagsInUseLine = true
}
if err := terminal.SetConsole(); err != nil {
logrus.Error(err)