Set omitempty for IP and PublicPort to conform w/ API 1.18
Signed-off-by: Darren Shepherd <darren@rancher.com>
(cherry picked from commit 09de92b891c15bda593cf47617f032d2b0b40605)
diff --git a/api/types/types.go b/api/types/types.go
index 70033d0..b885242 100644
--- a/api/types/types.go
+++ b/api/types/types.go
@@ -94,9 +94,9 @@
// GET "/containers/json"
type Port struct {
- IP string
+ IP string `json:",omitempty"`
PrivatePort int
- PublicPort int
+ PublicPort int `json:",omitempty"`
Type string
}
diff --git a/integration-cli/docker_api_containers_test.go b/integration-cli/docker_api_containers_test.go
index 12fe525..c89d11e 100644
--- a/integration-cli/docker_api_containers_test.go
+++ b/integration-cli/docker_api_containers_test.go
@@ -9,6 +9,7 @@
"net/http/httputil"
"os"
"os/exec"
+ "strconv"
"strings"
"time"
@@ -84,6 +85,45 @@
}
}
+type containerPs struct {
+ Names []string
+ Ports []map[string]interface{}
+}
+
+// regression test for non-empty fields from #13901
+func (s *DockerSuite) TestContainerPsOmitFields(c *check.C) {
+ name := "pstest"
+ port := 80
+ runCmd := exec.Command(dockerBinary, "run", "-d", "--name", name, "--expose", strconv.Itoa(port), "busybox", "sleep", "5")
+ _, err := runCommand(runCmd)
+ c.Assert(err, check.IsNil)
+
+ status, body, err := sockRequest("GET", "/containers/json?all=1", nil)
+ c.Assert(status, check.Equals, http.StatusOK)
+ c.Assert(err, check.IsNil)
+
+ var resp []containerPs
+ err = json.Unmarshal(body, &resp)
+ c.Assert(err, check.IsNil)
+
+ var foundContainer *containerPs
+ for _, container := range resp {
+ for _, testName := range container.Names {
+ if "/"+name == testName {
+ foundContainer = &container
+ break
+ }
+ }
+ }
+
+ c.Assert(len(foundContainer.Ports), check.Equals, 1)
+ c.Assert(foundContainer.Ports[0]["PrivatePort"], check.Equals, float64(port))
+ _, ok := foundContainer.Ports[0]["PublicPort"]
+ c.Assert(ok, check.Not(check.Equals), true)
+ _, ok = foundContainer.Ports[0]["IP"]
+ c.Assert(ok, check.Not(check.Equals), true)
+}
+
func (s *DockerSuite) TestContainerApiGetExport(c *check.C) {
name := "exportcontainer"
runCmd := exec.Command(dockerBinary, "run", "--name", name, "busybox", "touch", "/test")