Move config file loading to more appropriate packages.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
Daniel Nephin 2017-06-12 11:36:49 -07:00 committed by Vincent Demeester
parent 2eac0bb7b7
commit a8c70e43a3
No known key found for this signature in database
GPG Key ID: 083CC6FD6EB699A3
6 changed files with 33 additions and 35 deletions

View File

@ -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)

View File

@ -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
}

View File

@ -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" } } }`

View File

@ -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 {

View File

@ -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)
}

View File

@ -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
} }