mirror of
https://github.com/containers/podman.git
synced 2026-03-13 08:01:19 +08:00
Podman machine will be a mac-only command that manages the VM where containers are run. Currently, only the CLI is written and the interface function for the VM management is stub for future developement The podman machine cli is only built on mac builds. Signed-off-by: Ashley Cui <acui@redhat.com>
85 lines
2.6 KiB
Go
85 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
_ "github.com/containers/podman/v3/cmd/podman/completion"
|
|
_ "github.com/containers/podman/v3/cmd/podman/containers"
|
|
_ "github.com/containers/podman/v3/cmd/podman/generate"
|
|
_ "github.com/containers/podman/v3/cmd/podman/healthcheck"
|
|
_ "github.com/containers/podman/v3/cmd/podman/images"
|
|
_ "github.com/containers/podman/v3/cmd/podman/machine"
|
|
_ "github.com/containers/podman/v3/cmd/podman/manifest"
|
|
_ "github.com/containers/podman/v3/cmd/podman/networks"
|
|
_ "github.com/containers/podman/v3/cmd/podman/play"
|
|
_ "github.com/containers/podman/v3/cmd/podman/pods"
|
|
"github.com/containers/podman/v3/cmd/podman/registry"
|
|
_ "github.com/containers/podman/v3/cmd/podman/secrets"
|
|
_ "github.com/containers/podman/v3/cmd/podman/system"
|
|
_ "github.com/containers/podman/v3/cmd/podman/system/connection"
|
|
_ "github.com/containers/podman/v3/cmd/podman/volumes"
|
|
"github.com/containers/podman/v3/pkg/rootless"
|
|
"github.com/containers/podman/v3/pkg/terminal"
|
|
"github.com/containers/storage/pkg/reexec"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
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
|
|
}
|
|
|
|
rootCmd = parseCommands()
|
|
|
|
Execute()
|
|
os.Exit(0)
|
|
}
|
|
|
|
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())
|
|
}
|
|
}
|
|
}
|
|
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)
|
|
os.Exit(1)
|
|
}
|
|
|
|
return rootCmd
|
|
}
|