diff --git a/charts/helm_lib/Chart.yaml b/charts/helm_lib/Chart.yaml index 3b61cba..0b8634b 100644 --- a/charts/helm_lib/Chart.yaml +++ b/charts/helm_lib/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 type: library name: deckhouse_lib_helm -version: 1.44.4 +version: 1.44.5 description: "Helm utils template definitions for Deckhouse modules." diff --git a/charts/helm_lib/README.md b/charts/helm_lib/README.md index 3cc6d2e..837a85d 100644 --- a/charts/helm_lib/README.md +++ b/charts/helm_lib/README.md @@ -35,6 +35,8 @@ | [helm_lib_module_image_no_fail](#helm_lib_module_image_no_fail) | | [helm_lib_module_common_image](#helm_lib_module_common_image) | | [helm_lib_module_common_image_no_fail](#helm_lib_module_common_image_no_fail) | +| [helm_lib_module_image_digest](#helm_lib_module_image_digest) | +| [helm_lib_module_image_digest_no_fail](#helm_lib_module_image_digest_no_fail) | | **Module Ingress Class** | | [helm_lib_module_ingress_class](#helm_lib_module_ingress_class) | | **Module Init Container** | @@ -415,6 +417,36 @@ list: - Template context with .Values, .Chart, etc - Container name + +### helm_lib_module_image_digest + + returns image digest + +#### Usage + +`{{ include "helm_lib_module_image_digest" (list . "" "(optional)") }} ` + +#### Arguments + +list: +- Template context with .Values, .Chart, etc +- Container name + + +### helm_lib_module_image_digest_no_fail + + returns image digest if found + +#### Usage + +`{{ include "helm_lib_module_image_digest_no_fail" (list . "" "(optional)") }} ` + +#### Arguments + +list: +- Template context with .Values, .Chart, etc +- Container name + ## Module Ingress Class ### helm_lib_module_ingress_class diff --git a/charts/helm_lib/templates/_module_image.tpl b/charts/helm_lib/templates/_module_image.tpl index 37afa6b..da797f5 100644 --- a/charts/helm_lib/templates/_module_image.tpl +++ b/charts/helm_lib/templates/_module_image.tpl @@ -75,4 +75,37 @@ {{- if $imageDigest }} {{- printf "%s@%s" $context.Values.global.modulesImages.registry.base $imageDigest }} {{- end }} -{{- end }} \ No newline at end of file +{{- end }} + +{{- /* Usage: {{ include "helm_lib_module_image_digest" (list . "" "(optional)") }} */ -}} +{{- /* returns image digest */ -}} +{{- define "helm_lib_module_image_digest" }} + {{- $context := index . 0 }} {{- /* Template context with .Values, .Chart, etc */ -}} + {{- $containerName := index . 1 | trimAll "\"" }} {{- /* Container name */ -}} + {{- $rawModuleName := $context.Chart.Name }} + {{- if ge (len .) 3 }} + {{- $rawModuleName = (index . 2) }} {{- /* Optional module name */ -}} + {{- end }} + {{- $moduleName := (include "helm_lib_module_camelcase_name" $rawModuleName) }} + {{- $moduleMap := index $context.Values.global.modulesImages.digests $moduleName | default dict }} + {{- $imageDigest := index $moduleMap $containerName | default "" }} + {{- if not $imageDigest }} + {{- $error := (printf "Image %s.%s has no digest" $moduleName $containerName ) }} + {{- fail $error }} + {{- end }} + {{- printf "%s" $imageDigest }} +{{- end }} + +{{- /* Usage: {{ include "helm_lib_module_image_digest_no_fail" (list . "" "(optional)") }} */ -}} +{{- /* returns image digest if found */ -}} +{{- define "helm_lib_module_image_digest_no_fail" }} + {{- $context := index . 0 }} {{- /* Template context with .Values, .Chart, etc */ -}} + {{- $containerName := index . 1 | trimAll "\"" }} {{- /* Container name */ -}} + {{- $moduleName := (include "helm_lib_module_camelcase_name" $context) }} + {{- if ge (len .) 3 }} + {{- $moduleName = (include "helm_lib_module_camelcase_name" (index . 2)) }} {{- /* Optional module name */ -}} + {{- end }} + {{- $moduleMap := index $context.Values.global.modulesImages.digests $moduleName | default dict }} + {{- $imageDigest := index $moduleMap $containerName | default "" }} + {{- printf "%s" $imageDigest }} +{{- end }} diff --git a/tests/templates/helm_lib_module_image.yaml b/tests/templates/helm_lib_module_image.yaml index 9cb9499..52124aa 100644 --- a/tests/templates/helm_lib_module_image.yaml +++ b/tests/templates/helm_lib_module_image.yaml @@ -3,4 +3,15 @@ embeddedModuleWithOptionalName: {{ include "helm_lib_module_image" (list . "test --- externalModuleImage: {{ include "helm_lib_module_image" (list . "externalContainer") }} externalModuleImageWithOptionalName: {{ include "helm_lib_module_image" (list . "externalContainer" "someModule") }} -externalModuleKebabImageWithOptionalName: {{ include "helm_lib_module_image" (list . "externalContainer" "some-module") }} \ No newline at end of file +externalModuleKebabImageWithOptionalName: {{ include "helm_lib_module_image" (list . "externalContainer" "some-module") }} +--- +externalModuleImageDigest: {{ include "helm_lib_module_image_digest" (list . "externalContainer") }} +externalModuleImageDigestWithOptionalName: {{ include "helm_lib_module_image_digest" (list . "externalContainer" "someModule") }} +externalModuleImageDigestWithOptionalNameTestModule: {{ include "helm_lib_module_image_digest" (list . "externalContainer" "testModule") }} +--- +externalModuleImageDigestNoFail: {{ include "helm_lib_module_image_digest_no_fail" (list . "externalContainer") }} +externalModuleImageDigestWithOptionalNameNoFail: {{ include "helm_lib_module_image_digest_no_fail" (list . "externalContainer" "someModule") }} +externalModuleImageDigestWithOptionalNameTestModuleNoFail: {{ include "helm_lib_module_image_digest_no_fail" (list . "externalContainer" "testModule") }} +--- +externalModuleImageDigestWithOptionalNameContainerNotExistNoFail: {{ include "helm_lib_module_image_digest_no_fail" (list . "externalContainer2NoFail") }} +externalModuleImageDigestWithOptionalNameModuleNotExistNoFail: {{ include "helm_lib_module_image_digest_no_fail" (list . "externalContainer" "moduleNotExist") }} diff --git a/tests/tests/helm_lib_module_image_test.yaml b/tests/tests/helm_lib_module_image_test.yaml index 11e37f9..d8614db 100644 --- a/tests/tests/helm_lib_module_image_test.yaml +++ b/tests/tests/helm_lib_module_image_test.yaml @@ -57,4 +57,39 @@ tests: asserts: - equal: path: "externalModuleImage" - value: "registry.deckhouse.io/modules/test-module@sha321" \ No newline at end of file + value: "registry.deckhouse.io/modules/test-module@sha321" + + - it: should render external module image digest + documentIndex: 2 + asserts: + - equal: + path: "externalModuleImageDigest" + value: "sha321" + - equal: + path: "externalModuleImageDigestWithOptionalName" + value: "sha543" + - equal: + path: "externalModuleImageDigestWithOptionalNameTestModule" + value: "sha321" + + - it: should render external module image digest no fail + documentIndex: 3 + asserts: + - equal: + path: "externalModuleImageDigestNoFail" + value: "sha321" + - equal: + path: "externalModuleImageDigestWithOptionalNameNoFail" + value: "sha543" + - equal: + path: "externalModuleImageDigestWithOptionalNameTestModuleNoFail" + value: "sha321" + - it: should render external module image digest no fail with null + documentIndex: 4 + asserts: + - equal: + path: "externalModuleImageDigestWithOptionalNameModuleNotExistNoFail" + value: null + - equal: + path: "externalModuleImageDigestWithOptionalNameContainerNotExistNoFail" + value: null