diff --git a/command/cli.go b/command/cli.go index e2a89eb0b2..6194bae1cc 100644 --- a/command/cli.go +++ b/command/cli.go @@ -44,28 +44,17 @@ type Cli interface { // DockerCli is an instance the docker command line client. // Instances of the client can be returned from NewDockerCli. type DockerCli struct { - configFile *configfile.ConfigFile - in *InStream - out *OutStream - err io.Writer - keyFile string - client client.APIClient - hasExperimental bool - osType string - defaultVersion string + configFile *configfile.ConfigFile + in *InStream + out *OutStream + err io.Writer + keyFile string + client client.APIClient + defaultVersion string + server ServerInfo } -// HasExperimental returns true if experimental features are accessible. -func (cli *DockerCli) HasExperimental() bool { - return cli.hasExperimental -} - -// OSType returns the operating system the daemon is running on. -func (cli *DockerCli) OSType() string { - return cli.osType -} - -// DefaultVersion returns api.defaultVersion of DOCKER_API_VERSION if specified. +// DefaultVersion returns api.defaultVersion or DOCKER_API_VERSION if specified. func (cli *DockerCli) DefaultVersion() string { return cli.defaultVersion } @@ -102,6 +91,12 @@ func (cli *DockerCli) ConfigFile() *configfile.ConfigFile { return cli.configFile } +// ServerInfo returns the server version details for the host this client is +// connected to +func (cli *DockerCli) ServerInfo() ServerInfo { + return cli.server +} + // GetAllCredentials returns all of the credentials stored in all of the // configured credential stores. func (cli *DockerCli) GetAllCredentials() (map[string]types.AuthConfig, error) { @@ -161,7 +156,6 @@ func (cli *DockerCli) Initialize(opts *cliflags.ClientOptions) error { if err != nil { return err } - cli.defaultVersion = cli.client.ClientVersion() if opts.Common.TrustKey == "" { @@ -171,8 +165,10 @@ func (cli *DockerCli) Initialize(opts *cliflags.ClientOptions) error { } if ping, err := cli.client.Ping(context.Background()); err == nil { - cli.hasExperimental = ping.Experimental - cli.osType = ping.OSType + cli.server = ServerInfo{ + HasExperimental: ping.Experimental, + OSType: ping.OSType, + } // since the new header was added in 1.25, assume server is 1.24 if header is not present. if ping.APIVersion == "" { @@ -184,9 +180,17 @@ func (cli *DockerCli) Initialize(opts *cliflags.ClientOptions) error { cli.client.UpdateClientVersion(ping.APIVersion) } } + return nil } +// ServerInfo stores details about the supported features and platform of the +// server +type ServerInfo struct { + HasExperimental bool + OSType string +} + // NewDockerCli returns a DockerCli instance with IO output and error streams set by in, out and err. func NewDockerCli(in io.ReadCloser, out, err io.Writer) *DockerCli { return &DockerCli{in: NewInStream(in), out: NewOutStream(out), err: err}