Allow DOCKER_CONFIG to be a filename (#1409)
* Allow DOCKER_CONFIG to be a filename * UnitTest: DockerConfLocation must return a file if it is existent and passed using env, or default if the file is incorrect
This commit is contained in:
parent
b4824582fb
commit
ab768b5d26
|
|
@ -67,8 +67,18 @@ const (
|
|||
// "/kaniko/.docker/config.json".
|
||||
func DockerConfLocation() string {
|
||||
configFile := "config.json"
|
||||
if dockerConfDir := os.Getenv("DOCKER_CONFIG"); dockerConfDir != "" {
|
||||
return filepath.Join(dockerConfDir, configFile)
|
||||
if dockerConfig := os.Getenv("DOCKER_CONFIG"); dockerConfig != "" {
|
||||
file, err := os.Stat(dockerConfig)
|
||||
if err == nil {
|
||||
if file.IsDir() {
|
||||
return filepath.Join(dockerConfig, configFile)
|
||||
}
|
||||
} else {
|
||||
if os.IsNotExist(err) {
|
||||
return string(os.PathSeparator) + filepath.Join("kaniko", ".docker", configFile)
|
||||
}
|
||||
}
|
||||
return filepath.Clean(dockerConfig)
|
||||
}
|
||||
return string(os.PathSeparator) + filepath.Join("kaniko", ".docker", configFile)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,11 @@ import (
|
|||
"github.com/spf13/afero"
|
||||
)
|
||||
|
||||
const (
|
||||
DefaultKanikoDockerConfigJSON = "/kaniko/.docker/config.json"
|
||||
DockerConfigEnvKey = "DOCKER_CONFIG"
|
||||
)
|
||||
|
||||
func mustTag(t *testing.T, s string) name.Tag {
|
||||
tag, err := name.NewTag(s, name.StrictValidation)
|
||||
if err != nil {
|
||||
|
|
@ -45,43 +50,102 @@ func mustTag(t *testing.T, s string) name.Tag {
|
|||
return tag
|
||||
}
|
||||
|
||||
func TestDockerConfLocation(t *testing.T) {
|
||||
dcfg := "DOCKER_CONFIG"
|
||||
originalDockerConfig := os.Getenv(dcfg)
|
||||
|
||||
if err := os.Unsetenv(dcfg); err != nil {
|
||||
func TestDockerConfLocationWithFileLocation(t *testing.T) {
|
||||
originalDockerConfig := os.Getenv(DockerConfigEnvKey)
|
||||
if err := os.Unsetenv(DockerConfigEnvKey); err != nil {
|
||||
t.Fatalf("Failed to unset DOCKER_CONFIG: %v", err)
|
||||
}
|
||||
file, err := ioutil.TempFile("", "docker.conf")
|
||||
if err != nil {
|
||||
t.Fatalf("could not create temp file: %s", err)
|
||||
}
|
||||
defer os.Remove(file.Name())
|
||||
if err := os.Setenv(DockerConfigEnvKey, file.Name()); err != nil {
|
||||
t.Fatalf("Failed to unset DOCKER_CONFIG: %v", err)
|
||||
}
|
||||
unset := DockerConfLocation()
|
||||
unsetExpected := "/kaniko/.docker/config.json" // will fail on Windows
|
||||
unsetExpected := file.Name()
|
||||
if unset != unsetExpected {
|
||||
t.Errorf("Unexpected default Docker configuration file location: expected:'%s' got:'%s'", unsetExpected, unset)
|
||||
}
|
||||
restoreOriginalDockerConfigEnv(t, originalDockerConfig)
|
||||
}
|
||||
|
||||
if err := os.Setenv(dcfg, "/kaniko/.docker"); err != nil {
|
||||
func TestDockerConfLocationWithInvalidFileLocation(t *testing.T) {
|
||||
originalDockerConfig := os.Getenv(DockerConfigEnvKey)
|
||||
if err := os.Unsetenv(DockerConfigEnvKey); err != nil {
|
||||
t.Fatalf("Failed to unset DOCKER_CONFIG: %v", err)
|
||||
}
|
||||
tmpDir, err := ioutil.TempDir("", "*")
|
||||
if err != nil {
|
||||
t.Fatalf("could not create temp dir: %s", err)
|
||||
}
|
||||
defer os.RemoveAll(tmpDir)
|
||||
random := "fdgdsfrdfgdf-fdfsf-24dsgfd" //replace with a really random string
|
||||
file := filepath.Join(tmpDir, random) // an random file name, shouldn't exist
|
||||
if err := os.Setenv(DockerConfigEnvKey, file); err != nil {
|
||||
t.Fatalf("Failed to unset DOCKER_CONFIG: %v", err)
|
||||
}
|
||||
unset := DockerConfLocation()
|
||||
// as file doesn't point to a real file, DockerConfLocation() should return the default kaniko path for config.json
|
||||
unsetExpected := DefaultKanikoDockerConfigJSON
|
||||
if unset != unsetExpected {
|
||||
t.Errorf("Unexpected default Docker configuration file location: expected:'%s' got:'%s'", unsetExpected, unset)
|
||||
}
|
||||
restoreOriginalDockerConfigEnv(t, originalDockerConfig)
|
||||
}
|
||||
|
||||
func TestDockerConfLocation(t *testing.T) {
|
||||
originalDockerConfig := os.Getenv(DockerConfigEnvKey)
|
||||
|
||||
if err := os.Unsetenv(DockerConfigEnvKey); err != nil {
|
||||
t.Fatalf("Failed to unset DOCKER_CONFIG: %v", err)
|
||||
}
|
||||
unset := DockerConfLocation()
|
||||
unsetExpected := DefaultKanikoDockerConfigJSON // will fail on Windows
|
||||
if unset != unsetExpected {
|
||||
t.Errorf("Unexpected default Docker configuration file location: expected:'%s' got:'%s'", unsetExpected, unset)
|
||||
}
|
||||
tmpDir, err := ioutil.TempDir("", "*")
|
||||
if err != nil {
|
||||
t.Fatalf("could not create temp dir: %s", err)
|
||||
}
|
||||
defer os.RemoveAll(tmpDir)
|
||||
|
||||
dir := filepath.Join(tmpDir, "/kaniko/.docker")
|
||||
os.MkdirAll(dir, os.ModePerm)
|
||||
if err := os.Setenv(DockerConfigEnvKey, dir); err != nil {
|
||||
t.Fatalf("Failed to set DOCKER_CONFIG: %v", err)
|
||||
}
|
||||
kanikoDefault := DockerConfLocation()
|
||||
kanikoDefaultExpected := "/kaniko/.docker/config.json" // will fail on Windows
|
||||
kanikoDefaultExpected := filepath.Join(tmpDir, DefaultKanikoDockerConfigJSON) // will fail on Windows
|
||||
if kanikoDefault != kanikoDefaultExpected {
|
||||
t.Errorf("Unexpected kaniko default Docker conf file location: expected:'%s' got:'%s'", kanikoDefaultExpected, kanikoDefault)
|
||||
}
|
||||
|
||||
if err := os.Setenv(dcfg, "/a/different/path"); err != nil {
|
||||
differentPath, err := ioutil.TempDir("", "differentPath")
|
||||
if err != nil {
|
||||
t.Fatalf("could not create temp dir: %s", err)
|
||||
}
|
||||
defer os.RemoveAll(differentPath)
|
||||
if err := os.Setenv(DockerConfigEnvKey, differentPath); err != nil {
|
||||
t.Fatalf("Failed to set DOCKER_CONFIG: %v", err)
|
||||
}
|
||||
set := DockerConfLocation()
|
||||
setExpected := "/a/different/path/config.json" // will fail on Windows
|
||||
setExpected := filepath.Join(differentPath, "config.json") // will fail on Windows ?
|
||||
if set != setExpected {
|
||||
t.Errorf("Unexpected DOCKER_CONF-based file location: expected:'%s' got:'%s'", setExpected, set)
|
||||
}
|
||||
restoreOriginalDockerConfigEnv(t, originalDockerConfig)
|
||||
}
|
||||
|
||||
func restoreOriginalDockerConfigEnv(t *testing.T, originalDockerConfig string) {
|
||||
if originalDockerConfig != "" {
|
||||
if err := os.Setenv(dcfg, originalDockerConfig); err != nil {
|
||||
if err := os.Setenv(DockerConfigEnvKey, originalDockerConfig); err != nil {
|
||||
t.Fatalf("Failed to set DOCKER_CONFIG back to original value '%s': %v", originalDockerConfig, err)
|
||||
}
|
||||
} else {
|
||||
if err := os.Unsetenv(dcfg); err != nil {
|
||||
if err := os.Unsetenv(DockerConfigEnvKey); err != nil {
|
||||
t.Fatalf("Failed to unset DOCKER_CONFIG after testing: %v", err)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue