Signed-off-by: Kunal Kushwaha <kushwaha_kunal_v7@lab.ntt.co.jp>
| ... | ... |
@@ -44,6 +44,19 @@ func (cli *DockerCli) CmdInfo(args ...string) error {
|
| 44 | 44 |
} |
| 45 | 45 |
ioutils.FprintfIfNotEmpty(cli.out, "Execution Driver: %s\n", info.ExecutionDriver) |
| 46 | 46 |
ioutils.FprintfIfNotEmpty(cli.out, "Logging Driver: %s\n", info.LoggingDriver) |
| 47 |
+ |
|
| 48 |
+ fmt.Fprintf(cli.out, "Plugins: \n") |
|
| 49 |
+ fmt.Fprintf(cli.out, " Volume:") |
|
| 50 |
+ for _, driver := range info.Plugins.Volume {
|
|
| 51 |
+ fmt.Fprintf(cli.out, " %s", driver) |
|
| 52 |
+ } |
|
| 53 |
+ fmt.Fprintf(cli.out, "\n") |
|
| 54 |
+ fmt.Fprintf(cli.out, " Network:") |
|
| 55 |
+ for _, driver := range info.Plugins.Network {
|
|
| 56 |
+ fmt.Fprintf(cli.out, " %s", driver) |
|
| 57 |
+ } |
|
| 58 |
+ fmt.Fprintf(cli.out, "\n") |
|
| 59 |
+ |
|
| 47 | 60 |
ioutils.FprintfIfNotEmpty(cli.out, "Kernel Version: %s\n", info.KernelVersion) |
| 48 | 61 |
ioutils.FprintfIfNotEmpty(cli.out, "Operating System: %s\n", info.OperatingSystem) |
| 49 | 62 |
fmt.Fprintf(cli.out, "CPUs: %d\n", info.NCPU) |
| ... | ... |
@@ -188,6 +188,7 @@ type Info struct {
|
| 188 | 188 |
Images int |
| 189 | 189 |
Driver string |
| 190 | 190 |
DriverStatus [][2]string |
| 191 |
+ Plugins PluginsInfo |
|
| 191 | 192 |
MemoryLimit bool |
| 192 | 193 |
SwapLimit bool |
| 193 | 194 |
CPUCfsPeriod bool `json:"CpuCfsPeriod"` |
| ... | ... |
@@ -225,6 +226,15 @@ type Info struct {
|
| 225 | 225 |
ClusterAdvertise string |
| 226 | 226 |
} |
| 227 | 227 |
|
| 228 |
+// PluginsInfo is temp struct holds Plugins name |
|
| 229 |
+// registered with docker daemon. It used by Info struct |
|
| 230 |
+type PluginsInfo struct {
|
|
| 231 |
+ // List of Volume plugins registered |
|
| 232 |
+ Volume []string |
|
| 233 |
+ // List of Network plugins registered |
|
| 234 |
+ Network []string |
|
| 235 |
+} |
|
| 236 |
+ |
|
| 228 | 237 |
// ExecStartCheck is a temp struct used by execStart |
| 229 | 238 |
// Config fields is part of ExecConfig in runconfig package |
| 230 | 239 |
type ExecStartCheck struct {
|
| ... | ... |
@@ -15,6 +15,7 @@ import ( |
| 15 | 15 |
"github.com/docker/docker/pkg/system" |
| 16 | 16 |
"github.com/docker/docker/registry" |
| 17 | 17 |
"github.com/docker/docker/utils" |
| 18 |
+ "github.com/docker/docker/volume/drivers" |
|
| 18 | 19 |
) |
| 19 | 20 |
|
| 20 | 21 |
// SystemInfo returns information about the host server the daemon is running on. |
| ... | ... |
@@ -62,6 +63,7 @@ func (daemon *Daemon) SystemInfo() (*types.Info, error) {
|
| 62 | 62 |
Images: len(daemon.Graph().Map()), |
| 63 | 63 |
Driver: daemon.GraphDriver().String(), |
| 64 | 64 |
DriverStatus: daemon.GraphDriver().Status(), |
| 65 |
+ Plugins: daemon.showPluginsInfo(), |
|
| 65 | 66 |
IPv4Forwarding: !sysInfo.IPv4ForwardingDisabled, |
| 66 | 67 |
BridgeNfIptables: !sysInfo.BridgeNfCallIptablesDisabled, |
| 67 | 68 |
BridgeNfIP6tables: !sysInfo.BridgeNfCallIP6tablesDisabled, |
| ... | ... |
@@ -111,3 +113,16 @@ func (daemon *Daemon) SystemInfo() (*types.Info, error) {
|
| 111 | 111 |
|
| 112 | 112 |
return v, nil |
| 113 | 113 |
} |
| 114 |
+ |
|
| 115 |
+func (daemon *Daemon) showPluginsInfo() types.PluginsInfo {
|
|
| 116 |
+ var pluginsInfo types.PluginsInfo |
|
| 117 |
+ |
|
| 118 |
+ pluginsInfo.Volume = volumedrivers.GetDriverList() |
|
| 119 |
+ |
|
| 120 |
+ networkDriverList := daemon.GetNetworkDriverList() |
|
| 121 |
+ for nd := range networkDriverList {
|
|
| 122 |
+ pluginsInfo.Network = append(pluginsInfo.Network, nd) |
|
| 123 |
+ } |
|
| 124 |
+ |
|
| 125 |
+ return pluginsInfo |
|
| 126 |
+} |
| ... | ... |
@@ -146,3 +146,19 @@ func (daemon *Daemon) DisconnectContainerFromNetwork(containerName string, netwo |
| 146 | 146 |
} |
| 147 | 147 |
return container.DisconnectFromNetwork(network) |
| 148 | 148 |
} |
| 149 |
+ |
|
| 150 |
+// GetNetworkDriverList returns the list of plugins drivers |
|
| 151 |
+// registered for network. |
|
| 152 |
+func (daemon *Daemon) GetNetworkDriverList() map[string]bool {
|
|
| 153 |
+ pluginList := make(map[string]bool) |
|
| 154 |
+ |
|
| 155 |
+ c := daemon.netController |
|
| 156 |
+ networks := c.Networks() |
|
| 157 |
+ |
|
| 158 |
+ for _, network := range networks {
|
|
| 159 |
+ driver := network.Type() |
|
| 160 |
+ pluginList[driver] = true |
|
| 161 |
+ } |
|
| 162 |
+ |
|
| 163 |
+ return pluginList |
|
| 164 |
+} |
| ... | ... |
@@ -1891,6 +1891,16 @@ Display system-wide information |
| 1891 | 1891 |
"DockerRootDir": "/var/lib/docker", |
| 1892 | 1892 |
"Driver": "btrfs", |
| 1893 | 1893 |
"DriverStatus": [[""]], |
| 1894 |
+ "Plugins": {
|
|
| 1895 |
+ "Volume": [ |
|
| 1896 |
+ "local" |
|
| 1897 |
+ ], |
|
| 1898 |
+ "Network": [ |
|
| 1899 |
+ "null", |
|
| 1900 |
+ "host", |
|
| 1901 |
+ "bridge" |
|
| 1902 |
+ ] |
|
| 1903 |
+ }, |
|
| 1894 | 1904 |
"ExecutionDriver": "native-0.1", |
| 1895 | 1905 |
"ExperimentalBuild": false, |
| 1896 | 1906 |
"HttpProxy": "http://test:test@localhost:8080", |
| ... | ... |
@@ -106,3 +106,13 @@ func GetDriver(name string) (volume.Driver, error) {
|
| 106 | 106 |
} |
| 107 | 107 |
return Lookup(name) |
| 108 | 108 |
} |
| 109 |
+ |
|
| 110 |
+// GetDriverList returns list of volume drivers registered. |
|
| 111 |
+// If no driver is registered, empty string list will be returned. |
|
| 112 |
+func GetDriverList() []string {
|
|
| 113 |
+ var driverList []string |
|
| 114 |
+ for driverName := range drivers.extensions {
|
|
| 115 |
+ driverList = append(driverList, driverName) |
|
| 116 |
+ } |
|
| 117 |
+ return driverList |
|
| 118 |
+} |