89 lines
2.1 KiB
Go
89 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/containers/libpod/cmd/podman/cliconfig"
|
|
"github.com/containers/libpod/pkg/adapter"
|
|
"github.com/containers/libpod/pkg/rootless"
|
|
"github.com/pkg/errors"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
podDescription = `Pods are a group of one or more containers sharing the same network, pid and ipc namespaces.`
|
|
)
|
|
var podCommand = cliconfig.PodmanCommand{
|
|
Command: &cobra.Command{
|
|
Use: "pod",
|
|
Short: "Manage pods",
|
|
Long: podDescription,
|
|
RunE: commandRunE(),
|
|
},
|
|
}
|
|
|
|
//podSubCommands are implemented both in local and remote clients
|
|
var podSubCommands = []*cobra.Command{
|
|
_podCreateCommand,
|
|
_podExistsCommand,
|
|
_podInspectCommand,
|
|
_podKillCommand,
|
|
_podPauseCommand,
|
|
_podPsCommand,
|
|
_podRestartCommand,
|
|
_podRmCommand,
|
|
_podStartCommand,
|
|
_podStatsCommand,
|
|
_podStopCommand,
|
|
_podTopCommand,
|
|
_podUnpauseCommand,
|
|
}
|
|
|
|
func joinPodNS(runtime *adapter.LocalRuntime, all, latest bool, inputArgs []string) ([]string, bool, bool, error) {
|
|
if rootless.IsRootless() {
|
|
if os.Geteuid() == 0 {
|
|
return []string{rootless.Argument()}, false, false, nil
|
|
} else {
|
|
var err error
|
|
var pods []*adapter.Pod
|
|
if all {
|
|
pods, err = runtime.GetAllPods()
|
|
if err != nil {
|
|
return nil, false, false, errors.Wrapf(err, "unable to get pods")
|
|
}
|
|
} else if latest {
|
|
pod, err := runtime.GetLatestPod()
|
|
if err != nil {
|
|
return nil, false, false, errors.Wrapf(err, "unable to get latest pod")
|
|
}
|
|
pods = append(pods, pod)
|
|
} else {
|
|
for _, i := range inputArgs {
|
|
pod, err := runtime.LookupPod(i)
|
|
if err != nil {
|
|
return nil, false, false, errors.Wrapf(err, "unable to lookup pod %s", i)
|
|
}
|
|
pods = append(pods, pod)
|
|
}
|
|
}
|
|
for _, p := range pods {
|
|
_, ret, err := runtime.JoinOrCreateRootlessPod(p)
|
|
if err != nil {
|
|
return nil, false, false, err
|
|
}
|
|
if ret != 0 {
|
|
os.Exit(ret)
|
|
}
|
|
}
|
|
os.Exit(0)
|
|
}
|
|
}
|
|
return inputArgs, all, latest, nil
|
|
}
|
|
|
|
func init() {
|
|
podCommand.AddCommand(podSubCommands...)
|
|
podCommand.SetHelpTemplate(HelpTemplate())
|
|
podCommand.SetUsageTemplate(UsageTemplate())
|
|
}
|