mirror of
https://github.com/containers/podman.git
synced 2025-06-11 10:25:41 +08:00
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>
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
package inspect
|
package inspect
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"encoding/json" // due to a bug in json-iterator it cannot be used here
|
"encoding/json" // due to a bug in json-iterator it cannot be used here
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -245,7 +246,15 @@ func printJSON(data []interface{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func printTmpl(typ, row string, 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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
. "github.com/containers/podman/v2/test/utils"
|
. "github.com/containers/podman/v2/test/utils"
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
|
. "github.com/onsi/gomega/gexec"
|
||||||
"github.com/opencontainers/selinux/go-selinux"
|
"github.com/opencontainers/selinux/go-selinux"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -428,4 +429,18 @@ var _ = Describe("Podman inspect", func() {
|
|||||||
Expect(inspect).To(ExitWithError())
|
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"}]}"`))
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"math/rand"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"runtime"
|
"runtime"
|
||||||
@ -465,3 +466,16 @@ func Containerized() bool {
|
|||||||
}
|
}
|
||||||
return false
|
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)
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user