Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 26 additions & 6 deletions cmd/kubernetesDeploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ func runHelmDeploy(config kubernetesDeployOptions, utils kubernetes.DeployUtils,
log.Entry().WithError(err).Fatalf("Container registry url '%v' incorrect", config.ContainerRegistryURL)
}

fmt.Printf("ContainerRegistryURL: %s\n", config.ContainerRegistryURL)

helmValues, err := defineDeploymentValues(config, containerRegistry)
if err != nil {
return errors.Wrap(err, "failed to process deployment values")
Expand Down Expand Up @@ -534,6 +536,13 @@ func defineKubeSecretParams(config kubernetesDeployOptions, containerRegistry st
func defineDeploymentValues(config kubernetesDeployOptions, containerRegistry string) (*deploymentValues, error) {
var err error
var useDigests bool

// cds-dk chart templates creates images in format "<global.image.registry>/<imageName>:<tag>"
if config.NoContainerRegistryPrefix {
fmt.Printf("defineDeploymentValues: omit containerRegistry concatenation\n")
containerRegistry = ""
}

dv := &deploymentValues{
mapping: config.ValuesMapping,
}
Expand All @@ -550,7 +559,9 @@ func defineDeploymentValues(config kubernetesDeployOptions, containerRegistry st

useDigests = true
}

for i, key := range config.ImageNames {

name, tag, err := splitFullImageName(config.ImageNameTags[i])
if err != nil {
log.Entry().WithError(err).Fatalf("Container image '%v' incorrect", config.ImageNameTags[i])
Expand All @@ -560,17 +571,17 @@ func defineDeploymentValues(config kubernetesDeployOptions, containerRegistry st
tag = fmt.Sprintf("%s@%s", tag, config.ImageDigests[i])
}

dv.add(createGoKey("image", key, "repository"), fmt.Sprintf("%v/%v", containerRegistry, name))
dv.add(createGoKey("image", key, "repository"), formatRepository(containerRegistry, name))
dv.add(createGoKey("image", key, "tag"), tag)
// usable for subcharts:
dv.add(createGoKey(key, "image", "repository"), fmt.Sprintf("%v/%v", containerRegistry, name))
dv.add(createGoKey(key, "image", "repository"), formatRepository(containerRegistry, name))
dv.add(createGoKey(key, "image", "tag"), tag)
dv.add(createHelmKey(key, "image", "repository"), fmt.Sprintf("%v/%v", containerRegistry, name))
dv.add(createHelmKey(key, "image", "repository"), formatRepository(containerRegistry, name))
dv.add(createHelmKey(key, "image", "tag"), tag)

if len(config.ImageNames) == 1 {
dv.singleImage = true
dv.add("image.repository", fmt.Sprintf("%v/%v", containerRegistry, name))
dv.add("image.repository", formatRepository(containerRegistry, name))
dv.add("image.tag", tag)
}
}
Expand All @@ -591,16 +602,25 @@ func defineDeploymentValues(config kubernetesDeployOptions, containerRegistry st
} else {
return nil, fmt.Errorf("image information not given - please either set image or containerImageName and containerImageTag")
}
dv.add("image.repository", fmt.Sprintf("%v/%v", containerRegistry, containerImageName))
dv.add("image.repository", formatRepository(containerRegistry, containerImageName))

dv.add("image.tag", containerImageTag)

dv.add(createGoKey("image", containerImageName, "repository"), fmt.Sprintf("%v/%v", containerRegistry, containerImageName))
dv.add(createGoKey("image", containerImageName, "repository"), formatRepository(containerRegistry, containerImageName))
dv.add(createGoKey("image", containerImageName, "tag"), containerImageTag)
}

return dv, nil
}

// formatRepository returns the repository string in the format "<registry>/<imageName>"
func formatRepository(containerRegistry, containerImageName string) string {
if len(containerRegistry) == 0 {
return containerImageName
}
return fmt.Sprintf("%v/%v", containerRegistry, containerImageName)
}

func downloadAndExecuteExtensionScript(script, githubToken string, utils kubernetes.DeployUtils) error {
setupScript, err := piperhttp.DownloadExecutable(githubToken, utils, utils, script)
if err != nil {
Expand Down
11 changes: 11 additions & 0 deletions cmd/kubernetesDeploy_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

115 changes: 115 additions & 0 deletions cmd/kubernetesDeploy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,121 @@ func newKubernetesDeployMockUtils() kubernetesDeployMockUtils {
return utils
}

func TestDefineDeploymentValues(t *testing.T) {
tt := []struct {
name string
config kubernetesDeployOptions
containerRegistry string
expectedResult deploymentValues
expectedError error
}{
{
name: "single image",
config: kubernetesDeployOptions{
NoContainerRegistryPrefix: false,
ImageNames: []string{},
Image: "myImage:myTag",
},
containerRegistry: "my.registry",
expectedResult: deploymentValues{
mapping: map[string]interface{}(nil),
singleImage: true,
values: []struct{ key, value string }{
{key: "image.repository", value: "my.registry/myImage"},
{key: "image.tag", value: "myTag"},
{key: "image.myImage.repository", value: "my.registry/myImage"},
{key: "image.myImage.tag", value: "myTag"},
},
},
expectedError: nil,
},
{
name: "single image without registry prefix",
config: kubernetesDeployOptions{
NoContainerRegistryPrefix: true,
ImageNames: []string{},
Image: "myImage:myTag",
},
containerRegistry: "my.registry",
expectedResult: deploymentValues{
mapping: map[string]interface{}(nil),
singleImage: true,
values: []struct{ key, value string }{
{key: "image.repository", value: "myImage"},
{key: "image.tag", value: "myTag"},
{key: "image.myImage.repository", value: "myImage"},
{key: "image.myImage.tag", value: "myTag"},
},
},
expectedError: nil,
},
{
name: "multiple images",
config: kubernetesDeployOptions{
NoContainerRegistryPrefix: false,
ImageNames: []string{"myImage/sub1", "myImage/sub2"},
ImageNameTags: []string{"myImage/sub1:myTag", "myImage/sub2:myTag"},
},
containerRegistry: "my.registry",
expectedResult: deploymentValues{
mapping: map[string]interface{}(nil),
singleImage: false,
values: []struct{ key, value string }{
{key: "image.myImage/sub1.repository", value: "my.registry/myImage/sub1"},
{key: "image.myImage/sub1.tag", value: "myTag"},
{key: "myImage/sub1.image.repository", value: "my.registry/myImage/sub1"},
{key: "myImage/sub1.image.tag", value: "myTag"},
{key: "myImage/sub1.image.repository", value: "my.registry/myImage/sub1"},
{key: "myImage/sub1.image.tag", value: "myTag"},
{key: "image.myImage/sub2.repository", value: "my.registry/myImage/sub2"},
{key: "image.myImage/sub2.tag", value: "myTag"},
{key: "myImage/sub2.image.repository", value: "my.registry/myImage/sub2"},
{key: "myImage/sub2.image.tag", value: "myTag"},
{key: "myImage/sub2.image.repository", value: "my.registry/myImage/sub2"},
{key: "myImage/sub2.image.tag", value: "myTag"},
},
},
expectedError: nil,
},
{
name: "multiple images without registry prefix",
config: kubernetesDeployOptions{
NoContainerRegistryPrefix: true,
ImageNames: []string{"myImage/sub1", "myImage/sub2"},
ImageNameTags: []string{"myImage/sub1:myTag", "myImage/sub2:myTag"},
},
containerRegistry: "my.registry",
expectedResult: deploymentValues{
mapping: map[string]interface{}(nil),
singleImage: false,
values: []struct{ key, value string }{
{key: "image.myImage/sub1.repository", value: "myImage/sub1"},
{key: "image.myImage/sub1.tag", value: "myTag"},
{key: "myImage/sub1.image.repository", value: "myImage/sub1"},
{key: "myImage/sub1.image.tag", value: "myTag"},
{key: "myImage/sub1.image.repository", value: "myImage/sub1"},
{key: "myImage/sub1.image.tag", value: "myTag"},
{key: "image.myImage/sub2.repository", value: "myImage/sub2"},
{key: "image.myImage/sub2.tag", value: "myTag"},
{key: "myImage/sub2.image.repository", value: "myImage/sub2"},
{key: "myImage/sub2.image.tag", value: "myTag"},
{key: "myImage/sub2.image.repository", value: "myImage/sub2"},
{key: "myImage/sub2.image.tag", value: "myTag"},
},
},
expectedError: nil,
},
}

for _, test := range tt {
t.Run(test.name, func(t *testing.T) {
result, err := defineDeploymentValues(test.config, test.containerRegistry)
assert.Equal(t, test.expectedResult, *result)
assert.Equal(t, test.expectedError, err, "Error value not as expected")
})
}
}

func TestRunKubernetesDeploy(t *testing.T) {

t.Run("test helm", func(t *testing.T) {
Expand Down
9 changes: 9 additions & 0 deletions resources/metadata/kubernetesDeploy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,15 @@ spec:
- STAGES
- STEPS
mandatory: true
- name: noContainerRegistryPrefix
type: bool
description: "Defines whether the URL is concatenated as a prefix to the image name. Since the cds-dk templates already include the registry, this concatenation must be optionally disabled."
scope:
- GENERAL
- PARAMETERS
- STAGES
- STEPS
default: false
- name: containerRegistryUser
description: Username for container registry access - typically provided by the CI/CD environment.
type: string
Expand Down
Loading