Parcourir la source

Merge pull request #17177 from runcom/bc-fixes

Return empty Config fields, now omitempty, for API < 1.21
Brian Goff il y a 9 ans
Parent
commit
c516aa645e

+ 5 - 0
api/types/versions/v1p19/types.go

@@ -3,6 +3,7 @@ package v1p19
 
 
 import (
 import (
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/pkg/nat"
 	"github.com/docker/docker/runconfig"
 	"github.com/docker/docker/runconfig"
 )
 )
 
 
@@ -19,6 +20,10 @@ type ContainerJSON struct {
 type ContainerConfig struct {
 type ContainerConfig struct {
 	*runconfig.Config
 	*runconfig.Config
 
 
+	MacAddress      string
+	NetworkDisabled bool
+	ExposedPorts    map[nat.Port]struct{}
+
 	// backward compatibility, they now live in HostConfig
 	// backward compatibility, they now live in HostConfig
 	VolumeDriver string
 	VolumeDriver string
 	Memory       int64
 	Memory       int64

+ 5 - 0
api/types/versions/v1p20/types.go

@@ -3,6 +3,7 @@ package v1p20
 
 
 import (
 import (
 	"github.com/docker/docker/api/types"
 	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/pkg/nat"
 	"github.com/docker/docker/runconfig"
 	"github.com/docker/docker/runconfig"
 )
 )
 
 
@@ -17,6 +18,10 @@ type ContainerJSON struct {
 type ContainerConfig struct {
 type ContainerConfig struct {
 	*runconfig.Config
 	*runconfig.Config
 
 
+	MacAddress      string
+	NetworkDisabled bool
+	ExposedPorts    map[nat.Port]struct{}
+
 	// backward compatibility, they now live in HostConfig
 	// backward compatibility, they now live in HostConfig
 	VolumeDriver string
 	VolumeDriver string
 }
 }

+ 3 - 0
daemon/inspect.go

@@ -48,6 +48,9 @@ func (daemon *Daemon) ContainerInspect120(name string) (*v1p20.ContainerJSON, er
 	mountPoints := addMountPoints(container)
 	mountPoints := addMountPoints(container)
 	config := &v1p20.ContainerConfig{
 	config := &v1p20.ContainerConfig{
 		container.Config,
 		container.Config,
+		container.Config.MacAddress,
+		container.Config.NetworkDisabled,
+		container.Config.ExposedPorts,
 		container.hostConfig.VolumeDriver,
 		container.hostConfig.VolumeDriver,
 	}
 	}
 
 

+ 3 - 0
daemon/inspect_unix.go

@@ -41,6 +41,9 @@ func (daemon *Daemon) ContainerInspectPre120(name string) (*v1p19.ContainerJSON,
 
 
 	config := &v1p19.ContainerConfig{
 	config := &v1p19.ContainerConfig{
 		container.Config,
 		container.Config,
+		container.Config.MacAddress,
+		container.Config.NetworkDisabled,
+		container.Config.ExposedPorts,
 		container.hostConfig.VolumeDriver,
 		container.hostConfig.VolumeDriver,
 		container.hostConfig.Memory,
 		container.hostConfig.Memory,
 		container.hostConfig.MemorySwap,
 		container.hostConfig.MemorySwap,

+ 34 - 3
integration-cli/docker_api_inspect_test.go

@@ -31,8 +31,8 @@ func (s *DockerSuite) TestInspectApiContainerResponse(c *check.C) {
 		endpoint := fmt.Sprintf("/v%s/containers/%s/json", cs.version, cleanedContainerID)
 		endpoint := fmt.Sprintf("/v%s/containers/%s/json", cs.version, cleanedContainerID)
 
 
 		status, body, err := sockRequest("GET", endpoint, nil)
 		status, body, err := sockRequest("GET", endpoint, nil)
-		c.Assert(status, check.Equals, http.StatusOK)
 		c.Assert(err, check.IsNil)
 		c.Assert(err, check.IsNil)
+		c.Assert(status, check.Equals, http.StatusOK)
 
 
 		var inspectJSON map[string]interface{}
 		var inspectJSON map[string]interface{}
 		if err = json.Unmarshal(body, &inspectJSON); err != nil {
 		if err = json.Unmarshal(body, &inspectJSON); err != nil {
@@ -61,8 +61,8 @@ func (s *DockerSuite) TestInspectApiContainerVolumeDriverLegacy(c *check.C) {
 	for _, version := range cases {
 	for _, version := range cases {
 		endpoint := fmt.Sprintf("/v%s/containers/%s/json", version, cleanedContainerID)
 		endpoint := fmt.Sprintf("/v%s/containers/%s/json", version, cleanedContainerID)
 		status, body, err := sockRequest("GET", endpoint, nil)
 		status, body, err := sockRequest("GET", endpoint, nil)
-		c.Assert(status, check.Equals, http.StatusOK)
 		c.Assert(err, check.IsNil)
 		c.Assert(err, check.IsNil)
+		c.Assert(status, check.Equals, http.StatusOK)
 
 
 		var inspectJSON map[string]interface{}
 		var inspectJSON map[string]interface{}
 		if err = json.Unmarshal(body, &inspectJSON); err != nil {
 		if err = json.Unmarshal(body, &inspectJSON); err != nil {
@@ -87,8 +87,8 @@ func (s *DockerSuite) TestInspectApiContainerVolumeDriver(c *check.C) {
 
 
 	endpoint := fmt.Sprintf("/v1.21/containers/%s/json", cleanedContainerID)
 	endpoint := fmt.Sprintf("/v1.21/containers/%s/json", cleanedContainerID)
 	status, body, err := sockRequest("GET", endpoint, nil)
 	status, body, err := sockRequest("GET", endpoint, nil)
-	c.Assert(status, check.Equals, http.StatusOK)
 	c.Assert(err, check.IsNil)
 	c.Assert(err, check.IsNil)
+	c.Assert(status, check.Equals, http.StatusOK)
 
 
 	var inspectJSON map[string]interface{}
 	var inspectJSON map[string]interface{}
 	if err = json.Unmarshal(body, &inspectJSON); err != nil {
 	if err = json.Unmarshal(body, &inspectJSON); err != nil {
@@ -133,3 +133,34 @@ func (s *DockerSuite) TestInspectApiImageResponse(c *check.C) {
 	c.Assert(stringutils.InSlice(imageJSON.Tags, "busybox:latest"), check.Equals, true)
 	c.Assert(stringutils.InSlice(imageJSON.Tags, "busybox:latest"), check.Equals, true)
 	c.Assert(stringutils.InSlice(imageJSON.Tags, "busybox:mytag"), check.Equals, true)
 	c.Assert(stringutils.InSlice(imageJSON.Tags, "busybox:mytag"), check.Equals, true)
 }
 }
+
+// #17131, #17139, #17173
+func (s *DockerSuite) TestInspectApiEmptyFieldsInConfigPre121(c *check.C) {
+	out, _ := dockerCmd(c, "run", "-d", "busybox", "true")
+
+	cleanedContainerID := strings.TrimSpace(out)
+
+	cases := []string{"1.19", "1.20"}
+	for _, version := range cases {
+		endpoint := fmt.Sprintf("/v%s/containers/%s/json", version, cleanedContainerID)
+		status, body, err := sockRequest("GET", endpoint, nil)
+		c.Assert(err, check.IsNil)
+		c.Assert(status, check.Equals, http.StatusOK)
+
+		var inspectJSON map[string]interface{}
+		if err = json.Unmarshal(body, &inspectJSON); err != nil {
+			c.Fatalf("unable to unmarshal body for version %s: %v", version, err)
+		}
+
+		config, ok := inspectJSON["Config"]
+		if !ok {
+			c.Fatal("Unable to find 'Config'")
+		}
+		cfg := config.(map[string]interface{})
+		for _, f := range []string{"MacAddress", "NetworkDisabled", "ExposedPorts"} {
+			if _, ok := cfg[f]; !ok {
+				c.Fatalf("Api version %s expected to include %s in 'Config'", version, f)
+			}
+		}
+	}
+}