Browse code

Fix bad cherrypick from a91bc28e6225fb0d943451b8bdafca8b6bbb047d

Signed-off-by: Tibor Vass <tibor@docker.com>

Tibor Vass authored on 2016/07/27 10:14:34
Showing 2 changed files
... ...
@@ -3,6 +3,7 @@ package client
3 3
 import (
4 4
 	"fmt"
5 5
 	"strings"
6
+	"time"
6 7
 
7 8
 	"golang.org/x/net/context"
8 9
 
... ...
@@ -23,7 +24,8 @@ func (cli *DockerCli) CmdInfo(args ...string) error {
23 23
 
24 24
 	cmd.ParseFlags(args, true)
25 25
 
26
-	info, err := cli.client.Info(context.Background())
26
+	ctx := context.Background()
27
+	info, err := cli.client.Info(ctx)
27 28
 	if err != nil {
28 29
 		return err
29 30
 	}
... ...
@@ -76,8 +78,19 @@ func (cli *DockerCli) CmdInfo(args ...string) error {
76 76
 		}
77 77
 		fmt.Fprintf(cli.out, " Is Manager: %v\n", info.Swarm.ControlAvailable)
78 78
 		if info.Swarm.ControlAvailable {
79
+			fmt.Fprintf(cli.out, " ClusterID: %s\n", info.Swarm.Cluster.ID)
79 80
 			fmt.Fprintf(cli.out, " Managers: %d\n", info.Swarm.Managers)
80 81
 			fmt.Fprintf(cli.out, " Nodes: %d\n", info.Swarm.Nodes)
82
+			fmt.Fprintf(cli.out, " Orchestration:\n")
83
+			fmt.Fprintf(cli.out, "  Task History Retention Limit: %d\n", info.Swarm.Cluster.Spec.Orchestration.TaskHistoryRetentionLimit)
84
+			fmt.Fprintf(cli.out, " Raft:\n")
85
+			fmt.Fprintf(cli.out, "  Snapshot interval: %d\n", info.Swarm.Cluster.Spec.Raft.SnapshotInterval)
86
+			fmt.Fprintf(cli.out, "  Heartbeat tick: %d\n", info.Swarm.Cluster.Spec.Raft.HeartbeatTick)
87
+			fmt.Fprintf(cli.out, "  Election tick: %d\n", info.Swarm.Cluster.Spec.Raft.ElectionTick)
88
+			fmt.Fprintf(cli.out, " Dispatcher:\n")
89
+			fmt.Fprintf(cli.out, "  Heartbeat period: %s\n", units.HumanDuration(time.Duration(info.Swarm.Cluster.Spec.Dispatcher.HeartbeatPeriod)))
90
+			fmt.Fprintf(cli.out, " CA configuration:\n")
91
+			fmt.Fprintf(cli.out, "  Expiry duration: %s\n", units.HumanDuration(info.Swarm.Cluster.Spec.CAConfig.NodeCertExpiry))
81 92
 		}
82 93
 		fmt.Fprintf(cli.out, " Node Address: %s\n", info.Swarm.NodeAddr)
83 94
 	}
84 95
deleted file mode 100644
... ...
@@ -1,216 +0,0 @@
1
-package system
2
-
3
-import (
4
-	"fmt"
5
-	"strings"
6
-	"time"
7
-
8
-	"golang.org/x/net/context"
9
-
10
-	"github.com/docker/docker/api/client"
11
-	"github.com/docker/docker/cli"
12
-	"github.com/docker/docker/pkg/ioutils"
13
-	"github.com/docker/docker/utils"
14
-	"github.com/docker/engine-api/types/swarm"
15
-	"github.com/docker/go-units"
16
-	"github.com/spf13/cobra"
17
-)
18
-
19
-// NewInfoCommand creates a new cobra.Command for `docker info`
20
-func NewInfoCommand(dockerCli *client.DockerCli) *cobra.Command {
21
-	cmd := &cobra.Command{
22
-		Use:   "info",
23
-		Short: "Display system-wide information",
24
-		Args:  cli.ExactArgs(0),
25
-		RunE: func(cmd *cobra.Command, args []string) error {
26
-			return runInfo(dockerCli)
27
-		},
28
-	}
29
-	return cmd
30
-
31
-}
32
-
33
-func runInfo(dockerCli *client.DockerCli) error {
34
-	ctx := context.Background()
35
-	info, err := dockerCli.Client().Info(ctx)
36
-	if err != nil {
37
-		return err
38
-	}
39
-
40
-	fmt.Fprintf(dockerCli.Out(), "Containers: %d\n", info.Containers)
41
-	fmt.Fprintf(dockerCli.Out(), " Running: %d\n", info.ContainersRunning)
42
-	fmt.Fprintf(dockerCli.Out(), " Paused: %d\n", info.ContainersPaused)
43
-	fmt.Fprintf(dockerCli.Out(), " Stopped: %d\n", info.ContainersStopped)
44
-	fmt.Fprintf(dockerCli.Out(), "Images: %d\n", info.Images)
45
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), "Server Version: %s\n", info.ServerVersion)
46
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), "Storage Driver: %s\n", info.Driver)
47
-	if info.DriverStatus != nil {
48
-		for _, pair := range info.DriverStatus {
49
-			fmt.Fprintf(dockerCli.Out(), " %s: %s\n", pair[0], pair[1])
50
-
51
-			// print a warning if devicemapper is using a loopback file
52
-			if pair[0] == "Data loop file" {
53
-				fmt.Fprintln(dockerCli.Err(), " WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.")
54
-			}
55
-		}
56
-
57
-	}
58
-	if info.SystemStatus != nil {
59
-		for _, pair := range info.SystemStatus {
60
-			fmt.Fprintf(dockerCli.Out(), "%s: %s\n", pair[0], pair[1])
61
-		}
62
-	}
63
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), "Logging Driver: %s\n", info.LoggingDriver)
64
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), "Cgroup Driver: %s\n", info.CgroupDriver)
65
-
66
-	fmt.Fprintf(dockerCli.Out(), "Plugins: \n")
67
-	fmt.Fprintf(dockerCli.Out(), " Volume:")
68
-	fmt.Fprintf(dockerCli.Out(), " %s", strings.Join(info.Plugins.Volume, " "))
69
-	fmt.Fprintf(dockerCli.Out(), "\n")
70
-	fmt.Fprintf(dockerCli.Out(), " Network:")
71
-	fmt.Fprintf(dockerCli.Out(), " %s", strings.Join(info.Plugins.Network, " "))
72
-	fmt.Fprintf(dockerCli.Out(), "\n")
73
-
74
-	if len(info.Plugins.Authorization) != 0 {
75
-		fmt.Fprintf(dockerCli.Out(), " Authorization:")
76
-		fmt.Fprintf(dockerCli.Out(), " %s", strings.Join(info.Plugins.Authorization, " "))
77
-		fmt.Fprintf(dockerCli.Out(), "\n")
78
-	}
79
-
80
-	fmt.Fprintf(dockerCli.Out(), "Swarm: %v\n", info.Swarm.LocalNodeState)
81
-	if info.Swarm.LocalNodeState != swarm.LocalNodeStateInactive {
82
-		fmt.Fprintf(dockerCli.Out(), " NodeID: %s\n", info.Swarm.NodeID)
83
-		if info.Swarm.Error != "" {
84
-			fmt.Fprintf(dockerCli.Out(), " Error: %v\n", info.Swarm.Error)
85
-		}
86
-		fmt.Fprintf(dockerCli.Out(), " Is Manager: %v\n", info.Swarm.ControlAvailable)
87
-		if info.Swarm.ControlAvailable {
88
-			fmt.Fprintf(dockerCli.Out(), " ClusterID: %s\n", info.Swarm.Cluster.ID)
89
-			fmt.Fprintf(dockerCli.Out(), " Managers: %d\n", info.Swarm.Managers)
90
-			fmt.Fprintf(dockerCli.Out(), " Nodes: %d\n", info.Swarm.Nodes)
91
-			fmt.Fprintf(dockerCli.Out(), " Orchestration:\n")
92
-			fmt.Fprintf(dockerCli.Out(), "  Task History Retention Limit: %d\n", info.Swarm.Cluster.Spec.Orchestration.TaskHistoryRetentionLimit)
93
-			fmt.Fprintf(dockerCli.Out(), " Raft:\n")
94
-			fmt.Fprintf(dockerCli.Out(), "  Snapshot interval: %d\n", info.Swarm.Cluster.Spec.Raft.SnapshotInterval)
95
-			fmt.Fprintf(dockerCli.Out(), "  Heartbeat tick: %d\n", info.Swarm.Cluster.Spec.Raft.HeartbeatTick)
96
-			fmt.Fprintf(dockerCli.Out(), "  Election tick: %d\n", info.Swarm.Cluster.Spec.Raft.ElectionTick)
97
-			fmt.Fprintf(dockerCli.Out(), " Dispatcher:\n")
98
-			fmt.Fprintf(dockerCli.Out(), "  Heartbeat period: %s\n", units.HumanDuration(time.Duration(info.Swarm.Cluster.Spec.Dispatcher.HeartbeatPeriod)))
99
-			fmt.Fprintf(dockerCli.Out(), " CA configuration:\n")
100
-			fmt.Fprintf(dockerCli.Out(), "  Expiry duration: %s\n", units.HumanDuration(info.Swarm.Cluster.Spec.CAConfig.NodeCertExpiry))
101
-		}
102
-		fmt.Fprintf(dockerCli.Out(), " Node Address: %s\n", info.Swarm.NodeAddr)
103
-	}
104
-
105
-	if len(info.Runtimes) > 0 {
106
-		fmt.Fprintf(dockerCli.Out(), "Runtimes:")
107
-		for name := range info.Runtimes {
108
-			fmt.Fprintf(dockerCli.Out(), " %s", name)
109
-		}
110
-		fmt.Fprint(dockerCli.Out(), "\n")
111
-		fmt.Fprintf(dockerCli.Out(), "Default Runtime: %s\n", info.DefaultRuntime)
112
-	}
113
-
114
-	fmt.Fprintf(dockerCli.Out(), "Security Options:")
115
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), " %s", strings.Join(info.SecurityOptions, " "))
116
-	fmt.Fprintf(dockerCli.Out(), "\n")
117
-
118
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), "Kernel Version: %s\n", info.KernelVersion)
119
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), "Operating System: %s\n", info.OperatingSystem)
120
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), "OSType: %s\n", info.OSType)
121
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), "Architecture: %s\n", info.Architecture)
122
-	fmt.Fprintf(dockerCli.Out(), "CPUs: %d\n", info.NCPU)
123
-	fmt.Fprintf(dockerCli.Out(), "Total Memory: %s\n", units.BytesSize(float64(info.MemTotal)))
124
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), "Name: %s\n", info.Name)
125
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), "ID: %s\n", info.ID)
126
-	fmt.Fprintf(dockerCli.Out(), "Docker Root Dir: %s\n", info.DockerRootDir)
127
-	fmt.Fprintf(dockerCli.Out(), "Debug Mode (client): %v\n", utils.IsDebugEnabled())
128
-	fmt.Fprintf(dockerCli.Out(), "Debug Mode (server): %v\n", info.Debug)
129
-
130
-	if info.Debug {
131
-		fmt.Fprintf(dockerCli.Out(), " File Descriptors: %d\n", info.NFd)
132
-		fmt.Fprintf(dockerCli.Out(), " Goroutines: %d\n", info.NGoroutines)
133
-		fmt.Fprintf(dockerCli.Out(), " System Time: %s\n", info.SystemTime)
134
-		fmt.Fprintf(dockerCli.Out(), " EventsListeners: %d\n", info.NEventsListener)
135
-	}
136
-
137
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), "Http Proxy: %s\n", info.HTTPProxy)
138
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), "Https Proxy: %s\n", info.HTTPSProxy)
139
-	ioutils.FprintfIfNotEmpty(dockerCli.Out(), "No Proxy: %s\n", info.NoProxy)
140
-
141
-	if info.IndexServerAddress != "" {
142
-		u := dockerCli.ConfigFile().AuthConfigs[info.IndexServerAddress].Username
143
-		if len(u) > 0 {
144
-			fmt.Fprintf(dockerCli.Out(), "Username: %v\n", u)
145
-		}
146
-		fmt.Fprintf(dockerCli.Out(), "Registry: %v\n", info.IndexServerAddress)
147
-	}
148
-
149
-	// Only output these warnings if the server does not support these features
150
-	if info.OSType != "windows" {
151
-		if !info.MemoryLimit {
152
-			fmt.Fprintln(dockerCli.Err(), "WARNING: No memory limit support")
153
-		}
154
-		if !info.SwapLimit {
155
-			fmt.Fprintln(dockerCli.Err(), "WARNING: No swap limit support")
156
-		}
157
-		if !info.KernelMemory {
158
-			fmt.Fprintln(dockerCli.Err(), "WARNING: No kernel memory limit support")
159
-		}
160
-		if !info.OomKillDisable {
161
-			fmt.Fprintln(dockerCli.Err(), "WARNING: No oom kill disable support")
162
-		}
163
-		if !info.CPUCfsQuota {
164
-			fmt.Fprintln(dockerCli.Err(), "WARNING: No cpu cfs quota support")
165
-		}
166
-		if !info.CPUCfsPeriod {
167
-			fmt.Fprintln(dockerCli.Err(), "WARNING: No cpu cfs period support")
168
-		}
169
-		if !info.CPUShares {
170
-			fmt.Fprintln(dockerCli.Err(), "WARNING: No cpu shares support")
171
-		}
172
-		if !info.CPUSet {
173
-			fmt.Fprintln(dockerCli.Err(), "WARNING: No cpuset support")
174
-		}
175
-		if !info.IPv4Forwarding {
176
-			fmt.Fprintln(dockerCli.Err(), "WARNING: IPv4 forwarding is disabled")
177
-		}
178
-		if !info.BridgeNfIptables {
179
-			fmt.Fprintln(dockerCli.Err(), "WARNING: bridge-nf-call-iptables is disabled")
180
-		}
181
-		if !info.BridgeNfIP6tables {
182
-			fmt.Fprintln(dockerCli.Err(), "WARNING: bridge-nf-call-ip6tables is disabled")
183
-		}
184
-	}
185
-
186
-	if info.Labels != nil {
187
-		fmt.Fprintln(dockerCli.Out(), "Labels:")
188
-		for _, attribute := range info.Labels {
189
-			fmt.Fprintf(dockerCli.Out(), " %s\n", attribute)
190
-		}
191
-	}
192
-
193
-	ioutils.FprintfIfTrue(dockerCli.Out(), "Experimental: %v\n", info.ExperimentalBuild)
194
-	if info.ClusterStore != "" {
195
-		fmt.Fprintf(dockerCli.Out(), "Cluster Store: %s\n", info.ClusterStore)
196
-	}
197
-
198
-	if info.ClusterAdvertise != "" {
199
-		fmt.Fprintf(dockerCli.Out(), "Cluster Advertise: %s\n", info.ClusterAdvertise)
200
-	}
201
-
202
-	if info.RegistryConfig != nil && (len(info.RegistryConfig.InsecureRegistryCIDRs) > 0 || len(info.RegistryConfig.IndexConfigs) > 0) {
203
-		fmt.Fprintln(dockerCli.Out(), "Insecure Registries:")
204
-		for _, registry := range info.RegistryConfig.IndexConfigs {
205
-			if registry.Secure == false {
206
-				fmt.Fprintf(dockerCli.Out(), " %s\n", registry.Name)
207
-			}
208
-		}
209
-
210
-		for _, registry := range info.RegistryConfig.InsecureRegistryCIDRs {
211
-			mask, _ := registry.Mask.Size()
212
-			fmt.Fprintf(dockerCli.Out(), " %s/%d\n", registry.IP.String(), mask)
213
-		}
214
-	}
215
-	return nil
216
-}