diff options
author | Jhon Honce <jhonce@redhat.com> | 2020-12-07 15:34:14 -0700 |
---|---|---|
committer | Jhon Honce <jhonce@redhat.com> | 2020-12-07 15:39:43 -0700 |
commit | ce474788fd9bcecdb1cd6730fecd16e5d8840ae5 (patch) | |
tree | 1ddff0e68cb8a53244956212947cd8b37a301d87 | |
parent | e2f91207fc3e515c0a9f828433aaf80727f4b7c5 (diff) | |
download | podman-ce474788fd9bcecdb1cd6730fecd16e5d8840ae5.tar.gz podman-ce474788fd9bcecdb1cd6730fecd16e5d8840ae5.tar.bz2 podman-ce474788fd9bcecdb1cd6730fecd16e5d8840ae5.zip |
Restore json format for fields as well as whole structs
* Add template func to inspect template processing
* Added test using repro from #8444
Fixes #8444
Signed-off-by: Jhon Honce <jhonce@redhat.com>
-rw-r--r-- | cmd/podman/inspect/inspect.go | 11 | ||||
-rw-r--r-- | test/e2e/inspect_test.go | 15 | ||||
-rw-r--r-- | test/utils/utils.go | 14 |
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) +} |