From 57fd73ecadca1d7e2933418f463bd4e486e63579 Mon Sep 17 00:00:00 2001 From: Matheus Fidelis Date: Fri, 17 May 2024 07:38:19 -0300 Subject: [PATCH] feature(extra_manifests): initial work fix(chart): lint fix(chart): typo fix(chart): typo fix(chart): template rendering fix(chart): template rendering fix(chart): helm chart test fix(chart): helm chart test fix(chart): helm chart test name --- charts/ingress-nginx/README.md | 1 + .../templates/extra-manifests.yaml | 5 +++ .../tests/extra-manifests_test.yaml | 28 ++++++++++++++++ charts/ingress-nginx/values.yaml | 32 +++++++++++++++++++ 4 files changed, 66 insertions(+) create mode 100644 charts/ingress-nginx/templates/extra-manifests.yaml create mode 100644 charts/ingress-nginx/tests/extra-manifests_test.yaml diff --git a/charts/ingress-nginx/README.md b/charts/ingress-nginx/README.md index 8ea6bae85..21dd832a2 100644 --- a/charts/ingress-nginx/README.md +++ b/charts/ingress-nginx/README.md @@ -538,6 +538,7 @@ As of version `1.26.0` of this chart, by simply not providing any clusterIP valu | defaultBackend.topologySpreadConstraints | list | `[]` | Topology spread constraints rely on node labels to identify the topology domain(s) that each Node is in. Ref.: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ | | defaultBackend.updateStrategy | object | `{}` | The update strategy to apply to the Deployment or DaemonSet # | | dhParam | string | `""` | A base64-encoded Diffie-Hellman parameter. This can be generated with: `openssl dhparam 4096 2> /dev/null | base64` # Ref: https://github.com/kubernetes/ingress-nginx/tree/main/docs/examples/customization/ssl-dh-param | +| extraManifests | list | `[]` | | | imagePullSecrets | list | `[]` | Optional array of imagePullSecrets containing private registry credentials # Ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ | | namespaceOverride | string | `""` | Override the deployment namespace; defaults to .Release.Namespace | | podSecurityPolicy.enabled | bool | `false` | | diff --git a/charts/ingress-nginx/templates/extra-manifests.yaml b/charts/ingress-nginx/templates/extra-manifests.yaml new file mode 100644 index 000000000..4a252859e --- /dev/null +++ b/charts/ingress-nginx/templates/extra-manifests.yaml @@ -0,0 +1,5 @@ +{{- range .Values.extraManifests }} +{{- $manifest := tpl . $ }} +{{ $manifest | nindent 0 }} +--- +{{- end }} diff --git a/charts/ingress-nginx/tests/extra-manifests_test.yaml b/charts/ingress-nginx/tests/extra-manifests_test.yaml new file mode 100644 index 000000000..da93c8fd1 --- /dev/null +++ b/charts/ingress-nginx/tests/extra-manifests_test.yaml @@ -0,0 +1,28 @@ +suite: extraManifests +templates: + - extra-manifests.yaml + +tests: + - it: should create a TargetGroupBinding if `extraManifests` contains TargetGroupBinding configuration + set: + extraManifests: + - | + apiVersion: elbv2.k8s.aws/v1beta1 + kind: TargetGroupBinding + metadata: + name: nginx-tgb + spec: + serviceRef: + name: ingress-nginx-controller + targetGroupARN: arn:aws:elasticloadbalancing:region:123123123:targetgroup/foo + asserts: + - hasDocuments: + count: 1 + - isKind: + of: TargetGroupBinding + - equal: + path: metadata.name + value: nginx-tgb + - equal: + path: spec.serviceRef.name + value: ingress-nginx-controller \ No newline at end of file diff --git a/charts/ingress-nginx/values.yaml b/charts/ingress-nginx/values.yaml index 2a361614c..219f17089 100644 --- a/charts/ingress-nginx/values.yaml +++ b/charts/ingress-nginx/values.yaml @@ -1134,3 +1134,35 @@ portNamePrefix: "" # This can be generated with: `openssl dhparam 4096 2> /dev/null | base64` ## Ref: https://github.com/kubernetes/ingress-nginx/tree/main/docs/examples/customization/ssl-dh-param dhParam: "" + +# Optional array to generate extra manifests. +extraManifests: [] + # - | + # apiVersion: cert-manager.io/v1 + # kind: ClusterIssuer + # metadata: + # name: letsencrypt-example + # spec: + # acme: + # server: https://acme-v02.api.letsencrypt.org/directory + # email: your-email@example.com + # privateKeySecretRef: + # name: letsencrypt-prod + # solvers: + # - http01: + # ingress: + # class: nginx + # - | + # apiVersion: cert-manager.io/v1 + # kind: Certificate + # metadata: + # name: foo-cert + # namespace: default + # spec: + # secretName: foo-tls-secret + # issuerRef: + # name: letsencrypt-example + # kind: ClusterIssuer + # commonName: foo.bar.com + # dnsNames: + # - foo.bar.com