diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1203be01b..7af11c277 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -163,6 +163,14 @@ jobs: go-version: '1.21.3' check-latest: true + - name: Install Helm Unit Test Plugin + run: | + helm plugin install https://github.com/quintush/helm-unittest + + - name: Run Helm Unit Tests + run: | + helm unittest charts/ingress-nginx -d + - name: cache uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2 with: diff --git a/.gitignore b/.gitignore index 60bf6a304..73108f627 100644 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,4 @@ cmd/plugin/release/*.tar.gz cmd/plugin/release/LICENSE tmp/ test/junitreports/ +tests/__snapshot__ diff --git a/charts/ingress-nginx/.helmignore b/charts/ingress-nginx/.helmignore index 50af03172..109b40811 100644 --- a/charts/ingress-nginx/.helmignore +++ b/charts/ingress-nginx/.helmignore @@ -20,3 +20,4 @@ .idea/ *.tmproj .vscode/ +__snapshot__ diff --git a/charts/ingress-nginx/Chart.yaml b/charts/ingress-nginx/Chart.yaml index 30ca8afaa..b664a6714 100644 --- a/charts/ingress-nginx/Chart.yaml +++ b/charts/ingress-nginx/Chart.yaml @@ -19,4 +19,4 @@ maintainers: name: ingress-nginx sources: - https://github.com/kubernetes/ingress-nginx -version: 4.8.3 +version: 4.8.4 diff --git a/charts/ingress-nginx/README.md b/charts/ingress-nginx/README.md index e2777fbe2..c03f290df 100644 --- a/charts/ingress-nginx/README.md +++ b/charts/ingress-nginx/README.md @@ -2,7 +2,7 @@ [ingress-nginx](https://github.com/kubernetes/ingress-nginx) Ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer -![Version: 4.8.3](https://img.shields.io/badge/Version-4.8.3-informational?style=flat-square) ![AppVersion: 1.9.4](https://img.shields.io/badge/AppVersion-1.9.4-informational?style=flat-square) +![Version: 4.8.4](https://img.shields.io/badge/Version-4.8.4-informational?style=flat-square) ![AppVersion: 1.9.4](https://img.shields.io/badge/AppVersion-1.9.4-informational?style=flat-square) To use, add `ingressClassName: nginx` spec field or the `kubernetes.io/ingress.class: nginx` annotation to your Ingress resources. @@ -465,6 +465,7 @@ As of version `1.26.0` of this chart, by simply not providing any clusterIP valu | defaultBackend.enabled | bool | `false` | | | defaultBackend.existingPsp | string | `""` | Use an existing PSP instead of creating one | | defaultBackend.extraArgs | object | `{}` | | +| defaultBackend.extraConfigMaps | list | `[]` | | | defaultBackend.extraEnvs | list | `[]` | Additional environment variables to set for defaultBackend pods | | defaultBackend.extraVolumeMounts | list | `[]` | | | defaultBackend.extraVolumes | list | `[]` | | diff --git a/charts/ingress-nginx/templates/default-backend-extra-configmaps.yaml b/charts/ingress-nginx/templates/default-backend-extra-configmaps.yaml new file mode 100644 index 000000000..88b59280b --- /dev/null +++ b/charts/ingress-nginx/templates/default-backend-extra-configmaps.yaml @@ -0,0 +1,23 @@ +{{- if .Values.defaultBackend.enabled }} + {{- range .Values.defaultBackend.extraConfigMaps }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .name }} + namespace: {{ include "ingress-nginx.namespace" $ | quote }} + labels: + {{- include "ingress-nginx.labels" $ | nindent 4 }} + {{- with $.Values.defaultBackend.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +data: + {{- with .data }} + {{- toYaml . | nindent 2 }} + {{- end }} + {{- end }} +{{- end }} + diff --git a/charts/ingress-nginx/tests/default-backend-extra-configmaps_test.yaml b/charts/ingress-nginx/tests/default-backend-extra-configmaps_test.yaml new file mode 100644 index 000000000..b18ceedfa --- /dev/null +++ b/charts/ingress-nginx/tests/default-backend-extra-configmaps_test.yaml @@ -0,0 +1,49 @@ +suite: test default backend extra ConfigMaps +templates: + - default-backend-extra-configmaps.yaml + +tests: + - it: should not create any ConfigMap by default + set: + Release.Namespace: default + defaultBackend.enabled: true + asserts: + - hasDocuments: + count: 0 + + - it: should create one ConfigMap + set: + Release.Namespace: default + defaultBackend.enabled: true + defaultBackend.extraConfigMaps: + - name: my-configmap-1 + data: + key1: value1 + asserts: + - hasDocuments: + count: 1 + - isKind: + of: ConfigMap + - equal: + path: metadata.name + value: my-configmap-1 + + - it: should correctly render multiple ConfigMaps + set: + Release.Namespace: nginx + defaultBackend.enabled: true + defaultBackend.extraConfigMaps: + - name: my-configmap-1 + data: + key1: value1 + - name: my-configmap-2 + data: + key2: value2 + asserts: + - hasDocuments: + count: 2 + - isKind: + of: ConfigMap + - matchRegex: + path: metadata.name + pattern: "my-configmap-\\d+" diff --git a/charts/ingress-nginx/values.yaml b/charts/ingress-nginx/values.yaml index 0842a70bf..c1e89d777 100644 --- a/charts/ingress-nginx/values.yaml +++ b/charts/ingress-nginx/values.yaml @@ -931,6 +931,21 @@ defaultBackend: ## Additional volumes to the default backend pod. # - name: copy-portal-skins # emptyDir: {} + extraConfigMaps: [] + ## Additional configmaps to the default backend pod. + # Example ConfigMap, uncomment and configure as needed + # - name: my-extra-configmap-1 + # labels: + # type: config-1 + # data: + # extra_file_1.html: | + # + # - name: my-extra-configmap-2 + # labels: + # type: config-2 + # data: + # extra_file_2.html: | + # autoscaling: annotations: {}