Check other dirs for .dockercfg

pull/6/head
Mike Danese 2015-01-27 12:16:47 -08:00
parent c3da4f0b19
commit 33f158073b
4 changed files with 51 additions and 20 deletions

View File

@ -27,6 +27,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/cmd/kubelet/app" "github.com/GoogleCloudPlatform/kubernetes/cmd/kubelet/app"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api" "github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/credentialprovider"
_ "github.com/GoogleCloudPlatform/kubernetes/pkg/healthz" _ "github.com/GoogleCloudPlatform/kubernetes/pkg/healthz"
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet"
"github.com/GoogleCloudPlatform/kubernetes/pkg/master/ports" "github.com/GoogleCloudPlatform/kubernetes/pkg/master/ports"
@ -127,6 +128,8 @@ func main() {
glog.Warningf("No API client: %v", err) glog.Warningf("No API client: %v", err)
} }
credentialprovider.SetPreferredDockercfgPath(*rootDirectory)
kcfg := standalone.KubeletConfig{ kcfg := standalone.KubeletConfig{
Address: address, Address: address,
AllowPrivileged: *allowPrivileged, AllowPrivileged: *allowPrivileged,

View File

@ -25,6 +25,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
"sync"
"github.com/golang/glog" "github.com/golang/glog"
) )
@ -40,28 +41,52 @@ type DockerConfigEntry struct {
Email string Email string
} }
const ( var (
dockerConfigFileLocation = ".dockercfg" preferredPathLock sync.Mutex
preferredPath = ""
workingDirPath = ""
homeDirPath = os.Getenv("HOME")
rootDirPath = "/"
configFileName = ".dockercfg"
) )
func ReadDockerConfigFile() (cfg DockerConfig, err error) { func SetPreferredDockercfgPath(path string) {
// TODO(mattmoor): This causes the Kubelet to read /.dockercfg, preferredPathLock.Lock()
// which is incorrect. It should come from $HOME/.dockercfg. defer preferredPathLock.Unlock()
absDockerConfigFileLocation, err := filepath.Abs(dockerConfigFileLocation) preferredPath = path
if err != nil {
glog.Errorf("while trying to canonicalize %s: %v", dockerConfigFileLocation, err)
}
glog.V(2).Infof("looking for .dockercfg at %s", absDockerConfigFileLocation)
contents, err := ioutil.ReadFile(absDockerConfigFileLocation)
if os.IsNotExist(err) {
return make(DockerConfig), nil
}
if err != nil {
glog.Errorf("while trying to read %s: %v", absDockerConfigFileLocation, err)
return nil, err
} }
return readDockerConfigFileFromBytes(contents) func GetPreferredDockercfgPath() string {
preferredPathLock.Lock()
defer preferredPathLock.Unlock()
return preferredPath
}
func ReadDockerConfigFile() (cfg DockerConfig, err error) {
dockerConfigFileLocations := []string{GetPreferredDockercfgPath(), workingDirPath, homeDirPath, rootDirPath}
for _, configPath := range dockerConfigFileLocations {
absDockerConfigFileLocation, err := filepath.Abs(filepath.Join(configPath, configFileName))
if err != nil {
glog.Errorf("while trying to canonicalize %s: %v", configPath, err)
continue
}
glog.V(4).Infof("looking for .dockercfg at %s", absDockerConfigFileLocation)
contents, err := ioutil.ReadFile(absDockerConfigFileLocation)
if os.IsNotExist(err) {
continue
}
if err != nil {
glog.V(4).Infof("while trying to read %s: %v", absDockerConfigFileLocation, err)
continue
}
cfg, err := readDockerConfigFileFromBytes(contents)
if err == nil {
glog.V(4).Infof("found .dockercfg at %s", absDockerConfigFileLocation)
return cfg, nil
}
}
return nil, fmt.Errorf("couldn't find valid .dockercfg after checking in %v", dockerConfigFileLocations)
} }
// HttpError wraps a non-StatusOK error code as an error. // HttpError wraps a non-StatusOK error code as an error.

View File

@ -68,7 +68,7 @@ func (d *defaultDockerConfigProvider) Provide() DockerConfig {
if cfg, err := ReadDockerConfigFile(); err == nil { if cfg, err := ReadDockerConfigFile(); err == nil {
return cfg return cfg
} else if !os.IsNotExist(err) { } else if !os.IsNotExist(err) {
glog.V(1).Infof("Unable to parse Docker config file: %v", err) glog.V(4).Infof("Unable to parse Docker config file: %v", err)
} }
return DockerConfig{} return DockerConfig{}
} }

View File

@ -30,6 +30,7 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/clientauth" "github.com/GoogleCloudPlatform/kubernetes/pkg/clientauth"
nodeControllerPkg "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/controller" nodeControllerPkg "github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider/controller"
"github.com/GoogleCloudPlatform/kubernetes/pkg/controller" "github.com/GoogleCloudPlatform/kubernetes/pkg/controller"
"github.com/GoogleCloudPlatform/kubernetes/pkg/credentialprovider"
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet"
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/config" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/config"
"github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/dockertools" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/dockertools"
@ -188,6 +189,8 @@ func RunKubelet(kcfg *KubeletConfig) {
kubelet.SetupLogging() kubelet.SetupLogging()
kubelet.SetupCapabilities(kcfg.AllowPrivileged) kubelet.SetupCapabilities(kcfg.AllowPrivileged)
credentialprovider.SetPreferredDockercfgPath(kcfg.RootDirectory)
cfg := makePodSourceConfig(kcfg) cfg := makePodSourceConfig(kcfg)
k, err := createAndInitKubelet(kcfg, cfg) k, err := createAndInitKubelet(kcfg, cfg)
if err != nil { if err != nil {