From 16cd9213efee40974d28462f760e29ee79ecb5cf Mon Sep 17 00:00:00 2001 From: Yong Tang Date: Thu, 3 Nov 2016 11:23:58 -0700 Subject: [PATCH] Add information for `Manager Addresses` in the output of `docker info` As is specified in 28018, it would be useful to know the manager's addresses even in a worker node. This is especially useful when there are many worker nodes in a big cluster. The information is available in `info.Swarm.RemoteManagers`. This fix add the information of `Manager Addresses` to the output of `docker info`, to explicitly show it. A test has been added for this fix. This fix fixes 28018. Signed-off-by: Yong Tang Upstream-commit: 828bd441eb828072044175f3e6867c7218e434c5 Component: engine --- components/engine/cli/command/system/info.go | 12 +++++++++++ .../integration-cli/docker_cli_swarm_test.go | 21 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/components/engine/cli/command/system/info.go b/components/engine/cli/command/system/info.go index 36b09a9cc5..b751bbff13 100644 --- a/components/engine/cli/command/system/info.go +++ b/components/engine/cli/command/system/info.go @@ -2,6 +2,7 @@ package system import ( "fmt" + "sort" "strings" "time" @@ -131,6 +132,17 @@ func prettyPrintInfo(dockerCli *command.DockerCli, info types.Info) error { } } fmt.Fprintf(dockerCli.Out(), " Node Address: %s\n", info.Swarm.NodeAddr) + managers := []string{} + for _, entry := range info.Swarm.RemoteManagers { + managers = append(managers, entry.Addr) + } + if len(managers) > 0 { + sort.Strings(managers) + fmt.Fprintf(dockerCli.Out(), " Manager Addresses:\n") + for _, entry := range managers { + fmt.Fprintf(dockerCli.Out(), " %s\n", entry) + } + } } if len(info.Runtimes) > 0 { diff --git a/components/engine/integration-cli/docker_cli_swarm_test.go b/components/engine/integration-cli/docker_cli_swarm_test.go index cffab330ed..d53b219cf9 100644 --- a/components/engine/integration-cli/docker_cli_swarm_test.go +++ b/components/engine/integration-cli/docker_cli_swarm_test.go @@ -1051,3 +1051,24 @@ func (s *DockerSwarmSuite) TestExtraHosts(c *check.C) { c.Assert(err, checker.IsNil) c.Assert(out, checker.Contains, expectedOutput, check.Commentf("Expected '%s', but got %q", expectedOutput, out)) } + +func (s *DockerSwarmSuite) TestSwarmManagerAddress(c *check.C) { + d1 := s.AddDaemon(c, true, true) + d2 := s.AddDaemon(c, true, false) + d3 := s.AddDaemon(c, true, false) + + // Manager Addresses will always show Node 1's address + expectedOutput := fmt.Sprintf("Manager Addresses:\n 127.0.0.1:%d\n", d1.port) + + out, err := d1.Cmd("info") + c.Assert(err, checker.IsNil) + c.Assert(out, checker.Contains, expectedOutput) + + out, err = d2.Cmd("info") + c.Assert(err, checker.IsNil) + c.Assert(out, checker.Contains, expectedOutput) + + out, err = d3.Cmd("info") + c.Assert(err, checker.IsNil) + c.Assert(out, checker.Contains, expectedOutput) +}