1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2025-07-15 01:34:38 +02:00

feat(kubernetesDeploy): consume credentials from environment (#3129)

* feat(kubernetesDeploy): consume credentials from environment

* update vault

* update handling of docker config.json

* chore: remove comments
This commit is contained in:
Oliver Nocon
2021-12-02 12:18:21 +01:00
committed by GitHub
parent b29a2f2264
commit a76b9d563d
4 changed files with 255 additions and 242 deletions

View File

@ -3,9 +3,6 @@ package cmd
import (
"bytes"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"testing"
"github.com/SAP/jenkins-library/pkg/mock"
@ -13,6 +10,23 @@ import (
"github.com/stretchr/testify/assert"
)
type kubernetesDeployMockUtils struct {
shouldFail bool
requestedUrls []string
requestedFiles []string
*mock.FilesMock
*mock.ExecMockRunner
}
func newKubernetesDeployMockUtils() kubernetesDeployMockUtils {
utils := kubernetesDeployMockUtils{
shouldFail: false,
FilesMock: &mock.FilesMock{},
ExecMockRunner: &mock.ExecMockRunner{},
}
return utils
}
func TestRunKubernetesDeploy(t *testing.T) {
t.Run("test helm", func(t *testing.T) {
@ -35,23 +49,22 @@ func TestRunKubernetesDeploy(t *testing.T) {
dockerConfigJSON := `{"kind": "Secret","data":{".dockerconfigjson": "ThisIsOurBase64EncodedSecret=="}}`
e := mock.ExecMockRunner{
StdoutReturn: map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json docker-registry testSecret --docker-server=my.registry:55555 --docker-username=registryUser --docker-password=\*\*\*\*\*\*\*\*`: dockerConfigJSON,
},
mockUtils := newKubernetesDeployMockUtils()
mockUtils.StdoutReturn = map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json docker-registry testSecret --docker-server=my.registry:55555 --docker-username=registryUser --docker-password=\*\*\*\*\*\*\*\*`: dockerConfigJSON,
}
var stdout bytes.Buffer
runKubernetesDeploy(opts, &e, &stdout)
runKubernetesDeploy(opts, mockUtils, &stdout)
assert.Equal(t, "helm", e.Calls[0].Exec, "Wrong init command")
assert.Equal(t, []string{"init", "--client-only"}, e.Calls[0].Params, "Wrong init parameters")
assert.Equal(t, "helm", mockUtils.Calls[0].Exec, "Wrong init command")
assert.Equal(t, []string{"init", "--client-only"}, mockUtils.Calls[0].Params, "Wrong init parameters")
assert.Equal(t, "kubectl", e.Calls[1].Exec, "Wrong secret creation command")
assert.Equal(t, []string{"create", "secret", "--insecure-skip-tls-verify=true", "--dry-run=true", "--output=json", "docker-registry", "testSecret", "--docker-server=my.registry:55555", "--docker-username=registryUser", "--docker-password=********"}, e.Calls[1].Params, "Wrong secret creation parameters")
assert.Equal(t, "kubectl", mockUtils.Calls[1].Exec, "Wrong secret creation command")
assert.Equal(t, []string{"create", "secret", "--insecure-skip-tls-verify=true", "--dry-run=true", "--output=json", "docker-registry", "testSecret", "--docker-server=my.registry:55555", "--docker-username=registryUser", "--docker-password=********"}, mockUtils.Calls[1].Params, "Wrong secret creation parameters")
assert.Equal(t, "helm", e.Calls[2].Exec, "Wrong upgrade command")
assert.Equal(t, "helm", mockUtils.Calls[2].Exec, "Wrong upgrade command")
assert.Equal(t, []string{
"upgrade",
"deploymentName",
@ -70,7 +83,7 @@ func TestRunKubernetesDeploy(t *testing.T) {
"testCluster",
"--testParam",
"testValue",
}, e.Calls[2].Params, "Wrong upgrade parameters")
}, mockUtils.Calls[2].Params, "Wrong upgrade parameters")
})
t.Run("test helm - with containerImageName and containerImageTag instead of image", func(t *testing.T) {
@ -94,25 +107,24 @@ func TestRunKubernetesDeploy(t *testing.T) {
dockerConfigJSON := `{"kind": "Secret","data":{".dockerconfigjson": "ThisIsOurBase64EncodedSecret=="}}`
e := mock.ExecMockRunner{
StdoutReturn: map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json docker-registry testSecret --docker-server=my.registry:55555 --docker-username=registryUser --docker-password=\*\*\*\*\*\*\*\*`: dockerConfigJSON,
},
mockUtils := newKubernetesDeployMockUtils()
mockUtils.StdoutReturn = map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json docker-registry testSecret --docker-server=my.registry:55555 --docker-username=registryUser --docker-password=\*\*\*\*\*\*\*\*`: dockerConfigJSON,
}
var stdout bytes.Buffer
runKubernetesDeploy(opts, &e, &stdout)
runKubernetesDeploy(opts, mockUtils, &stdout)
assert.Equal(t, "helm", e.Calls[0].Exec, "Wrong init command")
assert.Equal(t, []string{"init", "--client-only"}, e.Calls[0].Params, "Wrong init parameters")
assert.Equal(t, "helm", mockUtils.Calls[0].Exec, "Wrong init command")
assert.Equal(t, []string{"init", "--client-only"}, mockUtils.Calls[0].Params, "Wrong init parameters")
assert.Equal(t, "kubectl", e.Calls[1].Exec, "Wrong secret creation command")
assert.Equal(t, []string{"create", "secret", "--insecure-skip-tls-verify=true", "--dry-run=true", "--output=json", "docker-registry", "testSecret", "--docker-server=my.registry:55555", "--docker-username=registryUser", "--docker-password=********"}, e.Calls[1].Params, "Wrong secret creation parameters")
assert.Equal(t, "kubectl", mockUtils.Calls[1].Exec, "Wrong secret creation command")
assert.Equal(t, []string{"create", "secret", "--insecure-skip-tls-verify=true", "--dry-run=true", "--output=json", "docker-registry", "testSecret", "--docker-server=my.registry:55555", "--docker-username=registryUser", "--docker-password=********"}, mockUtils.Calls[1].Params, "Wrong secret creation parameters")
assert.Equal(t, "helm", e.Calls[2].Exec, "Wrong upgrade command")
assert.Equal(t, "helm", mockUtils.Calls[2].Exec, "Wrong upgrade command")
assert.Contains(t, e.Calls[2].Params, "image.repository=my.registry:55555/path/to/Image,image.tag=latest,secret.name=testSecret,secret.dockerconfigjson=ThisIsOurBase64EncodedSecret==,imagePullSecrets[0].name=testSecret,ingress.hosts[0]=ingress.host1,ingress.hosts[1]=ingress.host2", "Wrong upgrade parameters")
assert.Contains(t, mockUtils.Calls[2].Params, "image.repository=my.registry:55555/path/to/Image,image.tag=latest,secret.name=testSecret,secret.dockerconfigjson=ThisIsOurBase64EncodedSecret==,imagePullSecrets[0].name=testSecret,ingress.hosts[0]=ingress.host1,ingress.hosts[1]=ingress.host2", "Wrong upgrade parameters")
})
t.Run("test helm - docker config.json path passed as parameter", func(t *testing.T) {
@ -133,21 +145,22 @@ func TestRunKubernetesDeploy(t *testing.T) {
}
k8sSecretSpec := `{"kind": "Secret","data":{".dockerconfigjson": "ThisIsOurBase64EncodedSecret=="}}`
e := mock.ExecMockRunner{
StdoutReturn: map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json generic testSecret --from-file=.dockerconfigjson=/path/to/.docker/config.json --type=kubernetes.io/dockerconfigjson`: k8sSecretSpec,
},
mockUtils := newKubernetesDeployMockUtils()
mockUtils.AddFile("/path/to/.docker/config.json", []byte("ThisIsOurBase64EncodedSecret=="))
mockUtils.StdoutReturn = map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json generic testSecret --from-file=.dockerconfigjson=/path/to/.docker/config.json --type=kubernetes.io/dockerconfigjson`: k8sSecretSpec,
}
var stdout bytes.Buffer
err := runKubernetesDeploy(opts, &e, &stdout)
err := runKubernetesDeploy(opts, mockUtils, &stdout)
assert.NoError(t, err)
assert.Equal(t, "helm", e.Calls[0].Exec, "Wrong init command")
assert.Equal(t, []string{"init", "--client-only"}, e.Calls[0].Params, "Wrong init parameters")
assert.Equal(t, "helm", mockUtils.Calls[0].Exec, "Wrong init command")
assert.Equal(t, []string{"init", "--client-only"}, mockUtils.Calls[0].Params, "Wrong init parameters")
assert.Equal(t, "kubectl", e.Calls[1].Exec, "Wrong secret creation command")
assert.Equal(t, "kubectl", mockUtils.Calls[1].Exec, "Wrong secret creation command")
assert.Equal(t, []string{
"create",
"secret",
@ -158,9 +171,9 @@ func TestRunKubernetesDeploy(t *testing.T) {
"testSecret",
"--from-file=.dockerconfigjson=/path/to/.docker/config.json",
`--type=kubernetes.io/dockerconfigjson`,
}, e.Calls[1].Params, "Wrong secret creation parameters")
}, mockUtils.Calls[1].Params, "Wrong secret creation parameters")
assert.Equal(t, "helm", e.Calls[2].Exec, "Wrong upgrade command")
assert.Equal(t, "helm", mockUtils.Calls[2].Exec, "Wrong upgrade command")
assert.Equal(t, []string{
"upgrade",
"deploymentName",
@ -179,7 +192,7 @@ func TestRunKubernetesDeploy(t *testing.T) {
"testCluster",
"--testParam",
"testValue",
}, e.Calls[2].Params, "Wrong upgrade parameters")
}, mockUtils.Calls[2].Params, "Wrong upgrade parameters")
})
t.Run("test helm -- keep failed deployment", func(t *testing.T) {
@ -203,23 +216,22 @@ func TestRunKubernetesDeploy(t *testing.T) {
k8sSecretSpec := `{"kind": "Secret","data":{".dockerconfigjson": "ThisIsOurBase64EncodedSecret=="}}`
e := mock.ExecMockRunner{
StdoutReturn: map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json docker-registry testSecret --docker-server=my.registry:55555 --docker-username=registryUser --docker-password=\*\*\*\*\*\*\*\*`: k8sSecretSpec,
},
mockUtils := newKubernetesDeployMockUtils()
mockUtils.StdoutReturn = map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json docker-registry testSecret --docker-server=my.registry:55555 --docker-username=registryUser --docker-password=\*\*\*\*\*\*\*\*`: k8sSecretSpec,
}
var stdout bytes.Buffer
runKubernetesDeploy(opts, &e, &stdout)
runKubernetesDeploy(opts, mockUtils, &stdout)
assert.Equal(t, "helm", e.Calls[0].Exec, "Wrong init command")
assert.Equal(t, []string{"init", "--client-only"}, e.Calls[0].Params, "Wrong init parameters")
assert.Equal(t, "helm", mockUtils.Calls[0].Exec, "Wrong init command")
assert.Equal(t, []string{"init", "--client-only"}, mockUtils.Calls[0].Params, "Wrong init parameters")
assert.Equal(t, "kubectl", e.Calls[1].Exec, "Wrong secret creation command")
assert.Equal(t, []string{"create", "secret", "--insecure-skip-tls-verify=true", "--dry-run=true", "--output=json", "docker-registry", "testSecret", "--docker-server=my.registry:55555", "--docker-username=registryUser", "--docker-password=********"}, e.Calls[1].Params, "Wrong secret creation parameters")
assert.Equal(t, "kubectl", mockUtils.Calls[1].Exec, "Wrong secret creation command")
assert.Equal(t, []string{"create", "secret", "--insecure-skip-tls-verify=true", "--dry-run=true", "--output=json", "docker-registry", "testSecret", "--docker-server=my.registry:55555", "--docker-username=registryUser", "--docker-password=********"}, mockUtils.Calls[1].Params, "Wrong secret creation parameters")
assert.Equal(t, "helm", e.Calls[2].Exec, "Wrong upgrade command")
assert.Equal(t, "helm", mockUtils.Calls[2].Exec, "Wrong upgrade command")
assert.Equal(t, []string{
"upgrade",
"deploymentName",
@ -237,7 +249,7 @@ func TestRunKubernetesDeploy(t *testing.T) {
"testCluster",
"--testParam",
"testValue",
}, e.Calls[2].Params, "Wrong upgrade parameters")
}, mockUtils.Calls[2].Params, "Wrong upgrade parameters")
})
t.Run("test helm - fails without image information", func(t *testing.T) {
@ -254,11 +266,11 @@ func TestRunKubernetesDeploy(t *testing.T) {
KubeContext: "testCluster",
Namespace: "deploymentNamespace",
}
e := mock.ExecMockRunner{}
mockUtils := newKubernetesDeployMockUtils()
var stdout bytes.Buffer
err := runKubernetesDeploy(opts, &e, &stdout)
err := runKubernetesDeploy(opts, mockUtils, &stdout)
assert.EqualError(t, err, "image information not given - please either set image or containerImageName and containerImageTag")
})
@ -282,20 +294,19 @@ func TestRunKubernetesDeploy(t *testing.T) {
dockerConfigJSON := `{"kind": "Secret","data":{".dockerconfigjson": "ThisIsOurBase64EncodedSecret=="}}`
e := mock.ExecMockRunner{
StdoutReturn: map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json docker-registry testSecret --docker-server=my.registry:55555 --docker-username=registryUser --docker-password=\*\*\*\*\*\*\*\*`: dockerConfigJSON,
},
mockUtils := newKubernetesDeployMockUtils()
mockUtils.StdoutReturn = map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json docker-registry testSecret --docker-server=my.registry:55555 --docker-username=registryUser --docker-password=\*\*\*\*\*\*\*\*`: dockerConfigJSON,
}
var stdout bytes.Buffer
runKubernetesDeploy(opts, &e, &stdout)
runKubernetesDeploy(opts, mockUtils, &stdout)
assert.Equal(t, "kubectl", e.Calls[0].Exec, "Wrong secret creation command")
assert.Equal(t, []string{"create", "secret", "--insecure-skip-tls-verify=true", "--dry-run=true", "--output=json", "docker-registry", "testSecret", "--docker-server=my.registry:55555", "--docker-username=registryUser", "--docker-password=********"}, e.Calls[0].Params, "Wrong secret creation parameters")
assert.Equal(t, "kubectl", mockUtils.Calls[0].Exec, "Wrong secret creation command")
assert.Equal(t, []string{"create", "secret", "--insecure-skip-tls-verify=true", "--dry-run=true", "--output=json", "docker-registry", "testSecret", "--docker-server=my.registry:55555", "--docker-username=registryUser", "--docker-password=********"}, mockUtils.Calls[0].Params, "Wrong secret creation parameters")
assert.Equal(t, "helm", e.Calls[1].Exec, "Wrong upgrade command")
assert.Equal(t, "helm", mockUtils.Calls[1].Exec, "Wrong upgrade command")
assert.Equal(t, []string{
"upgrade",
"deploymentName",
@ -318,7 +329,7 @@ func TestRunKubernetesDeploy(t *testing.T) {
"testCluster",
"--testParam",
"testValue",
}, e.Calls[1].Params, "Wrong upgrade parameters")
}, mockUtils.Calls[1].Params, "Wrong upgrade parameters")
})
t.Run("test helm v3 - with containerImageName and containerImageTag instead of image", func(t *testing.T) {
@ -342,22 +353,21 @@ func TestRunKubernetesDeploy(t *testing.T) {
dockerConfigJSON := `{"kind": "Secret","data":{".dockerconfigjson": "ThisIsOurBase64EncodedSecret=="}}`
e := mock.ExecMockRunner{
StdoutReturn: map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json docker-registry testSecret --docker-server=my.registry:55555 --docker-username=registryUser --docker-password=\*\*\*\*\*\*\*\*`: dockerConfigJSON,
},
mockUtils := newKubernetesDeployMockUtils()
mockUtils.StdoutReturn = map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json docker-registry testSecret --docker-server=my.registry:55555 --docker-username=registryUser --docker-password=\*\*\*\*\*\*\*\*`: dockerConfigJSON,
}
var stdout bytes.Buffer
runKubernetesDeploy(opts, &e, &stdout)
runKubernetesDeploy(opts, mockUtils, &stdout)
assert.Equal(t, "kubectl", e.Calls[0].Exec, "Wrong secret creation command")
assert.Equal(t, []string{"create", "secret", "--insecure-skip-tls-verify=true", "--dry-run=true", "--output=json", "docker-registry", "testSecret", "--docker-server=my.registry:55555", "--docker-username=registryUser", "--docker-password=********"}, e.Calls[0].Params, "Wrong secret creation parameters")
assert.Equal(t, "kubectl", mockUtils.Calls[0].Exec, "Wrong secret creation command")
assert.Equal(t, []string{"create", "secret", "--insecure-skip-tls-verify=true", "--dry-run=true", "--output=json", "docker-registry", "testSecret", "--docker-server=my.registry:55555", "--docker-username=registryUser", "--docker-password=********"}, mockUtils.Calls[0].Params, "Wrong secret creation parameters")
assert.Equal(t, "helm", e.Calls[1].Exec, "Wrong upgrade command")
assert.Equal(t, "helm", mockUtils.Calls[1].Exec, "Wrong upgrade command")
assert.Contains(t, e.Calls[1].Params, "image.repository=my.registry:55555/path/to/Image,image.tag=latest,secret.name=testSecret,secret.dockerconfigjson=ThisIsOurBase64EncodedSecret==,imagePullSecrets[0].name=testSecret", "Wrong upgrade parameters")
assert.Contains(t, mockUtils.Calls[1].Params, "image.repository=my.registry:55555/path/to/Image,image.tag=latest,secret.name=testSecret,secret.dockerconfigjson=ThisIsOurBase64EncodedSecret==,imagePullSecrets[0].name=testSecret", "Wrong upgrade parameters")
})
@ -375,11 +385,11 @@ func TestRunKubernetesDeploy(t *testing.T) {
KubeContext: "testCluster",
Namespace: "deploymentNamespace",
}
e := mock.ExecMockRunner{}
mockUtils := newKubernetesDeployMockUtils()
var stdout bytes.Buffer
err := runKubernetesDeploy(opts, &e, &stdout)
err := runKubernetesDeploy(opts, mockUtils, &stdout)
assert.EqualError(t, err, "image information not given - please either set image or containerImageName and containerImageTag")
})
@ -404,20 +414,19 @@ func TestRunKubernetesDeploy(t *testing.T) {
dockerConfigJSON := `{"kind": "Secret","data":{".dockerconfigjson": "ThisIsOurBase64EncodedSecret=="}}`
e := mock.ExecMockRunner{
StdoutReturn: map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json docker-registry testSecret --docker-server=my.registry:55555 --docker-username=registryUser --docker-password=\*\*\*\*\*\*\*\*`: dockerConfigJSON,
},
mockUtils := newKubernetesDeployMockUtils()
mockUtils.StdoutReturn = map[string]string{
`kubectl create secret --insecure-skip-tls-verify=true --dry-run=true --output=json docker-registry testSecret --docker-server=my.registry:55555 --docker-username=registryUser --docker-password=\*\*\*\*\*\*\*\*`: dockerConfigJSON,
}
var stdout bytes.Buffer
runKubernetesDeploy(opts, &e, &stdout)
runKubernetesDeploy(opts, mockUtils, &stdout)
assert.Equal(t, "kubectl", e.Calls[0].Exec, "Wrong secret creation command")
assert.Equal(t, []string{"create", "secret", "--insecure-skip-tls-verify=true", "--dry-run=true", "--output=json", "docker-registry", "testSecret", "--docker-server=my.registry:55555", "--docker-username=registryUser", "--docker-password=********"}, e.Calls[0].Params, "Wrong secret creation parameters")
assert.Equal(t, "kubectl", mockUtils.Calls[0].Exec, "Wrong secret creation command")
assert.Equal(t, []string{"create", "secret", "--insecure-skip-tls-verify=true", "--dry-run=true", "--output=json", "docker-registry", "testSecret", "--docker-server=my.registry:55555", "--docker-username=registryUser", "--docker-password=********"}, mockUtils.Calls[0].Params, "Wrong secret creation parameters")
assert.Equal(t, "helm", e.Calls[1].Exec, "Wrong upgrade command")
assert.Equal(t, "helm", mockUtils.Calls[1].Exec, "Wrong upgrade command")
assert.Equal(t, []string{
"upgrade",
"deploymentName",
@ -439,7 +448,7 @@ func TestRunKubernetesDeploy(t *testing.T) {
"testCluster",
"--testParam",
"testValue",
}, e.Calls[1].Params, "Wrong upgrade parameters")
}, mockUtils.Calls[1].Params, "Wrong upgrade parameters")
})
t.Run("test helm v3 - no container credentials", func(t *testing.T) {
@ -457,14 +466,14 @@ func TestRunKubernetesDeploy(t *testing.T) {
KubeContext: "testCluster",
Namespace: "deploymentNamespace",
}
e := mock.ExecMockRunner{}
mockUtils := newKubernetesDeployMockUtils()
var stdout bytes.Buffer
runKubernetesDeploy(opts, &e, &stdout)
runKubernetesDeploy(opts, mockUtils, &stdout)
assert.Equal(t, 1, len(e.Calls), "Wrong number of upgrade commands")
assert.Equal(t, "helm", e.Calls[0].Exec, "Wrong upgrade command")
assert.Equal(t, 1, len(mockUtils.Calls), "Wrong number of upgrade commands")
assert.Equal(t, "helm", mockUtils.Calls[0].Exec, "Wrong upgrade command")
assert.Equal(t, []string{
"upgrade",
"deploymentName",
@ -483,7 +492,7 @@ func TestRunKubernetesDeploy(t *testing.T) {
"testCluster",
"--testParam",
"testValue",
}, e.Calls[0].Params, "Wrong upgrade parameters")
}, mockUtils.Calls[0].Params, "Wrong upgrade parameters")
})
t.Run("test helm v3 - fails without chart path", func(t *testing.T) {
@ -500,11 +509,11 @@ func TestRunKubernetesDeploy(t *testing.T) {
KubeContext: "testCluster",
Namespace: "deploymentNamespace",
}
e := mock.ExecMockRunner{}
mockUtils := newKubernetesDeployMockUtils()
var stdout bytes.Buffer
err := runKubernetesDeploy(opts, &e, &stdout)
err := runKubernetesDeploy(opts, mockUtils, &stdout)
assert.EqualError(t, err, "chart path has not been set, please configure chartPath parameter")
})
@ -522,11 +531,11 @@ func TestRunKubernetesDeploy(t *testing.T) {
KubeContext: "testCluster",
Namespace: "deploymentNamespace",
}
e := mock.ExecMockRunner{}
mockUtils := newKubernetesDeployMockUtils()
var stdout bytes.Buffer
err := runKubernetesDeploy(opts, &e, &stdout)
err := runKubernetesDeploy(opts, mockUtils, &stdout)
assert.EqualError(t, err, "deployment name has not been set, please configure deploymentName parameter")
})
@ -544,11 +553,11 @@ func TestRunKubernetesDeploy(t *testing.T) {
KubeContext: "testCluster",
Namespace: "deploymentNamespace",
}
e := mock.ExecMockRunner{}
mockUtils := newKubernetesDeployMockUtils()
var stdout bytes.Buffer
runKubernetesDeploy(opts, &e, &stdout)
runKubernetesDeploy(opts, mockUtils, &stdout)
assert.Equal(t, []string{
"upgrade",
"deploymentName",
@ -566,16 +575,13 @@ func TestRunKubernetesDeploy(t *testing.T) {
"testCluster",
"--testParam",
"testValue",
}, e.Calls[0].Params, "Wrong upgrade parameters")
}, mockUtils.Calls[0].Params, "Wrong upgrade parameters")
})
t.Run("test kubectl - create secret/kubeconfig", func(t *testing.T) {
dir, err := ioutil.TempDir("", "")
defer os.RemoveAll(dir) // clean up
assert.NoError(t, err, "Error when creating temp dir")
opts := kubernetesDeployOptions{
AppTemplate: filepath.Join(dir, "test.yaml"),
AppTemplate: "path/to/test.yaml",
ContainerRegistryURL: "https://my.registry:55555",
ContainerRegistryUser: "registryUser",
ContainerRegistryPassword: "********",
@ -596,19 +602,18 @@ spec:
spec:
image: <image-name>`
ioutil.WriteFile(opts.AppTemplate, []byte(kubeYaml), 0755)
mockUtils := newKubernetesDeployMockUtils()
mockUtils.AddFile(opts.AppTemplate, []byte(kubeYaml))
e := mock.ExecMockRunner{
ShouldFailOnCommand: map[string]error{
"kubectl --insecure-skip-tls-verify=true --namespace=deploymentNamespace --context=testCluster get secret regSecret": fmt.Errorf("secret not found"),
},
mockUtils.ShouldFailOnCommand = map[string]error{
"kubectl --insecure-skip-tls-verify=true --namespace=deploymentNamespace --context=testCluster get secret regSecret": fmt.Errorf("secret not found"),
}
var stdout bytes.Buffer
runKubernetesDeploy(opts, &e, &stdout)
runKubernetesDeploy(opts, mockUtils, &stdout)
assert.Equal(t, e.Env, []string{"KUBECONFIG=This is my kubeconfig"})
assert.Equal(t, mockUtils.Env, []string{"KUBECONFIG=This is my kubeconfig"})
assert.Equal(t, "kubectl", e.Calls[0].Exec, "Wrong secret lookup command")
assert.Equal(t, "kubectl", mockUtils.Calls[0].Exec, "Wrong secret lookup command")
assert.Equal(t, []string{
"--insecure-skip-tls-verify=true",
fmt.Sprintf("--namespace=%v", opts.Namespace),
@ -616,9 +621,9 @@ spec:
"get",
"secret",
opts.ContainerRegistrySecret,
}, e.Calls[0].Params, "kubectl parameters incorrect")
}, mockUtils.Calls[0].Params, "kubectl parameters incorrect")
assert.Equal(t, "kubectl", e.Calls[1].Exec, "Wrong secret create command")
assert.Equal(t, "kubectl", mockUtils.Calls[1].Exec, "Wrong secret create command")
assert.Equal(t, []string{
"--insecure-skip-tls-verify=true",
fmt.Sprintf("--namespace=%v", opts.Namespace),
@ -630,9 +635,9 @@ spec:
"--docker-server=my.registry:55555",
fmt.Sprintf("--docker-username=%v", opts.ContainerRegistryUser),
fmt.Sprintf("--docker-password=%v", opts.ContainerRegistryPassword),
}, e.Calls[1].Params, "kubectl parameters incorrect")
}, mockUtils.Calls[1].Params, "kubectl parameters incorrect")
assert.Equal(t, "kubectl", e.Calls[2].Exec, "Wrong apply command")
assert.Equal(t, "kubectl", mockUtils.Calls[2].Exec, "Wrong apply command")
assert.Equal(t, []string{
"--insecure-skip-tls-verify=true",
fmt.Sprintf("--namespace=%v", opts.Namespace),
@ -642,19 +647,16 @@ spec:
opts.AppTemplate,
"--testParam",
"testValue",
}, e.Calls[2].Params, "kubectl parameters incorrect")
}, mockUtils.Calls[2].Params, "kubectl parameters incorrect")
appTemplate, err := ioutil.ReadFile(opts.AppTemplate)
appTemplate, _ := mockUtils.FileRead(opts.AppTemplate)
assert.Contains(t, string(appTemplate), "my.registry:55555/path/to/Image:latest")
})
t.Run("test kubectl - create secret from docker config.json", func(t *testing.T) {
dir, err := ioutil.TempDir("", "")
defer os.RemoveAll(dir) // clean up
assert.NoError(t, err, "Error when creating temp dir")
opts := kubernetesDeployOptions{
AppTemplate: filepath.Join(dir, "test.yaml"),
AppTemplate: "path/to/test.yaml",
DockerConfigJSON: "/path/to/.docker/config.json",
ContainerRegistryURL: "https://my.registry:55555",
ContainerRegistryUser: "registryUser",
@ -676,17 +678,15 @@ spec:
spec:
image: <image-name>`
ioutil.WriteFile(opts.AppTemplate, []byte(kubeYaml), 0755)
e := mock.ExecMockRunner{
ShouldFailOnCommand: map[string]error{
"kubectl --insecure-skip-tls-verify=true --namespace=deploymentNamespace --context=testCluster get secret regSecret": fmt.Errorf("secret not found"),
},
mockUtils := newKubernetesDeployMockUtils()
mockUtils.AddFile(opts.AppTemplate, []byte(kubeYaml))
mockUtils.ShouldFailOnCommand = map[string]error{
"kubectl --insecure-skip-tls-verify=true --namespace=deploymentNamespace --context=testCluster get secret regSecret": fmt.Errorf("secret not found"),
}
var stdout bytes.Buffer
runKubernetesDeploy(opts, &e, &stdout)
runKubernetesDeploy(opts, mockUtils, &stdout)
assert.Equal(t, e.Env, []string{"KUBECONFIG=This is my kubeconfig"})
assert.Equal(t, mockUtils.Env, []string{"KUBECONFIG=This is my kubeconfig"})
assert.Equal(t, []string{
"--insecure-skip-tls-verify=true",
@ -698,16 +698,13 @@ spec:
opts.ContainerRegistrySecret,
fmt.Sprintf("--from-file=.dockerconfigjson=%v", opts.DockerConfigJSON),
`--type=kubernetes.io/dockerconfigjson`,
}, e.Calls[1].Params, "kubectl parameters incorrect")
}, mockUtils.Calls[1].Params, "kubectl parameters incorrect")
})
t.Run("test kubectl - lookup secret/kubeconfig", func(t *testing.T) {
dir, err := ioutil.TempDir("", "")
defer os.RemoveAll(dir) // clean up
assert.NoError(t, err, "Error when creating temp dir")
opts := kubernetesDeployOptions{
AppTemplate: filepath.Join(dir, "test.yaml"),
AppTemplate: "path/to/test.yaml",
ContainerRegistryURL: "https://my.registry:55555",
ContainerRegistryUser: "registryUser",
ContainerRegistryPassword: "********",
@ -720,40 +717,36 @@ spec:
DeployCommand: "apply",
}
ioutil.WriteFile(opts.AppTemplate, []byte("testYaml"), 0755)
e := mock.ExecMockRunner{}
mockUtils := newKubernetesDeployMockUtils()
mockUtils.AddFile(opts.AppTemplate, []byte("testYaml"))
var stdout bytes.Buffer
runKubernetesDeploy(opts, &e, &stdout)
runKubernetesDeploy(opts, mockUtils, &stdout)
assert.Equal(t, "kubectl", e.Calls[0].Exec, "Wrong secret lookup command")
assert.Equal(t, "kubectl", mockUtils.Calls[0].Exec, "Wrong secret lookup command")
assert.Equal(t, []string{
"--insecure-skip-tls-verify=true",
fmt.Sprintf("--namespace=%v", opts.Namespace),
"get",
"secret",
opts.ContainerRegistrySecret,
}, e.Calls[0].Params, "kubectl parameters incorrect")
}, mockUtils.Calls[0].Params, "kubectl parameters incorrect")
assert.Equal(t, "kubectl", e.Calls[1].Exec, "Wrong apply command")
assert.Equal(t, "kubectl", mockUtils.Calls[1].Exec, "Wrong apply command")
assert.Equal(t, []string{
"--insecure-skip-tls-verify=true",
fmt.Sprintf("--namespace=%v", opts.Namespace),
"apply",
"--filename",
opts.AppTemplate,
}, e.Calls[1].Params, "kubectl parameters incorrect")
}, mockUtils.Calls[1].Params, "kubectl parameters incorrect")
})
t.Run("test kubectl - token only", func(t *testing.T) {
dir, err := ioutil.TempDir("", "")
defer os.RemoveAll(dir) // clean up
assert.NoError(t, err, "Error when creating temp dir")
opts := kubernetesDeployOptions{
APIServer: "https://my.api.server",
AppTemplate: filepath.Join(dir, "test.yaml"),
AppTemplate: "path/to/test.yaml",
ContainerRegistryURL: "https://my.registry:55555",
ContainerRegistryUser: "registryUser",
ContainerRegistryPassword: "********",
@ -765,15 +758,14 @@ spec:
DeployCommand: "apply",
}
ioutil.WriteFile(opts.AppTemplate, []byte("testYaml"), 0755)
mockUtils := newKubernetesDeployMockUtils()
mockUtils.AddFile(opts.AppTemplate, []byte("testYaml"))
mockUtils.ShouldFailOnCommand = map[string]error{}
e := mock.ExecMockRunner{
ShouldFailOnCommand: map[string]error{},
}
var stdout bytes.Buffer
runKubernetesDeploy(opts, &e, &stdout)
runKubernetesDeploy(opts, mockUtils, &stdout)
assert.Equal(t, "kubectl", e.Calls[0].Exec, "Wrong apply command")
assert.Equal(t, "kubectl", mockUtils.Calls[0].Exec, "Wrong apply command")
assert.Equal(t, []string{
"--insecure-skip-tls-verify=true",
fmt.Sprintf("--namespace=%v", opts.Namespace),
@ -782,17 +774,13 @@ spec:
"apply",
"--filename",
opts.AppTemplate,
}, e.Calls[0].Params, "kubectl parameters incorrect")
}, mockUtils.Calls[0].Params, "kubectl parameters incorrect")
})
t.Run("test kubectl - with containerImageName and containerImageTag instead of image", func(t *testing.T) {
dir, err := ioutil.TempDir("", "")
defer os.RemoveAll(dir) // clean up
assert.NoError(t, err, "Error when creating temp dir")
opts := kubernetesDeployOptions{
APIServer: "https://my.api.server",
AppTemplate: filepath.Join(dir, "test.yaml"),
AppTemplate: "test.yaml",
ContainerRegistryURL: "https://my.registry:55555",
ContainerRegistryUser: "registryUser",
ContainerRegistryPassword: "********",
@ -805,28 +793,23 @@ spec:
DeployCommand: "apply",
}
ioutil.WriteFile(opts.AppTemplate, []byte("image: <image-name>"), 0755)
mockUtils := newKubernetesDeployMockUtils()
mockUtils.AddFile("test.yaml", []byte("image: <image-name>"))
e := mock.ExecMockRunner{
ShouldFailOnCommand: map[string]error{},
}
var stdout bytes.Buffer
runKubernetesDeploy(opts, &e, &stdout)
runKubernetesDeploy(opts, mockUtils, &stdout)
assert.Equal(t, "kubectl", e.Calls[0].Exec, "Wrong apply command")
assert.Equal(t, "kubectl", mockUtils.Calls[0].Exec, "Wrong apply command")
appTemplateFileContents, err := ioutil.ReadFile(opts.AppTemplate)
appTemplateFileContents, err := mockUtils.FileRead(opts.AppTemplate)
assert.NoError(t, err)
assert.Contains(t, string(appTemplateFileContents), "image: my.registry:55555/path/to/Image:latest", "kubectl parameters incorrect")
})
t.Run("test kubectl - fails without image information", func(t *testing.T) {
dir, err := ioutil.TempDir("", "")
defer os.RemoveAll(dir) // clean up
assert.NoError(t, err, "Error when creating temp dir")
opts := kubernetesDeployOptions{
APIServer: "https://my.api.server",
AppTemplate: filepath.Join(dir, "test.yaml"),
AppTemplate: "test.yaml",
ContainerRegistryURL: "https://my.registry:55555",
ContainerRegistryUser: "registryUser",
ContainerRegistryPassword: "********",
@ -837,22 +820,18 @@ spec:
DeployCommand: "apply",
}
ioutil.WriteFile(opts.AppTemplate, []byte("testYaml"), 0755)
e := mock.ExecMockRunner{}
mockUtils := newKubernetesDeployMockUtils()
mockUtils.AddFile("test.yaml", []byte("testYaml"))
var stdout bytes.Buffer
err = runKubernetesDeploy(opts, &e, &stdout)
err := runKubernetesDeploy(opts, mockUtils, &stdout)
assert.EqualError(t, err, "image information not given - please either set image or containerImageName and containerImageTag")
})
t.Run("test kubectl - use replace deploy command", func(t *testing.T) {
dir, err := ioutil.TempDir("", "")
defer os.RemoveAll(dir) // clean up
assert.NoError(t, err, "Error when creating temp dir")
opts := kubernetesDeployOptions{
AppTemplate: filepath.Join(dir, "test.yaml"),
AppTemplate: "test.yaml",
ContainerRegistryURL: "https://my.registry:55555",
ContainerRegistryUser: "registryUser",
ContainerRegistryPassword: "********",
@ -873,17 +852,16 @@ spec:
spec:
image: <image-name>`
err = ioutil.WriteFile(opts.AppTemplate, []byte(kubeYaml), 0755)
assert.NoError(t, err, "Error when writing app template file")
mockUtils := newKubernetesDeployMockUtils()
mockUtils.AddFile("test.yaml", []byte(kubeYaml))
e := mock.ExecMockRunner{}
var stdout bytes.Buffer
err = runKubernetesDeploy(opts, &e, &stdout)
err := runKubernetesDeploy(opts, mockUtils, &stdout)
assert.NoError(t, err, "Command should not fail")
assert.Equal(t, e.Env, []string{"KUBECONFIG=This is my kubeconfig"})
assert.Equal(t, mockUtils.Env, []string{"KUBECONFIG=This is my kubeconfig"})
assert.Equal(t, "kubectl", e.Calls[1].Exec, "Wrong replace command")
assert.Equal(t, "kubectl", mockUtils.Calls[1].Exec, "Wrong replace command")
assert.Equal(t, []string{
"--insecure-skip-tls-verify=true",
fmt.Sprintf("--namespace=%v", opts.Namespace),
@ -893,19 +871,15 @@ spec:
opts.AppTemplate,
"--testParam",
"testValue",
}, e.Calls[1].Params, "kubectl parameters incorrect")
}, mockUtils.Calls[1].Params, "kubectl parameters incorrect")
appTemplate, err := ioutil.ReadFile(opts.AppTemplate)
appTemplate, err := mockUtils.FileRead(opts.AppTemplate)
assert.Contains(t, string(appTemplate), "my.registry:55555/path/to/Image:latest")
})
t.Run("test kubectl - use replace --force deploy command", func(t *testing.T) {
dir, err := ioutil.TempDir("", "")
defer os.RemoveAll(dir) // clean up
assert.NoError(t, err, "Error when creating temp dir")
opts := kubernetesDeployOptions{
AppTemplate: filepath.Join(dir, "test.yaml"),
AppTemplate: "test.yaml",
ContainerRegistryURL: "https://my.registry:55555",
ContainerRegistryUser: "registryUser",
ContainerRegistryPassword: "********",
@ -927,17 +901,16 @@ spec:
spec:
image: <image-name>`
err = ioutil.WriteFile(opts.AppTemplate, []byte(kubeYaml), 0755)
assert.NoError(t, err, "Error when writing app template file")
mockUtils := newKubernetesDeployMockUtils()
mockUtils.AddFile("test.yaml", []byte(kubeYaml))
e := mock.ExecMockRunner{}
var stdout bytes.Buffer
err = runKubernetesDeploy(opts, &e, &stdout)
err := runKubernetesDeploy(opts, mockUtils, &stdout)
assert.NoError(t, err, "Command should not fail")
assert.Equal(t, e.Env, []string{"KUBECONFIG=This is my kubeconfig"})
assert.Equal(t, mockUtils.Env, []string{"KUBECONFIG=This is my kubeconfig"})
assert.Equal(t, "kubectl", e.Calls[1].Exec, "Wrong replace command")
assert.Equal(t, "kubectl", mockUtils.Calls[1].Exec, "Wrong replace command")
assert.Equal(t, []string{
"--insecure-skip-tls-verify=true",
fmt.Sprintf("--namespace=%v", opts.Namespace),
@ -948,9 +921,9 @@ spec:
"--force",
"--testParam",
"testValue",
}, e.Calls[1].Params, "kubectl parameters incorrect")
}, mockUtils.Calls[1].Params, "kubectl parameters incorrect")
appTemplate, err := ioutil.ReadFile(opts.AppTemplate)
appTemplate, err := mockUtils.FileRead(opts.AppTemplate)
assert.Contains(t, string(appTemplate), "my.registry:55555/path/to/Image:latest")
})