From 33944cefe7c1f3e11c8389bedb3e4c80af8541bd Mon Sep 17 00:00:00 2001 From: Jhon Honce Date: Tue, 18 May 2021 11:23:25 -0700 Subject: [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 --- cmd/podman/main.go | 60 +++++++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 28 deletions(-) (limited to 'cmd/podman/main.go') 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) -- cgit v1.2.3-54-g00ecf