summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2020-12-08 15:30:31 -0500
committerGitHub <noreply@github.com>2020-12-08 15:30:31 -0500
commit7caef9c497da0c2a16caf4f15152bc543dfb6008 (patch)
tree8b14a4ebde2b3ecc5ab8ec5f5f4b13a034661b17
parent7b2e81ec268464427e4d1365cbdd9e0bc9c582f5 (diff)
parentce474788fd9bcecdb1cd6730fecd16e5d8840ae5 (diff)
downloadpodman-7caef9c497da0c2a16caf4f15152bc543dfb6008.tar.gz
podman-7caef9c497da0c2a16caf4f15152bc543dfb6008.tar.bz2
podman-7caef9c497da0c2a16caf4f15152bc543dfb6008.zip
Merge pull request #8642 from jwhonce/issues/8444
Restore json format for fields as well as whole structs
-rw-r--r--cmd/podman/inspect/inspect.go11
-rw-r--r--test/e2e/inspect_test.go15
-rw-r--r--test/utils/utils.go14
3 files changed, 39 insertions, 1 deletions
diff --git a/cmd/podman/inspect/inspect.go b/cmd/podman/inspect/inspect.go
index 13f36ebbd..cc48b7ae4 100644
--- a/cmd/podman/inspect/inspect.go
+++ b/cmd/podman/inspect/inspect.go
@@ -1,6 +1,7 @@
package inspect
import (
+ "bytes"
"context"
"encoding/json" // due to a bug in json-iterator it cannot be used here
"fmt"
@@ -245,7 +246,15 @@ func printJSON(data []interface{}) error {
}
func printTmpl(typ, row string, data []interface{}) error {
- t, err := template.New(typ + " inspect").Parse(row)
+ t, err := template.New(typ + " inspect").Funcs(map[string]interface{}{
+ "json": func(v interface{}) string {
+ b := &bytes.Buffer{}
+ e := registry.JSONLibrary().NewEncoder(b)
+ e.SetEscapeHTML(false)
+ _ = e.Encode(v)
+ return strings.TrimSpace(b.String())
+ },
+ }).Parse(row)
if err != nil {
return err
}
diff --git a/test/e2e/inspect_test.go b/test/e2e/inspect_test.go
index c2e0f4407..97f77414e 100644
--- a/test/e2e/inspect_test.go
+++ b/test/e2e/inspect_test.go
@@ -7,6 +7,7 @@ import (
. "github.com/containers/podman/v2/test/utils"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
+ . "github.com/onsi/gomega/gexec"
"github.com/opencontainers/selinux/go-selinux"
)
@@ -428,4 +429,18 @@ var _ = Describe("Podman inspect", func() {
Expect(inspect).To(ExitWithError())
})
+ // Fixes https://github.com/containers/podman/issues/8444
+ It("podman inspect --format json .NetworkSettings.Ports", func() {
+ ctnrName := "Ctnr_" + RandomString(25)
+
+ create := podmanTest.Podman([]string{"create", "--name", ctnrName, "-p", "8080:80", ALPINE})
+ create.WaitWithDefaultTimeout()
+ Expect(create).Should(Exit(0))
+
+ inspect := podmanTest.Podman([]string{"inspect", `--format="{{json .NetworkSettings.Ports}}"`, ctnrName})
+ inspect.WaitWithDefaultTimeout()
+ Expect(inspect).Should(Exit(0))
+ Expect(inspect.OutputToString()).To(Equal(`"{"80/tcp":[{"HostIp":"","HostPort":"8080"}]}"`))
+ })
+
})
diff --git a/test/utils/utils.go b/test/utils/utils.go
index d08939678..027e96427 100644
--- a/test/utils/utils.go
+++ b/test/utils/utils.go
@@ -5,6 +5,7 @@ import (
"encoding/json"
"fmt"
"io/ioutil"
+ "math/rand"
"os"
"os/exec"
"runtime"
@@ -465,3 +466,16 @@ func Containerized() bool {
}
return false
}
+
+var randomLetters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
+
+// RandomString returns a string of given length composed of random characters
+func RandomString(n int) string {
+ rand.Seed(GinkgoRandomSeed())
+
+ b := make([]rune, n)
+ for i := range b {
+ b[i] = randomLetters[rand.Intn(len(randomLetters))]
+ }
+ return string(b)
+}