From f729651dbe38fb526ab09006bf6a07401622c686 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=E1=B4=87=CA=80=C9=B4=E1=B4=85=20S=E1=B4=84=CA=9C?= =?UTF-8?q?=E1=B4=8F=CA=80=C9=A2=E1=B4=87=CA=80s?= Date: Thu, 5 Oct 2023 12:25:05 +0200 Subject: [PATCH] fix(common): Release 2.0.2 (#196) --- .ci/mkdocs/mkdocs.yml | 9 ++- .../tests/controller/type_test.yaml | 79 +++++++++++++++++- .../tests/pod/field_serviceAccount_test.yaml | 70 ++++++++++++++++ charts/library/common/Chart.yaml | 9 +-- charts/library/common/README.md | 4 +- .../lib/controller/_valuesToObject.tpl | 5 ++ .../lib/pod/fields/_serviceAccountName.tpl | 13 +-- .../templates/lib/service/_validate.tpl | 2 +- .../lib/serviceAccount/_valuesToObject.tpl | 15 ++-- charts/other/app-template/Chart.yaml | 6 +- charts/other/app-template/README.md | 4 +- .../howto/helm-templates.md | 0 .../howto/index.md | 0 docs/app-template/howto/multiple-services.md | 80 +++++++++++++++++++ .../howto/multiple-subpath.md | 0 docs/app-template/index.md | 5 -- 16 files changed, 260 insertions(+), 41 deletions(-) create mode 100644 charts/library/common-test/tests/pod/field_serviceAccount_test.yaml rename docs/{common-library => app-template}/howto/helm-templates.md (100%) rename docs/{common-library => app-template}/howto/index.md (100%) create mode 100644 docs/app-template/howto/multiple-services.md rename docs/{common-library => app-template}/howto/multiple-subpath.md (100%) diff --git a/.ci/mkdocs/mkdocs.yml b/.ci/mkdocs/mkdocs.yml index 0a19f124..047539b4 100644 --- a/.ci/mkdocs/mkdocs.yml +++ b/.ci/mkdocs/mkdocs.yml @@ -75,9 +75,10 @@ nav: - NFS share: common-library/storage/types/nfs-share.md - persistentVolumeClaim: common-library/storage/types/persistentVolumeClaim.md - Secret: common-library/storage/types/secret.md - - How To...: - - common-library/howto/index.md - - Helm templates: common-library/howto/helm-templates.md - - Multiple subPaths for 1 volume: common-library/howto/multiple-subpath.md - App Template: - app-template/index.md + - How To...: + - app-template/howto/index.md + - Helm templates: app-template/howto/helm-templates.md + - Multiple subPaths for 1 volume: app-template/howto/multiple-subpath.md + - Multiple services with 1 or more controllers: app-template/howto/multiple-services.md diff --git a/charts/library/common-test/tests/controller/type_test.yaml b/charts/library/common-test/tests/controller/type_test.yaml index a917c526..b82600c5 100644 --- a/charts/library/common-test/tests/controller/type_test.yaml +++ b/charts/library/common-test/tests/controller/type_test.yaml @@ -6,13 +6,88 @@ templates: tests: - it: default should pass asserts: - - documentIndex: &ControllerDoc 0 + - documentIndex: &deploymentDoc 0 isKind: of: Deployment - - documentIndex: *ControllerDoc + - documentIndex: *deploymentDoc equal: path: metadata.name value: RELEASE-NAME + - documentIndex: *deploymentDoc + equal: + path: metadata.labels['app.kubernetes.io/component'] + value: main + + - it: additional controllers should pass + set: + controllers: + second: + containers: + main: + image: + repository: ghcr.io/mendhak/http-https-echo + tag: 30 + asserts: + - hasDocuments: + count: 3 + - documentIndex: &firstDeploymentDoc 0 + isKind: + of: Deployment + - documentIndex: *firstDeploymentDoc + equal: + path: metadata.name + value: RELEASE-NAME + - documentIndex: *firstDeploymentDoc + equal: + path: metadata.labels['app.kubernetes.io/component'] + value: main + - documentIndex: &secondDeploymentDoc 1 + isKind: + of: Deployment + - documentIndex: *secondDeploymentDoc + equal: + path: metadata.name + value: RELEASE-NAME-second + - documentIndex: *secondDeploymentDoc + equal: + path: metadata.labels['app.kubernetes.io/component'] + value: second + + - it: additional controllers with nameOverride should pass + set: + controllers: + second: + nameOverride: testOverride + containers: + main: + image: + repository: ghcr.io/mendhak/http-https-echo + tag: 30 + asserts: + - hasDocuments: + count: 3 + - documentIndex: &firstDeploymentDoc 0 + isKind: + of: Deployment + - documentIndex: *firstDeploymentDoc + equal: + path: metadata.name + value: RELEASE-NAME + - documentIndex: *firstDeploymentDoc + equal: + path: metadata.labels['app.kubernetes.io/component'] + value: main + - documentIndex: &secondDeploymentDoc 1 + isKind: + of: Deployment + - documentIndex: *secondDeploymentDoc + equal: + path: metadata.name + value: RELEASE-NAME-testOverride + - documentIndex: *secondDeploymentDoc + equal: + path: metadata.labels['app.kubernetes.io/component'] + value: second - it: daemonset should pass set: diff --git a/charts/library/common-test/tests/pod/field_serviceAccount_test.yaml b/charts/library/common-test/tests/pod/field_serviceAccount_test.yaml new file mode 100644 index 00000000..f197ef12 --- /dev/null +++ b/charts/library/common-test/tests/pod/field_serviceAccount_test.yaml @@ -0,0 +1,70 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json +suite: pod serviceAccount +templates: + - common.yaml +tests: + - it: default should pass + asserts: + - hasDocuments: + count: 2 + - documentIndex: &deploymentDocument 0 + isKind: + of: Deployment + - documentIndex: *deploymentDocument + equal: + path: spec.template.spec.serviceAccountName + value: default + + - it: with create, without name should pass + set: + serviceAccount: + create: true + asserts: + - hasDocuments: + count: 4 + - documentIndex: &serviceAccountDocument 0 + isKind: + of: ServiceAccount + - documentIndex: &deploymentDocument 1 + isKind: + of: Deployment + - documentIndex: *deploymentDocument + equal: + path: spec.template.spec.serviceAccountName + value: RELEASE-NAME + + - it: with create, with name should pass + set: + serviceAccount: + create: true + name: mySA + asserts: + - hasDocuments: + count: 4 + - documentIndex: &serviceAccountDocument 0 + isKind: + of: ServiceAccount + - documentIndex: &deploymentDocument 1 + isKind: + of: Deployment + - documentIndex: *deploymentDocument + equal: + path: spec.template.spec.serviceAccountName + value: mySA + + - it: without create, with name should pass + set: + serviceAccount: + create: false + name: mySA + asserts: + - hasDocuments: + count: 2 + - documentIndex: &deploymentDocument 0 + isKind: + of: Deployment + - documentIndex: *deploymentDocument + equal: + path: spec.template.spec.serviceAccountName + value: mySA diff --git a/charts/library/common/Chart.yaml b/charts/library/common/Chart.yaml index 8e6c82e1..3dbfb281 100644 --- a/charts/library/common/Chart.yaml +++ b/charts/library/common/Chart.yaml @@ -3,7 +3,7 @@ apiVersion: v2 name: common description: Function library for Helm charts type: library -version: 2.0.1 +version: 2.0.2 kubeVersion: ">=1.22.0-0" keywords: - common @@ -16,10 +16,7 @@ annotations: artifacthub.io/changes: |- - kind: fixed description: |- - Mounting of volumeClaimTemplates was not implemented properly. + ServiceAccount could not be referenced without creating - kind: fixed description: |- - Using advancedMounts for initContainers resulted in an error. - - kind: fixed - description: |- - Validations for container images have been improved. + Controllers without a type did not default to Deployment diff --git a/charts/library/common/README.md b/charts/library/common/README.md index 3ca50c32..0ec0d3f1 100644 --- a/charts/library/common/README.md +++ b/charts/library/common/README.md @@ -1,6 +1,6 @@ # common -![Version: 2.0.1](https://img.shields.io/badge/Version-2.0.1-informational?style=flat-square) ![Type: library](https://img.shields.io/badge/Type-library-informational?style=flat-square) +![Version: 2.0.2](https://img.shields.io/badge/Version-2.0.2-informational?style=flat-square) ![Type: library](https://img.shields.io/badge/Type-library-informational?style=flat-square) Function library for Helm charts @@ -27,7 +27,7 @@ Include this chart as a dependency in your `Chart.yaml` e.g. # Chart.yaml dependencies: - name: common - version: 2.0.1 + version: 2.0.2 repository: https://bjw-s.github.io/helm-charts/ ``` diff --git a/charts/library/common/templates/lib/controller/_valuesToObject.tpl b/charts/library/common/templates/lib/controller/_valuesToObject.tpl index 4ff19f4e..267ee0aa 100644 --- a/charts/library/common/templates/lib/controller/_valuesToObject.tpl +++ b/charts/library/common/templates/lib/controller/_valuesToObject.tpl @@ -6,6 +6,11 @@ Convert controller values to an object {{- $identifier := .id -}} {{- $objectValues := .values -}} + {{- /* Default the controller type to Deployment */ -}} + {{- if eq (dig "type" "" $objectValues) "" -}} + {{- $_ := set $objectValues "type" "deployment" -}} + {{- end -}} + {{- /* Determine and inject the controller name */ -}} {{- $objectName := (include "bjw-s.common.lib.chart.names.fullname" $rootContext) -}} diff --git a/charts/library/common/templates/lib/pod/fields/_serviceAccountName.tpl b/charts/library/common/templates/lib/pod/fields/_serviceAccountName.tpl index 1ec57286..947a1a46 100644 --- a/charts/library/common/templates/lib/pod/fields/_serviceAccountName.tpl +++ b/charts/library/common/templates/lib/pod/fields/_serviceAccountName.tpl @@ -4,15 +4,8 @@ Returns the value for serviceAccountName {{- define "bjw-s.common.lib.pod.field.serviceAccountName" -}} {{- $rootContext := .ctx.rootContext -}} - {{- /* Default to "default" */ -}} - {{- $name := "default" -}} + {{- $serviceAccountValues := (mustDeepCopy $rootContext.Values.serviceAccount) -}} + {{- $serviceAccountObject := (include "bjw-s.common.lib.serviceAccount.valuesToObject" (dict "rootContext" $rootContext "id" "default" "values" $serviceAccountValues)) | fromYaml -}} + {{- $serviceAccountObject.name -}} - {{- /* See if an override is needed */ -}} - {{- if $rootContext.Values.serviceAccount.create -}} - {{- $serviceAccountValues := (mustDeepCopy $rootContext.Values.serviceAccount) -}} - {{- $serviceAccountObject := (include "bjw-s.common.lib.serviceAccount.valuesToObject" (dict "rootContext" $rootContext "id" "default" "values" $serviceAccountValues)) | fromYaml -}} - {{- $name = $serviceAccountObject.name -}} - {{- end -}} - - {{- $name -}} {{- end -}} diff --git a/charts/library/common/templates/lib/service/_validate.tpl b/charts/library/common/templates/lib/service/_validate.tpl index 2072c8bd..e9558cea 100644 --- a/charts/library/common/templates/lib/service/_validate.tpl +++ b/charts/library/common/templates/lib/service/_validate.tpl @@ -6,7 +6,7 @@ Validate Service values {{- $serviceObject := .object -}} {{- if empty (get $serviceObject "controller") -}} - {{- fail (printf "controller is required for Service. (service: %s)" $serviceObject.identifier) -}} + {{- fail (printf "controller field is required for Service. (service: %s)" $serviceObject.identifier) -}} {{- end -}} {{- /* Validate Service type */ -}} diff --git a/charts/library/common/templates/lib/serviceAccount/_valuesToObject.tpl b/charts/library/common/templates/lib/serviceAccount/_valuesToObject.tpl index cf6e37ca..9451e101 100644 --- a/charts/library/common/templates/lib/serviceAccount/_valuesToObject.tpl +++ b/charts/library/common/templates/lib/serviceAccount/_valuesToObject.tpl @@ -1,5 +1,5 @@ {{/* -Convert Secret values to an object +Convert ServiceAccount values to an object */}} {{- define "bjw-s.common.lib.serviceAccount.valuesToObject" -}} {{- $rootContext := .rootContext -}} @@ -7,12 +7,15 @@ Convert Secret values to an object {{- $objectValues := .values -}} {{- /* Determine and inject the serviceAccount name */ -}} - {{- $objectName := (include "bjw-s.common.lib.chart.names.fullname" $rootContext) -}} - - {{- if $objectValues.name -}} - {{- $objectName = $objectValues.name -}} + {{- $serviceAccountName := "" -}} + {{- $defaultServiceAccountName := "default" -}} + {{- if $objectValues.create -}} + {{- $defaultServiceAccountName = (include "bjw-s.common.lib.chart.names.fullname" $rootContext) -}} {{- end -}} - {{- $_ := set $objectValues "name" $objectName -}} + + {{- $serviceAccountName = default $defaultServiceAccountName $objectValues.name -}} + + {{- $_ := set $objectValues "name" $serviceAccountName -}} {{- $_ := set $objectValues "identifier" $identifier -}} {{- /* Return the serviceAccount object */ -}} diff --git a/charts/other/app-template/Chart.yaml b/charts/other/app-template/Chart.yaml index bd22ebbb..1fce3f0b 100644 --- a/charts/other/app-template/Chart.yaml +++ b/charts/other/app-template/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: A common powered chart template. This can be useful for small projects that don't have their own chart. name: app-template -version: 2.0.1 +version: 2.0.2 kubeVersion: ">=1.22.0-0" maintainers: - name: bjw-s @@ -10,12 +10,12 @@ maintainers: dependencies: - name: common repository: https://bjw-s.github.io/helm-charts - version: 2.0.1 + version: 2.0.2 annotations: artifacthub.io/changes: |- - kind: changed description: | - Updated library version to 2.0.1. + Updated library version to 2.0.2. links: - name: Upgrade instructions from v1.x url: https://github.com/bjw-s/helm-charts/tree/main/charts/other/app-template#from-1xx-to-20x diff --git a/charts/other/app-template/README.md b/charts/other/app-template/README.md index 13c92caf..9436350d 100644 --- a/charts/other/app-template/README.md +++ b/charts/other/app-template/README.md @@ -1,6 +1,6 @@ # app-template -![Version: 2.0.1](https://img.shields.io/badge/Version-2.0.1-informational?style=flat-square) +![Version: 2.0.2](https://img.shields.io/badge/Version-2.0.2-informational?style=flat-square) A common powered chart template. This can be useful for small projects that don't have their own chart. @@ -12,7 +12,7 @@ Kubernetes: `>=1.22.0-0` | Repository | Name | Version | |------------|------|---------| -| https://bjw-s.github.io/helm-charts | common | 2.0.1 | +| https://bjw-s.github.io/helm-charts | common | 2.0.2 | ## Installing the Chart diff --git a/docs/common-library/howto/helm-templates.md b/docs/app-template/howto/helm-templates.md similarity index 100% rename from docs/common-library/howto/helm-templates.md rename to docs/app-template/howto/helm-templates.md diff --git a/docs/common-library/howto/index.md b/docs/app-template/howto/index.md similarity index 100% rename from docs/common-library/howto/index.md rename to docs/app-template/howto/index.md diff --git a/docs/app-template/howto/multiple-services.md b/docs/app-template/howto/multiple-services.md new file mode 100644 index 00000000..57a5ffe9 --- /dev/null +++ b/docs/app-template/howto/multiple-services.md @@ -0,0 +1,80 @@ +# Multiple Services + +## With a single controller + +It is possible to have multiple Service objects that point to a single controller. + +### Example + +```yaml +controllers: + main: + containers: + main: + image: + repository: ghcr.io/mendhak/http-https-echo + tag: 30 + pullPolicy: IfNotPresent + +service: + main: + # The controller for this service is set to + # "main" by the default app-template values + # controller: main + ports: + http: + port: 8080 + second: + controller: main # (1)! + ports: + http: + port: 8081 +``` + +1. Point to the controller with the "main" identifier + +## With multiple controllers + +It is also possible have multiple Service objects that point to different controllers. + +### Example + +```yaml +controllers: + main: + containers: + main: + image: + repository: ghcr.io/mendhak/http-https-echo + tag: 30 + pullPolicy: IfNotPresent + second: + containers: + main: + image: + repository: ghcr.io/mendhak/http-https-echo + tag: 30 + pullPolicy: IfNotPresent + +service: + main: + # The controller for this service is set to + # "main" by the default app-template values + # controller: main + ports: + http: + port: 8080 + second: + controller: main # (1)! + ports: + http: + port: 8081 + third: + controller: second # (2)! + ports: + http: + port: 8081 +``` + +1. Point to the controller with the "main" identifier +2. Point to the controller with the "second" identifier diff --git a/docs/common-library/howto/multiple-subpath.md b/docs/app-template/howto/multiple-subpath.md similarity index 100% rename from docs/common-library/howto/multiple-subpath.md rename to docs/app-template/howto/multiple-subpath.md diff --git a/docs/app-template/index.md b/docs/app-template/index.md index 943e5e65..462c920e 100644 --- a/docs/app-template/index.md +++ b/docs/app-template/index.md @@ -1,8 +1,3 @@ ---- -hide: - - navigation ---- - # App Template ## Background