aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorbaude <bbaude@redhat.com>2019-02-23 19:36:19 -0600
committerbaude <bbaude@redhat.com>2019-02-25 09:10:09 -0600
commit43a1686598c92c9e2a839909b8b5edb9f1b0f00f (patch)
treee1fb43b63b951dd4f298e93edc868a3dcf2eb371 /cmd
parent4bf973a9f61eae3b02925a42ccfa784baeb917dc (diff)
downloadpodman-43a1686598c92c9e2a839909b8b5edb9f1b0f00f.tar.gz
podman-43a1686598c92c9e2a839909b8b5edb9f1b0f00f.tar.bz2
podman-43a1686598c92c9e2a839909b8b5edb9f1b0f00f.zip
podman-remote create|ps
enable the podman-remote client to be able to create and list pods on a remote system. Signed-off-by: baude <bbaude@redhat.com>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/podman/commands.go2
-rw-r--r--cmd/podman/pod.go2
-rw-r--r--cmd/podman/pod_create.go77
-rw-r--r--cmd/podman/pod_ps.go46
-rw-r--r--cmd/podman/shared/pod.go4
-rw-r--r--cmd/podman/utils.go2
6 files changed, 50 insertions, 83 deletions
diff --git a/cmd/podman/commands.go b/cmd/podman/commands.go
index 310ec8378..f0d3dbb39 100644
--- a/cmd/podman/commands.go
+++ b/cmd/podman/commands.go
@@ -93,9 +93,7 @@ func getContainerSubCommands() []*cobra.Command {
// Commands that the local client implements
func getPodSubCommands() []*cobra.Command {
return []*cobra.Command{
- _podCreateCommand,
_podPauseCommand,
- _podPsCommand,
_podRestartCommand,
_podStatsCommand,
_podTopCommand,
diff --git a/cmd/podman/pod.go b/cmd/podman/pod.go
index 4c7c416ce..b4c6ca688 100644
--- a/cmd/podman/pod.go
+++ b/cmd/podman/pod.go
@@ -20,9 +20,11 @@ var podCommand = cliconfig.PodmanCommand{
//podSubCommands are implemented both in local and remote clients
var podSubCommands = []*cobra.Command{
+ _podCreateCommand,
_podExistsCommand,
_podInspectCommand,
_podKillCommand,
+ _podPsCommand,
_podRmCommand,
_podStartCommand,
_podStopCommand,
diff --git a/cmd/podman/pod_create.go b/cmd/podman/pod_create.go
index d5ca5e13a..f1bbecb84 100644
--- a/cmd/podman/pod_create.go
+++ b/cmd/podman/pod_create.go
@@ -3,12 +3,10 @@ package main
import (
"fmt"
"os"
- "strings"
"github.com/containers/libpod/cmd/podman/cliconfig"
- "github.com/containers/libpod/cmd/podman/libpodruntime"
- "github.com/containers/libpod/cmd/podman/shared"
"github.com/containers/libpod/libpod"
+ "github.com/containers/libpod/pkg/adapter"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
@@ -56,20 +54,29 @@ func init() {
}
func podCreateCmd(c *cliconfig.PodCreateValues) error {
- var options []libpod.PodCreateOption
- var err error
+ var (
+ err error
+ podIdFile *os.File
+ )
if len(c.InputArgs) > 0 {
return errors.New("podman pod create does not accept any arguments")
}
-
- runtime, err := libpodruntime.GetRuntime(&c.PodmanCommand)
+ runtime, err := adapter.GetRuntime(&c.PodmanCommand)
if err != nil {
return errors.Wrapf(err, "error creating libpod runtime")
}
defer runtime.Shutdown(false)
- var podIdFile *os.File
+ if len(c.Publish) > 0 {
+ if !c.Infra {
+ return errors.Errorf("you must have an infra container to publish port bindings to the host")
+ }
+ }
+
+ if !c.Infra && c.Flag("share").Changed && c.Share != "none" && c.Share != "" {
+ return errors.Errorf("You cannot share kernel namespaces on the pod level without an infra container")
+ }
if c.Flag("pod-id-file").Changed && os.Geteuid() == 0 {
podIdFile, err = libpod.OpenExclusiveFile(c.PodIDFile)
if err != nil && os.IsExist(err) {
@@ -82,67 +89,21 @@ func podCreateCmd(c *cliconfig.PodCreateValues) error {
defer podIdFile.Sync()
}
- if len(c.Publish) > 0 {
- if !c.Infra {
- return errors.Errorf("you must have an infra container to publish port bindings to the host")
- }
- }
-
- if !c.Infra && c.Flag("share").Changed && c.Share != "none" && c.Share != "" {
- return errors.Errorf("You cannot share kernel namespaces on the pod level without an infra container")
- }
-
- if c.Flag("cgroup-parent").Changed {
- options = append(options, libpod.WithPodCgroupParent(c.CgroupParent))
- }
-
labels, err := getAllLabels(c.LabelFile, c.Labels)
if err != nil {
return errors.Wrapf(err, "unable to process labels")
}
- if len(labels) != 0 {
- options = append(options, libpod.WithPodLabels(labels))
- }
-
- if c.Flag("name").Changed {
- options = append(options, libpod.WithPodName(c.Name))
- }
-
- if c.Infra {
- options = append(options, libpod.WithInfraContainer())
- nsOptions, err := shared.GetNamespaceOptions(strings.Split(c.Share, ","))
- if err != nil {
- return err
- }
- options = append(options, nsOptions...)
- }
- if len(c.Publish) > 0 {
- portBindings, err := shared.CreatePortBindings(c.Publish)
- if err != nil {
- return err
- }
- options = append(options, libpod.WithInfraContainerPorts(portBindings))
-
- }
- // always have containers use pod cgroups
- // User Opt out is not yet supported
- options = append(options, libpod.WithPodCgroups())
-
- ctx := getContext()
- pod, err := runtime.NewPod(ctx, options...)
+ podID, err := runtime.CreatePod(getContext(), c, labels)
if err != nil {
- return err
+ return errors.Wrapf(err, "unable to create pod")
}
-
if podIdFile != nil {
- _, err = podIdFile.WriteString(pod.ID())
+ _, err = podIdFile.WriteString(podID)
if err != nil {
logrus.Error(err)
}
}
-
- fmt.Printf("%s\n", pod.ID())
-
+ fmt.Printf("%s\n", podID)
return nil
}
diff --git a/cmd/podman/pod_ps.go b/cmd/podman/pod_ps.go
index 85467b6ad..70e077651 100644
--- a/cmd/podman/pod_ps.go
+++ b/cmd/podman/pod_ps.go
@@ -10,9 +10,9 @@ import (
"github.com/containers/libpod/cmd/podman/cliconfig"
"github.com/containers/libpod/cmd/podman/formats"
- "github.com/containers/libpod/cmd/podman/libpodruntime"
"github.com/containers/libpod/cmd/podman/shared"
"github.com/containers/libpod/libpod"
+ "github.com/containers/libpod/pkg/adapter"
"github.com/containers/libpod/pkg/util"
"github.com/docker/go-units"
"github.com/pkg/errors"
@@ -29,6 +29,8 @@ const (
NUM_CTR_INFO = 10
)
+type PodFilter func(*adapter.Pod) bool
+
var (
bc_opts shared.PsOptions
)
@@ -152,7 +154,7 @@ func podPsCmd(c *cliconfig.PodPsValues) error {
return errors.Wrapf(err, "error with flags passed")
}
- runtime, err := libpodruntime.GetRuntime(&c.PodmanCommand)
+ runtime, err := adapter.GetRuntime(&c.PodmanCommand)
if err != nil {
return errors.Wrapf(err, "error creating libpod runtime")
}
@@ -173,7 +175,7 @@ func podPsCmd(c *cliconfig.PodPsValues) error {
opts.Format = genPodPsFormat(c)
- var filterFuncs []libpod.PodFilter
+ var filterFuncs []PodFilter
if c.Filter != "" {
filters := strings.Split(c.Filter, ",")
for _, f := range filters {
@@ -181,7 +183,7 @@ func podPsCmd(c *cliconfig.PodPsValues) error {
if len(filterSplit) < 2 {
return errors.Errorf("filter input must be in the form of filter=value: %s is invalid", f)
}
- generatedFunc, err := generatePodFilterFuncs(filterSplit[0], filterSplit[1], runtime)
+ generatedFunc, err := generatePodFilterFuncs(filterSplit[0], filterSplit[1])
if err != nil {
return errors.Wrapf(err, "invalid filter")
}
@@ -189,7 +191,7 @@ func podPsCmd(c *cliconfig.PodPsValues) error {
}
}
- var pods []*libpod.Pod
+ var pods []*adapter.Pod
if c.Latest {
pod, err := runtime.GetLatestPod()
if err != nil {
@@ -203,7 +205,7 @@ func podPsCmd(c *cliconfig.PodPsValues) error {
}
}
- podsFiltered := make([]*libpod.Pod, 0, len(pods))
+ podsFiltered := make([]*adapter.Pod, 0, len(pods))
for _, pod := range pods {
include := true
for _, filter := range filterFuncs {
@@ -215,7 +217,7 @@ func podPsCmd(c *cliconfig.PodPsValues) error {
}
}
- return generatePodPsOutput(podsFiltered, opts, runtime)
+ return generatePodPsOutput(podsFiltered, opts)
}
// podPsCheckFlagsPassed checks if mutually exclusive flags are passed together
@@ -234,10 +236,10 @@ func podPsCheckFlagsPassed(c *cliconfig.PodPsValues) error {
return nil
}
-func generatePodFilterFuncs(filter, filterValue string, runtime *libpod.Runtime) (func(pod *libpod.Pod) bool, error) {
+func generatePodFilterFuncs(filter, filterValue string) (func(pod *adapter.Pod) bool, error) {
switch filter {
case "ctr-ids":
- return func(p *libpod.Pod) bool {
+ return func(p *adapter.Pod) bool {
ctrIds, err := p.AllContainersByID()
if err != nil {
return false
@@ -245,7 +247,7 @@ func generatePodFilterFuncs(filter, filterValue string, runtime *libpod.Runtime)
return util.StringInSlice(filterValue, ctrIds)
}, nil
case "ctr-names":
- return func(p *libpod.Pod) bool {
+ return func(p *adapter.Pod) bool {
ctrs, err := p.AllContainers()
if err != nil {
return false
@@ -258,7 +260,7 @@ func generatePodFilterFuncs(filter, filterValue string, runtime *libpod.Runtime)
return false
}, nil
case "ctr-number":
- return func(p *libpod.Pod) bool {
+ return func(p *adapter.Pod) bool {
ctrIds, err := p.AllContainersByID()
if err != nil {
return false
@@ -274,7 +276,7 @@ func generatePodFilterFuncs(filter, filterValue string, runtime *libpod.Runtime)
if !util.StringInSlice(filterValue, []string{"created", "restarting", "running", "paused", "exited", "unknown"}) {
return nil, errors.Errorf("%s is not a valid status", filterValue)
}
- return func(p *libpod.Pod) bool {
+ return func(p *adapter.Pod) bool {
ctr_statuses, err := p.Status()
if err != nil {
return false
@@ -291,19 +293,19 @@ func generatePodFilterFuncs(filter, filterValue string, runtime *libpod.Runtime)
return false
}, nil
case "id":
- return func(p *libpod.Pod) bool {
+ return func(p *adapter.Pod) bool {
return strings.Contains(p.ID(), filterValue)
}, nil
case "name":
- return func(p *libpod.Pod) bool {
+ return func(p *adapter.Pod) bool {
return strings.Contains(p.Name(), filterValue)
}, nil
case "status":
if !util.StringInSlice(filterValue, []string{"stopped", "running", "paused", "exited", "dead", "created"}) {
return nil, errors.Errorf("%s is not a valid pod status", filterValue)
}
- return func(p *libpod.Pod) bool {
- status, err := shared.GetPodStatus(p)
+ return func(p *adapter.Pod) bool {
+ status, err := p.GetPodStatus()
if err != nil {
return false
}
@@ -448,7 +450,7 @@ func getPodTemplateOutput(psParams []podPsJSONParams, opts podPsOptions) ([]podP
return psOutput, nil
}
-func getNamespaces(pod *libpod.Pod) []string {
+func getNamespaces(pod *adapter.Pod) []string {
var shared []string
if pod.SharesPID() {
shared = append(shared, "pid")
@@ -475,7 +477,7 @@ func getNamespaces(pod *libpod.Pod) []string {
}
// getAndSortPodJSONOutput returns the container info in its raw, sorted form
-func getAndSortPodJSONParams(pods []*libpod.Pod, opts podPsOptions, runtime *libpod.Runtime) ([]podPsJSONParams, error) {
+func getAndSortPodJSONParams(pods []*adapter.Pod, opts podPsOptions) ([]podPsJSONParams, error) {
var (
psOutput []podPsJSONParams
)
@@ -487,7 +489,7 @@ func getAndSortPodJSONParams(pods []*libpod.Pod, opts podPsOptions, runtime *lib
return nil, err
}
ctrNum := len(ctrs)
- status, err := shared.GetPodStatus(pod)
+ status, err := pod.GetPodStatus()
if err != nil {
return nil, err
}
@@ -497,7 +499,7 @@ func getAndSortPodJSONParams(pods []*libpod.Pod, opts podPsOptions, runtime *lib
return nil, err
}
for _, ctr := range ctrs {
- batchInfo, err := shared.BatchContainerOp(ctr, bc_opts)
+ batchInfo, err := adapter.BatchContainerOp(ctr, bc_opts)
if err != nil {
return nil, err
}
@@ -539,11 +541,11 @@ func getAndSortPodJSONParams(pods []*libpod.Pod, opts podPsOptions, runtime *lib
return sortPodPsOutput(opts.Sort, psOutput)
}
-func generatePodPsOutput(pods []*libpod.Pod, opts podPsOptions, runtime *libpod.Runtime) error {
+func generatePodPsOutput(pods []*adapter.Pod, opts podPsOptions) error {
if len(pods) == 0 && opts.Format != formats.JSONString {
return nil
}
- psOutput, err := getAndSortPodJSONParams(pods, opts, runtime)
+ psOutput, err := getAndSortPodJSONParams(pods, opts)
if err != nil {
return err
}
diff --git a/cmd/podman/shared/pod.go b/cmd/podman/shared/pod.go
index 30dd14845..5f65c40ac 100644
--- a/cmd/podman/shared/pod.go
+++ b/cmd/podman/shared/pod.go
@@ -26,6 +26,10 @@ func GetPodStatus(pod *libpod.Pod) (string, error) {
if err != nil {
return errored, err
}
+ return CreatePodStatusResults(ctrStatuses)
+}
+
+func CreatePodStatusResults(ctrStatuses map[string]libpod.ContainerStatus) (string, error) {
ctrNum := len(ctrStatuses)
if ctrNum == 0 {
return created, nil
diff --git a/cmd/podman/utils.go b/cmd/podman/utils.go
index 0fbea417b..4ec0f8a13 100644
--- a/cmd/podman/utils.go
+++ b/cmd/podman/utils.go
@@ -172,7 +172,7 @@ func getPodsFromContext(c *cliconfig.PodmanCommand, r *libpod.Runtime) ([]*libpo
var err error
if c.Bool("all") {
- pods, err = r.Pods()
+ pods, err = r.GetAllPods()
if err != nil {
return nil, errors.Wrapf(err, "unable to get running pods")
}