mirror of https://github.com/docker/cli.git
app-214 Load Client info in getter function
Signed-off-by: Anca Iordache <anca.iordache@docker.com>
Possible approach for client info
- split ClientInfo() into ClientInfo() and loadClientInfo()
- split ConfigFile() into ConfigFile() and loadConfigFile()
- ConfigFile() and ClientInfo() call their corresponding loadXX function
if it has not yet been loaded; this allows them to be used before
Initialize() was called.
- Initialize() *always* (re-)loads the configuration; this makes sure
that the correct configuration is used when actually calling commands.
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
(cherry picked from commit 22a5dad847
)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
e470eef36f
commit
25f04876d1
|
@ -25,6 +25,7 @@ import (
|
||||||
"github.com/docker/cli/internal/containerizedengine"
|
"github.com/docker/cli/internal/containerizedengine"
|
||||||
dopts "github.com/docker/cli/opts"
|
dopts "github.com/docker/cli/opts"
|
||||||
clitypes "github.com/docker/cli/types"
|
clitypes "github.com/docker/cli/types"
|
||||||
|
"github.com/docker/docker/api"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
registrytypes "github.com/docker/docker/api/types/registry"
|
registrytypes "github.com/docker/docker/api/types/registry"
|
||||||
"github.com/docker/docker/client"
|
"github.com/docker/docker/client"
|
||||||
|
@ -76,7 +77,7 @@ type DockerCli struct {
|
||||||
err io.Writer
|
err io.Writer
|
||||||
client client.APIClient
|
client client.APIClient
|
||||||
serverInfo ServerInfo
|
serverInfo ServerInfo
|
||||||
clientInfo ClientInfo
|
clientInfo *ClientInfo
|
||||||
contentTrust bool
|
contentTrust bool
|
||||||
newContainerizeClient func(string) (clitypes.ContainerizedClient, error)
|
newContainerizeClient func(string) (clitypes.ContainerizedClient, error)
|
||||||
contextStore store.Store
|
contextStore store.Store
|
||||||
|
@ -87,7 +88,7 @@ type DockerCli struct {
|
||||||
|
|
||||||
// DefaultVersion returns api.defaultVersion or DOCKER_API_VERSION if specified.
|
// DefaultVersion returns api.defaultVersion or DOCKER_API_VERSION if specified.
|
||||||
func (cli *DockerCli) DefaultVersion() string {
|
func (cli *DockerCli) DefaultVersion() string {
|
||||||
return cli.clientInfo.DefaultVersion
|
return cli.ClientInfo().DefaultVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
// Client returns the APIClient
|
// Client returns the APIClient
|
||||||
|
@ -126,9 +127,16 @@ func ShowHelp(err io.Writer) func(*cobra.Command, []string) error {
|
||||||
|
|
||||||
// ConfigFile returns the ConfigFile
|
// ConfigFile returns the ConfigFile
|
||||||
func (cli *DockerCli) ConfigFile() *configfile.ConfigFile {
|
func (cli *DockerCli) ConfigFile() *configfile.ConfigFile {
|
||||||
|
if cli.configFile == nil {
|
||||||
|
cli.loadConfigFile()
|
||||||
|
}
|
||||||
return cli.configFile
|
return cli.configFile
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cli *DockerCli) loadConfigFile() {
|
||||||
|
cli.configFile = cliconfig.LoadDefaultConfigFile(cli.err)
|
||||||
|
}
|
||||||
|
|
||||||
// ServerInfo returns the server version details for the host this client is
|
// ServerInfo returns the server version details for the host this client is
|
||||||
// connected to
|
// connected to
|
||||||
func (cli *DockerCli) ServerInfo() ServerInfo {
|
func (cli *DockerCli) ServerInfo() ServerInfo {
|
||||||
|
@ -137,7 +145,34 @@ func (cli *DockerCli) ServerInfo() ServerInfo {
|
||||||
|
|
||||||
// ClientInfo returns the client details for the cli
|
// ClientInfo returns the client details for the cli
|
||||||
func (cli *DockerCli) ClientInfo() ClientInfo {
|
func (cli *DockerCli) ClientInfo() ClientInfo {
|
||||||
return cli.clientInfo
|
if cli.clientInfo == nil {
|
||||||
|
_ = cli.loadClientInfo()
|
||||||
|
}
|
||||||
|
return *cli.clientInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cli *DockerCli) loadClientInfo() error {
|
||||||
|
var experimentalValue string
|
||||||
|
// Environment variable always overrides configuration
|
||||||
|
if experimentalValue = os.Getenv("DOCKER_CLI_EXPERIMENTAL"); experimentalValue == "" {
|
||||||
|
experimentalValue = cli.ConfigFile().Experimental
|
||||||
|
}
|
||||||
|
hasExperimental, err := isEnabled(experimentalValue)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "Experimental field")
|
||||||
|
}
|
||||||
|
|
||||||
|
var v string
|
||||||
|
if cli.client != nil {
|
||||||
|
v = cli.client.ClientVersion()
|
||||||
|
} else {
|
||||||
|
v = api.DefaultVersion
|
||||||
|
}
|
||||||
|
cli.clientInfo = &ClientInfo{
|
||||||
|
DefaultVersion: v,
|
||||||
|
HasExperimental: hasExperimental,
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContentTrustEnabled returns whether content trust has been enabled by an
|
// ContentTrustEnabled returns whether content trust has been enabled by an
|
||||||
|
@ -207,7 +242,7 @@ func (cli *DockerCli) Initialize(opts *cliflags.ClientOptions, ops ...Initialize
|
||||||
debug.Enable()
|
debug.Enable()
|
||||||
}
|
}
|
||||||
|
|
||||||
cli.configFile = cliconfig.LoadDefaultConfigFile(cli.err)
|
cli.loadConfigFile()
|
||||||
|
|
||||||
baseContextStore := store.New(cliconfig.ContextStoreDir(), cli.contextStoreConfig)
|
baseContextStore := store.New(cliconfig.ContextStoreDir(), cli.contextStoreConfig)
|
||||||
cli.contextStore = &ContextStoreWithDefault{
|
cli.contextStore = &ContextStoreWithDefault{
|
||||||
|
@ -239,18 +274,9 @@ func (cli *DockerCli) Initialize(opts *cliflags.ClientOptions, ops ...Initialize
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var experimentalValue string
|
err = cli.loadClientInfo()
|
||||||
// Environment variable always overrides configuration
|
|
||||||
if experimentalValue = os.Getenv("DOCKER_CLI_EXPERIMENTAL"); experimentalValue == "" {
|
|
||||||
experimentalValue = cli.configFile.Experimental
|
|
||||||
}
|
|
||||||
hasExperimental, err := isEnabled(experimentalValue)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "Experimental field")
|
return err
|
||||||
}
|
|
||||||
cli.clientInfo = ClientInfo{
|
|
||||||
DefaultVersion: cli.client.ClientVersion(),
|
|
||||||
HasExperimental: hasExperimental,
|
|
||||||
}
|
}
|
||||||
cli.initializeFromClient()
|
cli.initializeFromClient()
|
||||||
return nil
|
return nil
|
||||||
|
|
Loading…
Reference in New Issue