From e243e646fc129b5a665828ca81c9ccebfc5a8ee8 Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Wed, 26 Dec 2018 11:11:29 -0500 Subject: [PATCH] Fix create secret docker-registry compatibility --- .../versioned/secret_for_docker_registry.go | 14 +++++++++++--- .../versioned/secret_for_docker_registry_test.go | 2 +- test/cmd/core.sh | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/pkg/kubectl/generate/versioned/secret_for_docker_registry.go b/pkg/kubectl/generate/versioned/secret_for_docker_registry.go index db9d38448c..bae9f05aa1 100644 --- a/pkg/kubectl/generate/versioned/secret_for_docker_registry.go +++ b/pkg/kubectl/generate/versioned/secret_for_docker_registry.go @@ -17,6 +17,7 @@ limitations under the License. package versioned import ( + "encoding/base64" "encoding/json" "fmt" @@ -152,6 +153,7 @@ func handleDockerCfgJSONContent(username, password, email, server string) ([]byt Username: username, Password: password, Email: email, + Auth: encodeDockerConfigFieldAuth(username, password), } dockerCfgJSON := DockerConfigJSON{ @@ -161,6 +163,11 @@ func handleDockerCfgJSONContent(username, password, email, server string) ([]byt return json.Marshal(dockerCfgJSON) } +func encodeDockerConfigFieldAuth(username, password string) string { + fieldValue := username + ":" + password + return base64.StdEncoding.EncodeToString([]byte(fieldValue)) +} + // DockerConfigJSON represents a local docker auth config file // for pulling images. type DockerConfigJSON struct { @@ -175,7 +182,8 @@ type DockerConfigJSON struct { type DockerConfig map[string]DockerConfigEntry type DockerConfigEntry struct { - Username string - Password string - Email string + Username string `json:"username,omitempty"` + Password string `json:"password,omitempty"` + Email string `json:"email,omitempty"` + Auth string `json:"auth,omitempty"` } diff --git a/pkg/kubectl/generate/versioned/secret_for_docker_registry_test.go b/pkg/kubectl/generate/versioned/secret_for_docker_registry_test.go index 2b90e186ef..304cf400b3 100644 --- a/pkg/kubectl/generate/versioned/secret_for_docker_registry_test.go +++ b/pkg/kubectl/generate/versioned/secret_for_docker_registry_test.go @@ -73,7 +73,7 @@ func TestSecretForDockerRegistryGenerate(t *testing.T) { }, expected: &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ - Name: "foo-7566tc6mgc", + Name: "foo-548cm7fgdh", }, Data: map[string][]byte{ v1.DockerConfigJsonKey: secretData, diff --git a/test/cmd/core.sh b/test/cmd/core.sh index 656ef330f5..5f645c2d5c 100755 --- a/test/cmd/core.sh +++ b/test/cmd/core.sh @@ -739,7 +739,7 @@ run_secrets_test() { # Post-condition: secret exists and has expected values kube::test::get_object_assert 'secret/test-secret --namespace=test-secrets' "{{$id_field}}" 'test-secret' kube::test::get_object_assert 'secret/test-secret --namespace=test-secrets' "{{$secret_type}}" 'kubernetes.io/dockerconfigjson' - [[ "$(kubectl get secret/test-secret --namespace=test-secrets -o yaml "${kube_flags[@]}" | grep '.dockerconfigjson:')" ]] + [[ "$(kubectl get secret/test-secret --namespace=test-secrets -o yaml "${kube_flags[@]}" | grep '.dockerconfigjson: eyJhdXRocyI6eyJodHRwczovL2luZGV4LmRvY2tlci5pby92MS8iOnsidXNlcm5hbWUiOiJ0ZXN0LXVzZXIiLCJwYXNzd29yZCI6InRlc3QtcGFzc3dvcmQiLCJlbWFpbCI6InRlc3QtdXNlckB0ZXN0LmNvbSIsImF1dGgiOiJkR1Z6ZEMxMWMyVnlPblJsYzNRdGNHRnpjM2R2Y21RPSJ9fX0=')" ]] # Clean-up kubectl delete secret test-secret --namespace=test-secrets