Merge pull request #31830 from dnephin/refactor-cli-state

Small cleanup now that we have multiple details about the server stored on the cli
This commit is contained in:
Sebastiaan van Stijn 2017-03-29 13:36:32 +02:00 committed by GitHub
commit 9cfbcd4471
1 changed files with 27 additions and 23 deletions

View File

@ -50,22 +50,11 @@ type DockerCli struct {
err io.Writer err io.Writer
keyFile string keyFile string
client client.APIClient client client.APIClient
hasExperimental bool
osType string
defaultVersion string defaultVersion string
server ServerInfo
} }
// HasExperimental returns true if experimental features are accessible. // DefaultVersion returns api.defaultVersion or DOCKER_API_VERSION if specified.
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.
func (cli *DockerCli) DefaultVersion() string { func (cli *DockerCli) DefaultVersion() string {
return cli.defaultVersion return cli.defaultVersion
} }
@ -102,6 +91,12 @@ func (cli *DockerCli) ConfigFile() *configfile.ConfigFile {
return cli.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 // GetAllCredentials returns all of the credentials stored in all of the
// configured credential stores. // configured credential stores.
func (cli *DockerCli) GetAllCredentials() (map[string]types.AuthConfig, error) { func (cli *DockerCli) GetAllCredentials() (map[string]types.AuthConfig, error) {
@ -161,7 +156,6 @@ func (cli *DockerCli) Initialize(opts *cliflags.ClientOptions) error {
if err != nil { if err != nil {
return err return err
} }
cli.defaultVersion = cli.client.ClientVersion() cli.defaultVersion = cli.client.ClientVersion()
if opts.Common.TrustKey == "" { 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 { if ping, err := cli.client.Ping(context.Background()); err == nil {
cli.hasExperimental = ping.Experimental cli.server = ServerInfo{
cli.osType = ping.OSType 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. // since the new header was added in 1.25, assume server is 1.24 if header is not present.
if ping.APIVersion == "" { if ping.APIVersion == "" {
@ -184,9 +180,17 @@ func (cli *DockerCli) Initialize(opts *cliflags.ClientOptions) error {
cli.client.UpdateClientVersion(ping.APIVersion) cli.client.UpdateClientVersion(ping.APIVersion)
} }
} }
return nil 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. // 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 { func NewDockerCli(in io.ReadCloser, out, err io.Writer) *DockerCli {
return &DockerCli{in: NewInStream(in), out: NewOutStream(out), err: err} return &DockerCli{in: NewInStream(in), out: NewOutStream(out), err: err}