mirror of https://github.com/docker/cli.git
Move config file loading to more appropriate packages.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
parent
2eac0bb7b7
commit
a8c70e43a3
|
@ -1,7 +1,6 @@
|
||||||
package command
|
package command
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
@ -156,7 +155,7 @@ func getConfiguredCredentialStore(c *configfile.ConfigFile, serverAddress string
|
||||||
// Initialize the dockerCli runs initialization that must happen after command
|
// Initialize the dockerCli runs initialization that must happen after command
|
||||||
// line flags are parsed.
|
// line flags are parsed.
|
||||||
func (cli *DockerCli) Initialize(opts *cliflags.ClientOptions) error {
|
func (cli *DockerCli) Initialize(opts *cliflags.ClientOptions) error {
|
||||||
cli.configFile = LoadDefaultConfigFile(cli.err)
|
cli.configFile = cliconfig.LoadDefaultConfigFile(cli.err)
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
cli.client, err = NewAPIClientFromFlags(opts.Common, cli.configFile)
|
cli.client, err = NewAPIClientFromFlags(opts.Common, cli.configFile)
|
||||||
|
@ -213,19 +212,6 @@ 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}
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadDefaultConfigFile attempts to load the default config file and returns
|
|
||||||
// an initialized ConfigFile struct if none is found.
|
|
||||||
func LoadDefaultConfigFile(err io.Writer) *configfile.ConfigFile {
|
|
||||||
configFile, e := cliconfig.Load(cliconfig.Dir())
|
|
||||||
if e != nil {
|
|
||||||
fmt.Fprintf(err, "WARNING: Error loading config file:%v\n", e)
|
|
||||||
}
|
|
||||||
if !configFile.ContainsAuth() {
|
|
||||||
credentials.DetectDefaultStore(configFile)
|
|
||||||
}
|
|
||||||
return configFile
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewAPIClientFromFlags creates a new APIClient from command line flags
|
// NewAPIClientFromFlags creates a new APIClient from command line flags
|
||||||
func NewAPIClientFromFlags(opts *cliflags.CommonOptions, configFile *configfile.ConfigFile) (client.APIClient, error) {
|
func NewAPIClientFromFlags(opts *cliflags.CommonOptions, configFile *configfile.ConfigFile) (client.APIClient, error) {
|
||||||
host, err := getServerHost(opts.Hosts, opts.TLSOptions)
|
host, err := getServerHost(opts.Hosts, opts.TLSOptions)
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/docker/cli/cli/config/configfile"
|
"github.com/docker/cli/cli/config/configfile"
|
||||||
|
"github.com/docker/cli/cli/config/credentials"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/pkg/homedir"
|
"github.com/docker/docker/pkg/homedir"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
@ -38,15 +40,6 @@ func SetDir(dir string) {
|
||||||
configDir = dir
|
configDir = dir
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewConfigFile initializes an empty configuration file for the given filename 'fn'
|
|
||||||
func NewConfigFile(fn string) *configfile.ConfigFile {
|
|
||||||
return &configfile.ConfigFile{
|
|
||||||
AuthConfigs: make(map[string]types.AuthConfig),
|
|
||||||
HTTPHeaders: make(map[string]string),
|
|
||||||
Filename: fn,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// LegacyLoadFromReader is a convenience function that creates a ConfigFile object from
|
// LegacyLoadFromReader is a convenience function that creates a ConfigFile object from
|
||||||
// a non-nested reader
|
// a non-nested reader
|
||||||
func LegacyLoadFromReader(configData io.Reader) (*configfile.ConfigFile, error) {
|
func LegacyLoadFromReader(configData io.Reader) (*configfile.ConfigFile, error) {
|
||||||
|
@ -118,3 +111,16 @@ func Load(configDir string) (*configfile.ConfigFile, error) {
|
||||||
}
|
}
|
||||||
return &configFile, nil
|
return &configFile, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LoadDefaultConfigFile attempts to load the default config file and returns
|
||||||
|
// an initialized ConfigFile struct if none is found.
|
||||||
|
func LoadDefaultConfigFile(err io.Writer) *configfile.ConfigFile {
|
||||||
|
configFile, e := Load(Dir())
|
||||||
|
if e != nil {
|
||||||
|
fmt.Fprintf(err, "WARNING: Error loading config file:%v\n", e)
|
||||||
|
}
|
||||||
|
if !configFile.ContainsAuth() {
|
||||||
|
credentials.DetectDefaultStore(configFile)
|
||||||
|
}
|
||||||
|
return configFile
|
||||||
|
}
|
||||||
|
|
|
@ -484,15 +484,6 @@ func TestConfigDir(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestConfigFile(t *testing.T) {
|
|
||||||
configFilename := "configFilename"
|
|
||||||
configFile := NewConfigFile(configFilename)
|
|
||||||
|
|
||||||
if configFile.Filename != configFilename {
|
|
||||||
t.Fatalf("Expected %s, got %s", configFilename, configFile.Filename)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestJSONReaderNoFile(t *testing.T) {
|
func TestJSONReaderNoFile(t *testing.T) {
|
||||||
js := ` { "auths": { "https://index.docker.io/v1/": { "auth": "am9lam9lOmhlbGxv", "email": "user@example.com" } } }`
|
js := ` { "auths": { "https://index.docker.io/v1/": { "auth": "am9lam9lOmhlbGxv", "email": "user@example.com" } } }`
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,15 @@ type ProxyConfig struct {
|
||||||
FTPProxy string `json:"ftpProxy,omitempty"`
|
FTPProxy string `json:"ftpProxy,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewConfigFile initializes an empty configuration file for the given filename 'fn'
|
||||||
|
func NewConfigFile(fn string) *ConfigFile {
|
||||||
|
return &ConfigFile{
|
||||||
|
AuthConfigs: make(map[string]types.AuthConfig),
|
||||||
|
HTTPHeaders: make(map[string]string),
|
||||||
|
Filename: fn,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// LegacyLoadFromReader reads the non-nested configuration data given and sets up the
|
// LegacyLoadFromReader reads the non-nested configuration data given and sets up the
|
||||||
// auth config information with given directory and populates the receiver object
|
// auth config information with given directory and populates the receiver object
|
||||||
func (configFile *ConfigFile) LegacyLoadFromReader(configData io.Reader) error {
|
func (configFile *ConfigFile) LegacyLoadFromReader(configData io.Reader) error {
|
||||||
|
|
|
@ -142,3 +142,10 @@ func TestProxyConfigPerHost(t *testing.T) {
|
||||||
}
|
}
|
||||||
assert.Equal(t, expected, proxyConfig)
|
assert.Equal(t, expected, proxyConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConfigFile(t *testing.T) {
|
||||||
|
configFilename := "configFilename"
|
||||||
|
configFile := NewConfigFile(configFilename)
|
||||||
|
|
||||||
|
assert.Equal(t, configFilename, configFile.Filename)
|
||||||
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
cliconfig "github.com/docker/cli/cli/config"
|
|
||||||
"github.com/docker/cli/cli/config/configfile"
|
"github.com/docker/cli/cli/config/configfile"
|
||||||
"github.com/docker/docker/api/types"
|
"github.com/docker/docker/api/types"
|
||||||
)
|
)
|
||||||
|
@ -14,7 +13,7 @@ func newConfigFile(auths map[string]types.AuthConfig) *configfile.ConfigFile {
|
||||||
name := tmp.Name()
|
name := tmp.Name()
|
||||||
tmp.Close()
|
tmp.Close()
|
||||||
|
|
||||||
c := cliconfig.NewConfigFile(name)
|
c := configfile.NewConfigFile(name)
|
||||||
c.AuthConfigs = auths
|
c.AuthConfigs = auths
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue