From 1f8a78747aebf9c597f2bd93db5fc4c074286d38 Mon Sep 17 00:00:00 2001 From: Boaz Shuster Date: Wed, 20 May 2020 16:23:26 +0300 Subject: Add --format to pod inspect Signed-off-by: Boaz Shuster --- cmd/podman/pods/inspect.go | 13 ++++--- completions/bash/podman | 13 +++++++ docs/source/markdown/podman-pod-inspect.1.md | 51 ++++++++++++++++++++++------ pkg/domain/entities/pods.go | 2 ++ test/system/200-pod.bats | 12 +++++++ 5 files changed, 75 insertions(+), 16 deletions(-) diff --git a/cmd/podman/pods/inspect.go b/cmd/podman/pods/inspect.go index 1e333247b..34c07c11b 100644 --- a/cmd/podman/pods/inspect.go +++ b/cmd/podman/pods/inspect.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + "github.com/containers/buildah/pkg/formats" "github.com/containers/libpod/cmd/podman/registry" "github.com/containers/libpod/pkg/domain/entities" "github.com/pkg/errors" @@ -36,6 +37,7 @@ func init() { }) flags := inspectCmd.Flags() flags.BoolVarP(&inspectOptions.Latest, "latest", "l", false, "Act on the latest pod podman is aware of") + flags.StringVarP(&inspectOptions.Format, "format", "f", "json", "Format the output to a Go template or json") if registry.IsRemote() { _ = flags.MarkHidden("latest") } @@ -54,10 +56,11 @@ func inspect(cmd *cobra.Command, args []string) error { if err != nil { return err } - b, err := json.MarshalIndent(responses, "", " ") - if err != nil { - return err + var data interface{} = responses + var out formats.Writer = formats.JSONStruct{Output: data} + if inspectOptions.Format != "json" { + out = formats.StdoutTemplate{Output: data, Template: inspectOptions.Format} } - fmt.Println(string(b)) - return nil + + return out.Out() } diff --git a/completions/bash/podman b/completions/bash/podman index 8f02a4b36..a58becaf0 100644 --- a/completions/bash/podman +++ b/completions/bash/podman @@ -3345,6 +3345,18 @@ _podman_pod_unpause() { esac } +_podman_pod_inspect() { + local options_with_args=" + --format + -f + --latest + -l + " + + _complete_ "$options_with_args" +} + + _podman_pod() { local boolean_options=" --help @@ -3362,6 +3374,7 @@ _podman_pod() { stop top unpause + inspect " local aliases=" list diff --git a/docs/source/markdown/podman-pod-inspect.1.md b/docs/source/markdown/podman-pod-inspect.1.md index 831d28259..bc04b2b32 100644 --- a/docs/source/markdown/podman-pod-inspect.1.md +++ b/docs/source/markdown/podman-pod-inspect.1.md @@ -18,21 +18,50 @@ to run pods such as CRI-O, the last started pod could be from either of those me The latest option is not supported on the remote client. +**-f**, **--format**=*format* + +Change the default output format. This can be of a supported type like 'json' +or a Go template. +Valid placeholders for the Go template are listed below: + +| **Placeholder** | **Description** | +| ----------------- | ----------------------------------------------------------------------------- | +| .ID | Pod ID | +| .Name | Pod name | +| .State | Pod state | +| .Hostname | Pod hostname | +| .Labels | Pod labels | +| .Created | Time when the pod was created | +| .CreateCgroup | Whether cgroup was created | +| .CgroupParent | Pod cgroup parent | +| .CgroupPath | Pod cgroup path | +| .CreateInfra | Whether infrastructure created | +| .InfraContainerID | Pod infrastructure ID | +| .SharedNamespaces | Pod shared namespaces | +| .NumContainers | Number of containers in the pod | +| .Containers | Pod containers | + ## EXAMPLE ``` # podman pod inspect foobar { - "Config": { - "id": "3513ca70583dd7ef2bac83331350f6b6c47d7b4e526c908e49d89ebf720e4693", - "name": "foobar", - "labels": {}, - "cgroupParent": "/libpod_parent", - "UsePodCgroup": true, - "created": "2018-08-08T11:15:18.823115347-05:00" - }, - "State": { - "CgroupPath": "" - }, + + "Id": "3513ca70583dd7ef2bac83331350f6b6c47d7b4e526c908e49d89ebf720e4693", + "Name": "foobar", + "Labels": {}, + "CgroupParent": "/libpod_parent", + "CreateCgroup": true, + "Created": "2018-08-08T11:15:18.823115347-05:00" + "State": "created", + "Hostname": "", + "SharedNamespaces": [ + "uts", + "ipc", + "net" + ] + "CreateInfra": false, + "InfraContainerID": "1020dd70583dd7ff2bac83331350f6b6e007de0d026c908e49d89ebf891d4699" + "CgroupPath": "" "Containers": [ { "id": "d53f8bf1e9730281264aac6e6586e327429f62c704abea4b6afb5d8a2b2c9f2c", diff --git a/pkg/domain/entities/pods.go b/pkg/domain/entities/pods.go index a4896ce4d..1a38a7aa4 100644 --- a/pkg/domain/entities/pods.go +++ b/pkg/domain/entities/pods.go @@ -184,6 +184,8 @@ type PodInspectOptions struct { // Options for the API. NameOrID string + + Format string } type PodInspectReport struct { diff --git a/test/system/200-pod.bats b/test/system/200-pod.bats index e3643a3bd..f34cd0707 100644 --- a/test/system/200-pod.bats +++ b/test/system/200-pod.bats @@ -170,4 +170,16 @@ function random_ip() { is "$output" ".*options $dns_opt" "--dns-opt was added" } +@test "podman pod inspect - format" { + skip_if_remote "podman-pod does not work with podman-remote" + + run_podman pod create --name podtest + podid=$output + + run_podman pod inspect --format '-> {{.Name}}: {{.NumContainers}}' podtest + is "$output" "-> podtest: 1" + + run_podman pod rm -f podtest +} + # vim: filetype=sh -- cgit v1.2.3-54-g00ecf