From fe7054ac97061f2747bcdf57c6ce16a035b8a136 Mon Sep 17 00:00:00 2001 From: Eric Ace <24485843+aceeric@users.noreply.github.com> Date: Sat, 28 Jun 2025 20:36:52 -0400 Subject: [PATCH 01/10] Allow the webhook sidecar to be optional in case the webhook is outside the cluster --- charts/external-dns/README.md | 1 + charts/external-dns/templates/deployment.yaml | 2 ++ charts/external-dns/values.schema.json | 4 ++++ charts/external-dns/values.yaml | 2 ++ 4 files changed, 9 insertions(+) diff --git a/charts/external-dns/README.md b/charts/external-dns/README.md index 33286d914..1a9cfcc94 100644 --- a/charts/external-dns/README.md +++ b/charts/external-dns/README.md @@ -143,6 +143,7 @@ If `namespaced` is set to `true`, please ensure that `sources` my only contains | provider.webhook.securityContext | object | See _values.yaml_ | [Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container. | | provider.webhook.service.port | int | `8080` | Webhook exposed HTTP port for the service. | | provider.webhook.serviceMonitor | object | See _values.yaml_ | Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container. | +| provider.webhook.sidecar | bool | `true` | If false, then do not add a webhook sidecar to the `external-dns` deployment. | | rbac.additionalPermissions | list | `[]` | Additional rules to add to the `ClusterRole`. | | rbac.create | bool | `true` | If `true`, create a `ClusterRole` & `ClusterRoleBinding` with access to the Kubernetes API. | | readinessProbe | object | See _values.yaml_ | [Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container. | diff --git a/charts/external-dns/templates/deployment.yaml b/charts/external-dns/templates/deployment.yaml index 7db118370..2229616fd 100644 --- a/charts/external-dns/templates/deployment.yaml +++ b/charts/external-dns/templates/deployment.yaml @@ -173,6 +173,7 @@ spec: {{- toYaml . | nindent 12 }} {{- end }} {{- if eq $providerName "webhook" }} + {{- if .Values.provider.webhook.sidecar }} {{- with .Values.provider.webhook }} - name: webhook image: {{ include "external-dns.webhookImage" . }} @@ -209,6 +210,7 @@ spec: {{- end }} {{- end }} {{- end }} + {{- end }} {{- if or .Values.secretConfiguration.enabled .Values.extraVolumes }} volumes: {{- if .Values.secretConfiguration.enabled }} diff --git a/charts/external-dns/values.schema.json b/charts/external-dns/values.schema.json index 75e7fdd42..ee8fe4ea7 100644 --- a/charts/external-dns/values.schema.json +++ b/charts/external-dns/values.schema.json @@ -507,6 +507,10 @@ "type": "object" } } + }, + "sidecar": { + "description": "If false, then do not add a webhook sidecar to the external-dns deployment.", + "type": "boolean" } } } diff --git a/charts/external-dns/values.yaml b/charts/external-dns/values.yaml index dc5ec8d1e..e2720cb25 100644 --- a/charts/external-dns/values.yaml +++ b/charts/external-dns/values.yaml @@ -244,6 +244,8 @@ provider: # @schema type: [object, string]; # -- _ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers). name: aws webhook: + # -- (bool) If false, then do not add a webhook sidecar to the `external-dns` deployment. + sidecar: true image: # -- (string) Image repository for the `webhook` container. repository: # @schema type:[string, null]; default: null From 9460f0d32548b0e184e41c7d7c0cb541ef7794f4 Mon Sep 17 00:00:00 2001 From: Eric Ace <24485843+aceeric@users.noreply.github.com> Date: Wed, 23 Jul 2025 17:13:26 -0400 Subject: [PATCH 02/10] wip --- charts/external-dns/README.md | 28 +++--- charts/external-dns/schema/values.yaml | 13 +-- charts/external-dns/values.yaml | 123 ++++++++++++++----------- 3 files changed, 89 insertions(+), 75 deletions(-) diff --git a/charts/external-dns/README.md b/charts/external-dns/README.md index 1a9cfcc94..2cc7611fd 100644 --- a/charts/external-dns/README.md +++ b/charts/external-dns/README.md @@ -131,19 +131,21 @@ If `namespaced` is set to `true`, please ensure that `sources` my only contains | policy | string | `"upsert-only"` | How DNS records are synchronized between sources and providers; available values are `create-only`, `sync`, & `upsert-only`. | | priorityClassName | string | `nil` | Priority class name for the `Pod`. | | provider.name | string | `"aws"` | _ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers). | -| provider.webhook.args | list | `[]` | Extra arguments to provide for the `webhook` container. | -| provider.webhook.env | list | `[]` | [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container. | -| provider.webhook.extraVolumeMounts | list | `[]` | Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `webhook` container. | -| provider.webhook.image.pullPolicy | string | `"IfNotPresent"` | Image pull policy for the `webhook` container. | -| provider.webhook.image.repository | string | `nil` | Image repository for the `webhook` container. | -| provider.webhook.image.tag | string | `nil` | Image tag for the `webhook` container. | -| provider.webhook.livenessProbe | object | See _values.yaml_ | [Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container. | -| provider.webhook.readinessProbe | object | See _values.yaml_ | [Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `webhook` container. | -| provider.webhook.resources | object | `{}` | [Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `webhook` container. | -| provider.webhook.securityContext | object | See _values.yaml_ | [Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container. | -| provider.webhook.service.port | int | `8080` | Webhook exposed HTTP port for the service. | -| provider.webhook.serviceMonitor | object | See _values.yaml_ | Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container. | -| provider.webhook.sidecar | bool | `true` | If false, then do not add a webhook sidecar to the `external-dns` deployment. | +| provider.webhook.readTimeout | string | `nil` | | +| provider.webhook.sidecar.args | list | `[]` | Extra arguments to provide for the `webhook` container. | +| provider.webhook.sidecar.env | list | `[]` | [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container. | +| provider.webhook.sidecar.extraVolumeMounts | list | `[]` | Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `webhook` container. | +| provider.webhook.sidecar.image.pullPolicy | string | `"IfNotPresent"` | Image pull policy for the `webhook` container. | +| provider.webhook.sidecar.image.repository | string | `nil` | Image repository for the `webhook` container. | +| provider.webhook.sidecar.image.tag | string | `nil` | Image tag for the `webhook` container. | +| provider.webhook.sidecar.livenessProbe | object | See _values.yaml_ | [Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container. | +| provider.webhook.sidecar.readinessProbe | object | See _values.yaml_ | [Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `webhook` container. | +| provider.webhook.sidecar.resources | object | `{}` | [Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `webhook` container. | +| provider.webhook.sidecar.securityContext | object | See _values.yaml_ | [Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container. | +| provider.webhook.sidecar.service.port | int | `8080` | Webhook exposed HTTP port for the service. | +| provider.webhook.sidecar.serviceMonitor | object | See _values.yaml_ | Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container. | +| provider.webhook.url | string | `nil` | | +| provider.webhook.writeTimeout | string | `nil` | | | rbac.additionalPermissions | list | `[]` | Additional rules to add to the `ClusterRole`. | | rbac.create | bool | `true` | If `true`, create a `ClusterRole` & `ClusterRoleBinding` with access to the Kubernetes API. | | readinessProbe | object | See _values.yaml_ | [Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container. | diff --git a/charts/external-dns/schema/values.yaml b/charts/external-dns/schema/values.yaml index 3b2f8598f..fd67b668e 100644 --- a/charts/external-dns/schema/values.yaml +++ b/charts/external-dns/schema/values.yaml @@ -11,9 +11,10 @@ resources: provider: webhook: - requests: - cpu: 200m - memory: 128Mi - limits: - cpu: 300m - memory: 200Mi + sidecar: + requests: + cpu: 200m + memory: 128Mi + limits: + cpu: 300m + memory: 200Mi diff --git a/charts/external-dns/values.yaml b/charts/external-dns/values.yaml index e2720cb25..c3c103233 100644 --- a/charts/external-dns/values.yaml +++ b/charts/external-dns/values.yaml @@ -243,62 +243,73 @@ managedRecordTypes: [] # @schema type: [array, null]; item: string; uniqueItems provider: # @schema type: [object, string]; # -- _ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers). name: aws - webhook: - # -- (bool) If false, then do not add a webhook sidecar to the `external-dns` deployment. - sidecar: true - image: - # -- (string) Image repository for the `webhook` container. - repository: # @schema type:[string, null]; default: null - # -- (string) Image tag for the `webhook` container. - tag: # @schema type:[string, null]; default: null - # -- Image pull policy for the `webhook` container. - pullPolicy: IfNotPresent - # -- [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container. - env: [] - # -- Extra arguments to provide for the `webhook` container. - args: [] - # -- Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `webhook` container. - extraVolumeMounts: [] - # -- [Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `webhook` container. - resources: {} - # -- [Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container. - # @default -- See _values.yaml_ - securityContext: {} - # -- [Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container. - # @default -- See _values.yaml_ - livenessProbe: - httpGet: - path: /healthz # @schema type:[string, null]; default: null - port: http-webhook # @schema type:[integer,string]; default: string - initialDelaySeconds: 10 # @schema type:[integer, null]; default: null - periodSeconds: 10 # @schema type:[integer, null]; default: null - timeoutSeconds: 5 # @schema type:[integer, null]; default: null - failureThreshold: 2 # @schema type:[integer, null]; default: null - successThreshold: 1 # @schema type:[integer, null]; default: null - # -- [Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `webhook` container. - # @default -- See _values.yaml_ - readinessProbe: - httpGet: - path: /healthz # @schema type:[string, null]; default: null - port: http-webhook # @schema type:[integer,string]; default: string - initialDelaySeconds: 5 # @schema type:[integer, null]; default: null - periodSeconds: 10 # @schema type:[integer, null]; default: null - timeoutSeconds: 5 # @schema type:[integer, null]; default: null - failureThreshold: 6 # @schema type:[integer, null]; default: null - successThreshold: 1 # @schema type:[integer, null]; default: null - service: - # -- Webhook exposed HTTP port for the service. - port: 8080 - # -- Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container. - # @default -- See _values.yaml_ - serviceMonitor: - interval: - scheme: - tlsConfig: {} - bearerTokenFile: - scrapeTimeout: - metricRelabelings: [] - relabelings: [] + webhook: # @schema type: [object]; + url: + readTimeout: + writeTimeout: + sidecar: + image: # @schema additionalProperties: false + # -- Image repository for the `webhook` container. + repository: registry.k8s.io/external-dns/external-dns + # -- Image tag for the `external-dns` container, this will default to `.Chart.AppVersion` if not set. + tag: # @schema type:[string, null] + # -- Image pull policy for the `external-dns` container. + pullPolicy: IfNotPresent # @schema enum:[IfNotPresent, Always]; + + + #image: + # # -- (string) Image repository for the `webhook` container. + # repository: # @schema type:[string, null]; default: null + # # -- (string) Image tag for the `webhook` container. + # tag: # @schema type:[string, null]; default: null + # # -- Image pull policy for the `webhook` container. + # pullPolicy: IfNotPresent + # -- [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container. + env: [] + # -- Extra arguments to provide for the `webhook` container. + args: [] + # -- Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `webhook` container. + extraVolumeMounts: [] + # -- [Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `webhook` container. + resources: {} + # -- [Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container. + # @default -- See _values.yaml_ + securityContext: {} + # -- [Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container. + # @default -- See _values.yaml_ + livenessProbe: + httpGet: + path: /healthz # @schema type:[string, null]; default: null + port: http-webhook # @schema type:[integer,string]; default: string + initialDelaySeconds: 10 # @schema type:[integer, null]; default: null + periodSeconds: 10 # @schema type:[integer, null]; default: null + timeoutSeconds: 5 # @schema type:[integer, null]; default: null + failureThreshold: 2 # @schema type:[integer, null]; default: null + successThreshold: 1 # @schema type:[integer, null]; default: null + # -- [Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `webhook` container. + # @default -- See _values.yaml_ + readinessProbe: + httpGet: + path: /healthz # @schema type:[string, null]; default: null + port: http-webhook # @schema type:[integer,string]; default: string + initialDelaySeconds: 5 # @schema type:[integer, null]; default: null + periodSeconds: 10 # @schema type:[integer, null]; default: null + timeoutSeconds: 5 # @schema type:[integer, null]; default: null + failureThreshold: 6 # @schema type:[integer, null]; default: null + successThreshold: 1 # @schema type:[integer, null]; default: null + service: + # -- Webhook exposed HTTP port for the service. + port: 8080 + # -- Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container. + # @default -- See _values.yaml_ + serviceMonitor: + interval: + scheme: + tlsConfig: {} + bearerTokenFile: + scrapeTimeout: + metricRelabelings: [] + relabelings: [] # -- Extra arguments to provide to _ExternalDNS_. # An array or map can be used, with maps allowing for value overrides; maps also support slice values to use the same arg multiple times. From e3689a59fe2bf0a2a74c9c9e385201a6c2de1fed Mon Sep 17 00:00:00 2001 From: Eric Ace <24485843+aceeric@users.noreply.github.com> Date: Wed, 23 Jul 2025 17:38:54 -0400 Subject: [PATCH 03/10] wip2 cant helm template --- charts/external-dns/templates/deployment.yaml | 2 +- charts/external-dns/templates/service.yaml | 2 +- .../templates/servicemonitor.yaml | 2 +- charts/external-dns/values.yaml | 23 ++++++------------- 4 files changed, 10 insertions(+), 19 deletions(-) diff --git a/charts/external-dns/templates/deployment.yaml b/charts/external-dns/templates/deployment.yaml index 2229616fd..2f49f3cb6 100644 --- a/charts/external-dns/templates/deployment.yaml +++ b/charts/external-dns/templates/deployment.yaml @@ -174,7 +174,7 @@ spec: {{- end }} {{- if eq $providerName "webhook" }} {{- if .Values.provider.webhook.sidecar }} - {{- with .Values.provider.webhook }} + {{- with .Values.provider.webhook.sidecar }} - name: webhook image: {{ include "external-dns.webhookImage" . }} imagePullPolicy: {{ .image.pullPolicy }} diff --git a/charts/external-dns/templates/service.yaml b/charts/external-dns/templates/service.yaml index e55e2a368..882cdeb00 100644 --- a/charts/external-dns/templates/service.yaml +++ b/charts/external-dns/templates/service.yaml @@ -27,7 +27,7 @@ spec: targetPort: http protocol: TCP {{- if eq $providerName "webhook" }} - {{- with .Values.provider.webhook.service }} + {{- with .Values.provider.webhook.sidecar.service }} - name: http-webhook port: {{ .port }} targetPort: http-webhook diff --git a/charts/external-dns/templates/servicemonitor.yaml b/charts/external-dns/templates/servicemonitor.yaml index 004756c7b..af2d69d51 100644 --- a/charts/external-dns/templates/servicemonitor.yaml +++ b/charts/external-dns/templates/servicemonitor.yaml @@ -50,7 +50,7 @@ spec: {{- toYaml . | nindent 8 }} {{- end }} {{- if eq $providerName "webhook" }} - {{- with .Values.provider.webhook.serviceMonitor }} + {{- with .Values.provider.webhook.sidecar.serviceMonitor }} - port: http-webhook path: /metrics {{- with .interval }} diff --git a/charts/external-dns/values.yaml b/charts/external-dns/values.yaml index c3c103233..48ebac6d7 100644 --- a/charts/external-dns/values.yaml +++ b/charts/external-dns/values.yaml @@ -248,22 +248,13 @@ provider: # @schema type: [object, string]; readTimeout: writeTimeout: sidecar: - image: # @schema additionalProperties: false - # -- Image repository for the `webhook` container. - repository: registry.k8s.io/external-dns/external-dns - # -- Image tag for the `external-dns` container, this will default to `.Chart.AppVersion` if not set. - tag: # @schema type:[string, null] - # -- Image pull policy for the `external-dns` container. - pullPolicy: IfNotPresent # @schema enum:[IfNotPresent, Always]; - - - #image: - # # -- (string) Image repository for the `webhook` container. - # repository: # @schema type:[string, null]; default: null - # # -- (string) Image tag for the `webhook` container. - # tag: # @schema type:[string, null]; default: null - # # -- Image pull policy for the `webhook` container. - # pullPolicy: IfNotPresent + image: + # -- (string) Image repository for the `webhook` container. + repository: # @schema type:[string, null]; default: null + # -- (string) Image tag for the `webhook` container. + tag: # @schema type:[string, null]; default: null + # -- Image pull policy for the `webhook` container. + pullPolicy: IfNotPresent # -- [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container. env: [] # -- Extra arguments to provide for the `webhook` container. From a6131625cf050443066e9acb3e90d6b880dabdf9 Mon Sep 17 00:00:00 2001 From: Eric Ace <24485843+aceeric@users.noreply.github.com> Date: Wed, 23 Jul 2025 18:01:22 -0400 Subject: [PATCH 04/10] WIP templates succesfully --- charts/external-dns/templates/deployment.yaml | 9 +++++++++ charts/external-dns/templates/service.yaml | 2 ++ charts/external-dns/templates/servicemonitor.yaml | 2 ++ 3 files changed, 13 insertions(+) diff --git a/charts/external-dns/templates/deployment.yaml b/charts/external-dns/templates/deployment.yaml index 2f49f3cb6..cce68d164 100644 --- a/charts/external-dns/templates/deployment.yaml +++ b/charts/external-dns/templates/deployment.yaml @@ -127,6 +127,15 @@ spec: - --managed-record-types={{ . }} {{- end }} - --provider={{ $providerName }} + {{- if .Values.provider.webhook.readTimeout }} + - --webhook-provider-read-timeout={{ .Values.provider.webhook.readTimeout }} + {{- end }} + {{- if .Values.provider.webhook.writeTimeout }} + - --webhook-provider-write-timeout={{ .Values.provider.webhook.writeTimeout }} + {{- end }} + {{- if .Values.provider.webhook.url }} + - --webhook-provider-url={{ .Values.provider.webhook.url }} + {{- end }} {{- if kindIs "map" .Values.extraArgs }} {{- range $key, $value := .Values.extraArgs }} {{- if not (kindIs "invalid" $value) }} diff --git a/charts/external-dns/templates/service.yaml b/charts/external-dns/templates/service.yaml index 882cdeb00..bb8bf4f32 100644 --- a/charts/external-dns/templates/service.yaml +++ b/charts/external-dns/templates/service.yaml @@ -27,6 +27,7 @@ spec: targetPort: http protocol: TCP {{- if eq $providerName "webhook" }} + {{- if .Values.provider.webhook.sidecar }} {{- with .Values.provider.webhook.sidecar.service }} - name: http-webhook port: {{ .port }} @@ -34,3 +35,4 @@ spec: protocol: TCP {{- end }} {{- end }} + {{- end }} diff --git a/charts/external-dns/templates/servicemonitor.yaml b/charts/external-dns/templates/servicemonitor.yaml index af2d69d51..d75d54549 100644 --- a/charts/external-dns/templates/servicemonitor.yaml +++ b/charts/external-dns/templates/servicemonitor.yaml @@ -50,6 +50,7 @@ spec: {{- toYaml . | nindent 8 }} {{- end }} {{- if eq $providerName "webhook" }} + {{- if .Values.provider.webhook.sidecar }} {{- with .Values.provider.webhook.sidecar.serviceMonitor }} - port: http-webhook path: /metrics @@ -79,6 +80,7 @@ spec: {{- end }} {{- end }} {{- end }} + {{- end }} {{- with .Values.serviceMonitor.targetLabels }} targetLabels: {{- toYaml . | nindent 4 }} From 54d58b6a339ea56a14a9a92d0e0cc023f4bd97d0 Mon Sep 17 00:00:00 2001 From: Eric Ace <24485843+aceeric@users.noreply.github.com> Date: Sun, 27 Jul 2025 12:14:13 -0400 Subject: [PATCH 05/10] WIP3 --- charts/external-dns/values.schema.json | 1180 ++++++++++++++++++++++++ charts/external-dns/values.yaml | 4 +- 2 files changed, 1182 insertions(+), 2 deletions(-) diff --git a/charts/external-dns/values.schema.json b/charts/external-dns/values.schema.json index ee8fe4ea7..75e158e36 100644 --- a/charts/external-dns/values.schema.json +++ b/charts/external-dns/values.schema.json @@ -1,5 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", +<<<<<<< HEAD "type": "object", "properties": { "affinity": { @@ -866,3 +867,1182 @@ }, "additionalProperties": true } +======= + "additionalProperties": false, + "properties": { + "affinity": { + "additionalProperties": false, + "description": "Affinity settings for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). If an explicit label selector is not provided for pod affinity or pod anti-affinity one will be created from the pod selector labels.", + "required": [], + "title": "affinity" + }, + "automountServiceAccountToken": { + "default": true, + "description": "Set this to `false` to [opt out of API credential automounting](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting) for the `Pod`.", + "required": [], + "title": "automountServiceAccountToken", + "type": "boolean" + }, + "commonLabels": { + "additionalProperties": false, + "description": "Labels to add to all chart resources.", + "required": [], + "title": "commonLabels" + }, + "deploymentAnnotations": { + "additionalProperties": false, + "description": "Annotations to add to the `Deployment`.", + "required": [], + "title": "deploymentAnnotations" + }, + "deploymentStrategy": { + "additionalProperties": false, + "description": "[Deployment Strategy](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy).", + "properties": { + "type": { + "default": "Recreate", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "deploymentStrategy" + }, + "dnsConfig": { + "default": "", + "description": "[DNS config](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config) for the pod, if not set the default will be used.", + "required": [], + "title": "dnsConfig", + "type": "object" + }, + "dnsPolicy": { + "default": "", + "description": "[DNS policy](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy) for the pod, if not set the default will be used.", + "required": [], + "title": "dnsPolicy", + "type": "string" + }, + "domainFilters": { + "description": "Limit possible target zones by domain suffixes.", + "items": { + "required": [] + }, + "required": [], + "title": "domainFilters" + }, + "enabled": { + "default": "", + "description": "No effect - reserved for use in sub-charting.", + "required": [], + "title": "enabled", + "type": "boolean" + }, + "env": { + "description": "[Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `external-dns` container.", + "items": { + "required": [] + }, + "required": [], + "title": "env" + }, + "excludeDomains": { + "description": "Intentionally exclude domains from being managed.", + "items": { + "required": [] + }, + "required": [], + "title": "excludeDomains" + }, + "extraArgs": { + "additionalProperties": false, + "description": "Extra arguments to provide to _ExternalDNS_. An array or map can be used, with maps allowing for value overrides; maps also support slice values to use the same arg multiple times.", + "required": [], + "title": "extraArgs" + }, + "extraContainers": { + "description": "Extra containers to add to the `Deployment`.", + "items": { + "required": [] + }, + "required": [], + "title": "extraContainers" + }, + "extraVolumeMounts": { + "description": "Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `external-dns` container.", + "items": { + "required": [] + }, + "required": [], + "title": "extraVolumeMounts" + }, + "extraVolumes": { + "description": "Extra [volumes](https://kubernetes.io/docs/concepts/storage/volumes/) for the `Pod`.", + "items": { + "required": [] + }, + "required": [], + "title": "extraVolumes" + }, + "fullnameOverride": { + "default": "", + "description": "Override the full name of the chart.", + "required": [], + "title": "fullnameOverride", + "type": "string" + }, + "global": { + "additionalProperties": false, + "properties": { + "imagePullSecrets": { + "description": "Global image pull secrets.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets" + } + }, + "required": [], + "title": "global", + "type": "object" + }, + "image": { + "additionalProperties": false, + "properties": { + "pullPolicy": { + "default": "IfNotPresent", + "description": "Image pull policy for the `external-dns` container.", + "required": [], + "title": "pullPolicy" + }, + "repository": { + "default": "registry.k8s.io/external-dns/external-dns", + "description": "Image repository for the `external-dns` container.", + "required": [], + "title": "repository" + }, + "tag": { + "default": "", + "description": "Image tag for the `external-dns` container, this will default to `.Chart.AppVersion` if not set.", + "required": [], + "title": "tag" + } + }, + "required": [], + "title": "image", + "type": "object" + }, + "imagePullSecrets": { + "description": "Image pull secrets.", + "items": { + "required": [] + }, + "required": [], + "title": "imagePullSecrets" + }, + "initContainers": { + "description": "[Init containers](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/) to add to the `Pod` definition.", + "items": { + "required": [] + }, + "required": [], + "title": "initContainers" + }, + "interval": { + "default": "1m", + "description": "Interval for DNS updates.", + "required": [], + "title": "interval" + }, + "labelFilter": { + "default": "", + "description": "Filter resources queried for endpoints by label selector", + "required": [], + "title": "labelFilter" + }, + "livenessProbe": { + "additionalProperties": false, + "default": "See _values.yaml_", + "description": "[Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container.", + "properties": { + "failureThreshold": { + "default": 2, + "required": [], + "title": "failureThreshold", + "type": "integer" + }, + "httpGet": { + "additionalProperties": false, + "properties": { + "path": { + "default": "/healthz", + "required": [], + "title": "path", + "type": "string" + }, + "port": { + "default": "http", + "required": [], + "title": "port", + "type": "string" + } + }, + "required": [ + "path", + "port" + ], + "title": "httpGet", + "type": "object" + }, + "initialDelaySeconds": { + "default": 10, + "required": [], + "title": "initialDelaySeconds", + "type": "integer" + }, + "periodSeconds": { + "default": 10, + "required": [], + "title": "periodSeconds", + "type": "integer" + }, + "successThreshold": { + "default": 1, + "required": [], + "title": "successThreshold", + "type": "integer" + }, + "timeoutSeconds": { + "default": 5, + "required": [], + "title": "timeoutSeconds", + "type": "integer" + } + }, + "required": [ + "httpGet", + "initialDelaySeconds", + "periodSeconds", + "timeoutSeconds", + "failureThreshold", + "successThreshold" + ], + "title": "livenessProbe" + }, + "logFormat": { + "default": "text", + "description": "Log format.", + "required": [], + "title": "logFormat" + }, + "logLevel": { + "default": "info", + "description": "Log level.", + "required": [], + "title": "logLevel" + }, + "managedRecordTypes": { + "description": "Record types to manage (default: A, AAAA, CNAME)", + "items": { + "required": [] + }, + "required": [], + "title": "managedRecordTypes" + }, + "nameOverride": { + "default": "", + "description": "Override the name of the chart.", + "required": [], + "title": "nameOverride", + "type": "string" + }, + "namespaced": { + "default": "false", + "description": "if `true`, _ExternalDNS_ will run in a namespaced scope (`Role`` and `Rolebinding`` will be namespaced too).", + "required": [], + "title": "namespaced" + }, + "nodeSelector": { + "additionalProperties": false, + "description": "Node labels to match for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/).", + "required": [], + "title": "nodeSelector" + }, + "podAnnotations": { + "additionalProperties": false, + "description": "Annotations to add to the `Pod`.", + "required": [], + "title": "podAnnotations" + }, + "podLabels": { + "additionalProperties": false, + "description": "Labels to add to the `Pod`.", + "required": [], + "title": "podLabels" + }, + "podSecurityContext": { + "additionalProperties": false, + "default": "See _values.yaml_", + "description": "[Pod security context](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#podsecuritycontext-v1-core), this supports full customisation.", + "properties": { + "fsGroup": { + "default": 65534, + "required": [], + "title": "fsGroup", + "type": "integer" + }, + "runAsNonRoot": { + "default": true, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" + }, + "seccompProfile": { + "additionalProperties": false, + "properties": { + "type": { + "default": "RuntimeDefault", + "required": [], + "title": "type", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "seccompProfile", + "type": "object" + } + }, + "required": [ + "runAsNonRoot", + "fsGroup", + "seccompProfile" + ], + "title": "podSecurityContext" + }, + "policy": { + "default": "upsert-only", + "description": "How DNS records are synchronized between sources and providers; available values are `sync` \u0026 `upsert-only`.", + "required": [], + "title": "policy" + }, + "priorityClassName": { + "default": "", + "description": "Priority class name for the `Pod`.", + "required": [], + "title": "priorityClassName", + "type": "string" + }, + "provider": { + "additionalProperties": false, + "properties": { + "name": { + "default": "aws", + "description": "_ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers).", + "required": [], + "title": "name" + }, + "webhook": { + "additionalProperties": false, + "properties": { + "readTimeout": { + "default": "", + "required": [], + "title": "readTimeout", + "type": "null" + }, + "sidecar": { + "additionalProperties": false, + "properties": { + "args": { + "description": "Extra arguments to provide for the `webhook` container.", + "items": { + "required": [] + }, + "required": [], + "title": "args" + }, + "env": { + "description": "[Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container.", + "items": { + "required": [] + }, + "required": [], + "title": "env" + }, + "extraVolumeMounts": { + "description": "Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `webhook` container.", + "items": { + "required": [] + }, + "required": [], + "title": "extraVolumeMounts" + }, + "image": { + "additionalProperties": false, + "properties": { + "pullPolicy": { + "default": "IfNotPresent", + "description": "Image pull policy for the `webhook` container.", + "required": [], + "title": "pullPolicy" + }, + "repository": { + "default": "", + "description": "Image repository for the `webhook` container.", + "required": [], + "title": "repository", + "type": "string" + }, + "tag": { + "default": "", + "description": "Image tag for the `webhook` container.", + "required": [], + "title": "tag", + "type": "string" + } + }, + "required": [], + "title": "image", + "type": "object" + }, + "livenessProbe": { + "additionalProperties": false, + "default": "See _values.yaml_", + "description": "[Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container.", + "properties": { + "failureThreshold": { + "default": 2, + "required": [], + "title": "failureThreshold", + "type": "integer" + }, + "httpGet": { + "additionalProperties": false, + "properties": { + "path": { + "default": "/healthz", + "required": [], + "title": "path", + "type": "string" + }, + "port": { + "default": "http-webhook", + "required": [], + "title": "port", + "type": "string" + } + }, + "required": [ + "path", + "port" + ], + "title": "httpGet", + "type": "object" + }, + "initialDelaySeconds": { + "default": 10, + "required": [], + "title": "initialDelaySeconds", + "type": "integer" + }, + "periodSeconds": { + "default": 10, + "required": [], + "title": "periodSeconds", + "type": "integer" + }, + "successThreshold": { + "default": 1, + "required": [], + "title": "successThreshold", + "type": "integer" + }, + "timeoutSeconds": { + "default": 5, + "required": [], + "title": "timeoutSeconds", + "type": "integer" + } + }, + "required": [ + "httpGet", + "initialDelaySeconds", + "periodSeconds", + "timeoutSeconds", + "failureThreshold", + "successThreshold" + ], + "title": "livenessProbe" + }, + "readinessProbe": { + "additionalProperties": false, + "default": "See _values.yaml_", + "description": "[Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `webhook` container.", + "properties": { + "failureThreshold": { + "default": 6, + "required": [], + "title": "failureThreshold", + "type": "integer" + }, + "httpGet": { + "additionalProperties": false, + "properties": { + "path": { + "default": "/healthz", + "required": [], + "title": "path", + "type": "string" + }, + "port": { + "default": "http-webhook", + "required": [], + "title": "port", + "type": "string" + } + }, + "required": [ + "path", + "port" + ], + "title": "httpGet", + "type": "object" + }, + "initialDelaySeconds": { + "default": 5, + "required": [], + "title": "initialDelaySeconds", + "type": "integer" + }, + "periodSeconds": { + "default": 10, + "required": [], + "title": "periodSeconds", + "type": "integer" + }, + "successThreshold": { + "default": 1, + "required": [], + "title": "successThreshold", + "type": "integer" + }, + "timeoutSeconds": { + "default": 5, + "required": [], + "title": "timeoutSeconds", + "type": "integer" + } + }, + "required": [ + "httpGet", + "initialDelaySeconds", + "periodSeconds", + "timeoutSeconds", + "failureThreshold", + "successThreshold" + ], + "title": "readinessProbe" + }, + "resources": { + "additionalProperties": false, + "description": "[Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `webhook` container.", + "required": [], + "title": "resources" + }, + "securityContext": { + "additionalProperties": false, + "default": "See _values.yaml_", + "description": "[Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container.", + "required": [], + "title": "securityContext" + }, + "service": { + "additionalProperties": false, + "properties": { + "port": { + "default": "8080", + "description": "Webhook exposed HTTP port for the service.", + "required": [], + "title": "port" + } + }, + "required": [], + "title": "service", + "type": "object" + }, + "serviceMonitor": { + "additionalProperties": false, + "default": "See _values.yaml_", + "description": "Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container.", + "properties": { + "bearerTokenFile": { + "default": "", + "required": [], + "title": "bearerTokenFile", + "type": "null" + }, + "interval": { + "default": "", + "required": [], + "title": "interval", + "type": "null" + }, + "metricRelabelings": { + "items": { + "required": [] + }, + "required": [], + "title": "metricRelabelings", + "type": "array" + }, + "relabelings": { + "items": { + "required": [] + }, + "required": [], + "title": "relabelings", + "type": "array" + }, + "scheme": { + "default": "", + "required": [], + "title": "scheme", + "type": "null" + }, + "scrapeTimeout": { + "default": "", + "required": [], + "title": "scrapeTimeout", + "type": "null" + }, + "tlsConfig": { + "additionalProperties": false, + "required": [], + "title": "tlsConfig", + "type": "object" + } + }, + "required": [ + "interval", + "scheme", + "tlsConfig", + "bearerTokenFile", + "scrapeTimeout", + "metricRelabelings", + "relabelings" + ], + "title": "serviceMonitor" + } + }, + "required": [ + "image", + "service" + ], + "title": "sidecar", + "type": "object" + }, + "url": { + "default": "", + "required": [], + "title": "url", + "type": "null" + }, + "writeTimeout": { + "default": "", + "required": [], + "title": "writeTimeout", + "type": "null" + } + }, + "required": [ + "url", + "readTimeout", + "writeTimeout", + "sidecar" + ], + "title": "webhook", + "type": "object" + } + }, + "required": [ + "webhook" + ], + "title": "provider", + "type": "object" + }, + "rbac": { + "additionalProperties": false, + "properties": { + "additionalPermissions": { + "description": "Additional rules to add to the `ClusterRole`.", + "items": { + "required": [] + }, + "required": [], + "title": "additionalPermissions" + }, + "create": { + "default": "true", + "description": "If `true`, create a `ClusterRole` \u0026 `ClusterRoleBinding` with access to the Kubernetes API.", + "required": [], + "title": "create" + } + }, + "required": [], + "title": "rbac", + "type": "object" + }, + "readinessProbe": { + "additionalProperties": false, + "default": "See _values.yaml_", + "description": "[Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container.", + "properties": { + "failureThreshold": { + "default": 6, + "required": [], + "title": "failureThreshold", + "type": "integer" + }, + "httpGet": { + "additionalProperties": false, + "properties": { + "path": { + "default": "/healthz", + "required": [], + "title": "path", + "type": "string" + }, + "port": { + "default": "http", + "required": [], + "title": "port", + "type": "string" + } + }, + "required": [ + "path", + "port" + ], + "title": "httpGet", + "type": "object" + }, + "initialDelaySeconds": { + "default": 5, + "required": [], + "title": "initialDelaySeconds", + "type": "integer" + }, + "periodSeconds": { + "default": 10, + "required": [], + "title": "periodSeconds", + "type": "integer" + }, + "successThreshold": { + "default": 1, + "required": [], + "title": "successThreshold", + "type": "integer" + }, + "timeoutSeconds": { + "default": 5, + "required": [], + "title": "timeoutSeconds", + "type": "integer" + } + }, + "required": [ + "httpGet", + "initialDelaySeconds", + "periodSeconds", + "timeoutSeconds", + "failureThreshold", + "successThreshold" + ], + "title": "readinessProbe" + }, + "registry": { + "default": "txt", + "description": "Specify the registry for storing ownership and labels. Valid values are `txt`, `aws-sd`, `dynamodb` \u0026 `noop`.", + "required": [], + "title": "registry" + }, + "resources": { + "additionalProperties": false, + "description": "[Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `external-dns` container.", + "required": [], + "title": "resources" + }, + "revisionHistoryLimit": { + "default": "", + "description": "Specify the number of old `ReplicaSets` to retain to allow rollback of the `Deployment``.", + "required": [], + "title": "revisionHistoryLimit", + "type": "integer" + }, + "secretConfiguration": { + "additionalProperties": false, + "properties": { + "data": { + "additionalProperties": false, + "description": "`Secret` data.", + "required": [], + "title": "data" + }, + "enabled": { + "default": "false", + "description": "If `true`, create a `Secret` to store sensitive provider configuration (**DEPRECATED**).", + "required": [], + "title": "enabled" + }, + "mountPath": { + "default": "", + "description": "Mount path for the `Secret`, this can be templated.", + "required": [], + "title": "mountPath" + }, + "subPath": { + "default": "", + "description": "Sub-path for mounting the `Secret`, this can be templated.", + "required": [], + "title": "subPath" + } + }, + "required": [], + "title": "secretConfiguration", + "type": "object" + }, + "securityContext": { + "additionalProperties": false, + "default": "See _values.yaml_", + "description": "[Security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `external-dns` container.", + "properties": { + "allowPrivilegeEscalation": { + "default": false, + "required": [], + "title": "allowPrivilegeEscalation", + "type": "boolean" + }, + "capabilities": { + "additionalProperties": false, + "properties": { + "drop": { + "items": { + "anyOf": [ + { + "required": [], + "type": "string" + } + ], + "required": [] + }, + "required": [], + "title": "drop", + "type": "array" + } + }, + "required": [ + "drop" + ], + "title": "capabilities", + "type": "object" + }, + "privileged": { + "default": false, + "required": [], + "title": "privileged", + "type": "boolean" + }, + "readOnlyRootFilesystem": { + "default": true, + "required": [], + "title": "readOnlyRootFilesystem", + "type": "boolean" + }, + "runAsGroup": { + "default": 65532, + "required": [], + "title": "runAsGroup", + "type": "integer" + }, + "runAsNonRoot": { + "default": true, + "required": [], + "title": "runAsNonRoot", + "type": "boolean" + }, + "runAsUser": { + "default": 65532, + "required": [], + "title": "runAsUser", + "type": "integer" + } + }, + "required": [ + "privileged", + "allowPrivilegeEscalation", + "readOnlyRootFilesystem", + "runAsNonRoot", + "runAsUser", + "runAsGroup", + "capabilities" + ], + "title": "securityContext" + }, + "service": { + "additionalProperties": false, + "properties": { + "annotations": { + "additionalProperties": false, + "description": "Service annotations.", + "required": [], + "title": "annotations" + }, + "ipFamilies": { + "description": "Service IP families (e.g. IPv4 and/or IPv6).", + "items": { + "required": [] + }, + "required": [], + "title": "ipFamilies" + }, + "ipFamilyPolicy": { + "default": "", + "description": "Service IP family policy.", + "required": [], + "title": "ipFamilyPolicy" + }, + "port": { + "default": "7979", + "description": "Service HTTP port.", + "required": [], + "title": "port" + } + }, + "required": [], + "title": "service", + "type": "object" + }, + "serviceAccount": { + "additionalProperties": false, + "properties": { + "annotations": { + "additionalProperties": false, + "description": "Annotations to add to the service account. Templates are allowed in both the key and the value. Example: `example.com/annotation/{{ .Values.nameOverride }}: {{ .Values.nameOverride }}`", + "required": [], + "title": "annotations" + }, + "automountServiceAccountToken": { + "default": "true", + "description": "Set this to `false` to [opt out of API credential automounting](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting) for the `ServiceAccount`.", + "required": [], + "title": "automountServiceAccountToken" + }, + "create": { + "default": "true", + "description": "If `true`, create a new `ServiceAccount`.", + "required": [], + "title": "create" + }, + "labels": { + "additionalProperties": false, + "description": "Labels to add to the service account.", + "required": [], + "title": "labels" + }, + "name": { + "default": "", + "description": "If this is set and `serviceAccount.create` is `true` this will be used for the created `ServiceAccount` name, if set and `serviceAccount.create` is `false` then this will define an existing `ServiceAccount` to use.", + "required": [], + "title": "name", + "type": "string" + } + }, + "required": [], + "title": "serviceAccount", + "type": "object" + }, + "serviceMonitor": { + "additionalProperties": false, + "properties": { + "additionalLabels": { + "additionalProperties": false, + "description": "Additional labels for the `ServiceMonitor`.", + "required": [], + "title": "additionalLabels" + }, + "annotations": { + "additionalProperties": false, + "description": "Annotations to add to the `ServiceMonitor`.", + "required": [], + "title": "annotations" + }, + "bearerTokenFile": { + "default": "", + "description": "Provide a bearer token file for the `ServiceMonitor`.", + "required": [], + "title": "bearerTokenFile", + "type": "string" + }, + "enabled": { + "default": "false", + "description": "If `true`, create a `ServiceMonitor` resource to support the _Prometheus Operator_.", + "required": [], + "title": "enabled" + }, + "interval": { + "default": "", + "description": "If set override the _Prometheus_ default interval.", + "required": [], + "title": "interval", + "type": "string" + }, + "metricRelabelings": { + "description": "[Metric relabel configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs) to apply to samples before ingestion.", + "items": { + "required": [] + }, + "required": [], + "title": "metricRelabelings" + }, + "namespace": { + "default": "", + "description": "If set create the `ServiceMonitor` in an alternate namespace.", + "required": [], + "title": "namespace", + "type": "string" + }, + "relabelings": { + "description": "[Relabel configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config) to apply to samples before ingestion.", + "items": { + "required": [] + }, + "required": [], + "title": "relabelings" + }, + "scheme": { + "default": "", + "description": "If set overrides the _Prometheus_ default scheme.", + "required": [], + "title": "scheme", + "type": "string" + }, + "scrapeTimeout": { + "default": "", + "description": "If set override the _Prometheus_ default scrape timeout.", + "required": [], + "title": "scrapeTimeout", + "type": "string" + }, + "targetLabels": { + "description": "Provide target labels for the `ServiceMonitor`.", + "items": { + "required": [] + }, + "required": [], + "title": "targetLabels" + }, + "tlsConfig": { + "additionalProperties": false, + "description": "Configure the `ServiceMonitor` [TLS config](https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#tlsconfig).", + "required": [], + "title": "tlsConfig" + } + }, + "required": [], + "title": "serviceMonitor", + "type": "object" + }, + "shareProcessNamespace": { + "default": "false", + "description": "If `true`, the `Pod` will have [process namespace sharing](https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/) enabled.", + "required": [], + "title": "shareProcessNamespace" + }, + "sources": { + "description": "_Kubernetes_ resources to monitor for DNS entries.", + "items": { + "anyOf": [ + { + "required": [], + "type": "string" + }, + { + "required": [], + "type": "string" + } + ], + "required": [] + }, + "required": [], + "title": "sources" + }, + "terminationGracePeriodSeconds": { + "default": "", + "description": "Termination grace period for the `Pod` in seconds.", + "required": [], + "title": "terminationGracePeriodSeconds", + "type": "integer" + }, + "tolerations": { + "description": "Node taints which will be tolerated for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/).", + "items": { + "required": [] + }, + "required": [], + "title": "tolerations" + }, + "topologySpreadConstraints": { + "description": "Topology spread constraints for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). If an explicit label selector is not provided one will be created from the pod selector labels.", + "items": { + "required": [] + }, + "required": [], + "title": "topologySpreadConstraints" + }, + "triggerLoopOnEvent": { + "default": "false", + "description": "If `true`, triggers run loop on create/update/delete events in addition of regular interval.", + "required": [], + "title": "triggerLoopOnEvent" + }, + "txtOwnerId": { + "default": "", + "description": "Specify an identifier for this instance of _ExternalDNS_ when using a registry other than `noop`.", + "required": [], + "title": "txtOwnerId", + "type": "string" + }, + "txtPrefix": { + "default": "", + "description": "Specify a prefix for the domain names of TXT records created for the `txt` registry. Mutually exclusive with `txtSuffix`.", + "required": [], + "title": "txtPrefix", + "type": "string" + }, + "txtSuffix": { + "default": "", + "description": "Specify a suffix for the domain names of TXT records created for the `txt` registry. Mutually exclusive with `txtPrefix`.", + "required": [], + "title": "txtSuffix", + "type": "string" + } + }, + "required": [ + "global", + "image", + "serviceAccount", + "service", + "rbac", + "serviceMonitor", + "provider", + "secretConfiguration" + ], + "type": "object" +} +>>>>>>> 3360e934 (WIP3) diff --git a/charts/external-dns/values.yaml b/charts/external-dns/values.yaml index 48ebac6d7..96a59a845 100644 --- a/charts/external-dns/values.yaml +++ b/charts/external-dns/values.yaml @@ -12,7 +12,7 @@ image: # @schema additionalProperties: false # -- Image tag for the `external-dns` container, this will default to `.Chart.AppVersion` if not set. tag: # @schema type:[string, null] # -- Image pull policy for the `external-dns` container. - pullPolicy: IfNotPresent # @schema enum:[IfNotPresent, Always]; + pullPolicy: IfNotPresent # @schema enum:[IfNotPresent, Always, null]; # -- Image pull secrets. imagePullSecrets: [] # @schema item: object @@ -247,7 +247,7 @@ provider: # @schema type: [object, string]; url: readTimeout: writeTimeout: - sidecar: + sidecar: # @schema type: [object]; image: # -- (string) Image repository for the `webhook` container. repository: # @schema type:[string, null]; default: null From fc44490c96d86d59b75ae872dd9cdb09a2bb3166 Mon Sep 17 00:00:00 2001 From: Eric Ace <24485843+aceeric@users.noreply.github.com> Date: Sun, 27 Jul 2025 15:26:01 -0400 Subject: [PATCH 06/10] Update values and get schema to build --- charts/external-dns/README.md | 7 +- charts/external-dns/values.schema.json | 1123 +++++++++--------------- charts/external-dns/values.yaml | 26 +- 3 files changed, 443 insertions(+), 713 deletions(-) diff --git a/charts/external-dns/README.md b/charts/external-dns/README.md index 2cc7611fd..7c1a3a334 100644 --- a/charts/external-dns/README.md +++ b/charts/external-dns/README.md @@ -131,7 +131,8 @@ If `namespaced` is set to `true`, please ensure that `sources` my only contains | policy | string | `"upsert-only"` | How DNS records are synchronized between sources and providers; available values are `create-only`, `sync`, & `upsert-only`. | | priorityClassName | string | `nil` | Priority class name for the `Pod`. | | provider.name | string | `"aws"` | _ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers). | -| provider.webhook.readTimeout | string | `nil` | | +| provider.webhook.readTimeout | integer | `nil` | Webhook read timeout | +| provider.webhook.sidecar | object | `{"args":[],"env":[],"extraVolumeMounts":[],"image":{"pullPolicy":"IfNotPresent","repository":null,"tag":null},"livenessProbe":{"failureThreshold":2,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"readinessProbe":{"failureThreshold":6,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":5,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"resources":{},"securityContext":{},"service":{"port":8080},"serviceMonitor":{"bearerTokenFile":null,"interval":null,"metricRelabelings":[],"relabelings":[],"scheme":null,"scrapeTimeout":null,"tlsConfig":{}}}` | Webhook sidecar container | | provider.webhook.sidecar.args | list | `[]` | Extra arguments to provide for the `webhook` container. | | provider.webhook.sidecar.env | list | `[]` | [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container. | | provider.webhook.sidecar.extraVolumeMounts | list | `[]` | Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `webhook` container. | @@ -144,8 +145,8 @@ If `namespaced` is set to `true`, please ensure that `sources` my only contains | provider.webhook.sidecar.securityContext | object | See _values.yaml_ | [Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container. | | provider.webhook.sidecar.service.port | int | `8080` | Webhook exposed HTTP port for the service. | | provider.webhook.sidecar.serviceMonitor | object | See _values.yaml_ | Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container. | -| provider.webhook.url | string | `nil` | | -| provider.webhook.writeTimeout | string | `nil` | | +| provider.webhook.url | string | `nil` | Webhook URL | +| provider.webhook.writeTimeout | integer | `nil` | Webhook write timeout | | rbac.additionalPermissions | list | `[]` | Additional rules to add to the `ClusterRole`. | | rbac.create | bool | `true` | If `true`, create a `ClusterRole` & `ClusterRoleBinding` with access to the Kubernetes API. | | readinessProbe | object | See _values.yaml_ | [Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container. | diff --git a/charts/external-dns/values.schema.json b/charts/external-dns/values.schema.json index 75e158e36..ced201d33 100644 --- a/charts/external-dns/values.schema.json +++ b/charts/external-dns/values.schema.json @@ -1,5 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", +<<<<<<< HEAD <<<<<<< HEAD "type": "object", "properties": { @@ -869,1170 +870,890 @@ } ======= "additionalProperties": false, +======= + "type": "object", +>>>>>>> fc9e156c (Update values and get schema to build) "properties": { "affinity": { - "additionalProperties": false, "description": "Affinity settings for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). If an explicit label selector is not provided for pod affinity or pod anti-affinity one will be created from the pod selector labels.", - "required": [], - "title": "affinity" + "type": "object" }, "automountServiceAccountToken": { - "default": true, "description": "Set this to `false` to [opt out of API credential automounting](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting) for the `Pod`.", - "required": [], - "title": "automountServiceAccountToken", "type": "boolean" }, "commonLabels": { - "additionalProperties": false, "description": "Labels to add to all chart resources.", - "required": [], - "title": "commonLabels" + "type": "object" }, "deploymentAnnotations": { - "additionalProperties": false, "description": "Annotations to add to the `Deployment`.", - "required": [], - "title": "deploymentAnnotations" + "type": "object" }, "deploymentStrategy": { - "additionalProperties": false, "description": "[Deployment Strategy](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy).", + "type": "object", "properties": { "type": { "default": "Recreate", - "required": [], - "title": "type", - "type": "string" + "type": "string", + "enum": [ + "Recreate", + "RollingUpdate" + ] } }, - "required": [ - "type" - ], - "title": "deploymentStrategy" + "additionalProperties": true }, "dnsConfig": { - "default": "", "description": "[DNS config](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config) for the pod, if not set the default will be used.", - "required": [], - "title": "dnsConfig", - "type": "object" + "type": [ + "object", + "null" + ] }, "dnsPolicy": { - "default": "", "description": "[DNS policy](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy) for the pod, if not set the default will be used.", - "required": [], - "title": "dnsPolicy", - "type": "string" + "type": [ + "string", + "null" + ] }, "domainFilters": { "description": "Limit possible target zones by domain suffixes.", - "items": { - "required": [] - }, - "required": [], - "title": "domainFilters" + "type": "array" }, "enabled": { - "default": "", - "description": "No effect - reserved for use in sub-charting.", - "required": [], - "title": "enabled", - "type": "boolean" + "description": "No effect - reserved for use in sub-charting", + "type": [ + "boolean", + "null" + ] }, "env": { "description": "[Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `external-dns` container.", - "items": { - "required": [] - }, - "required": [], - "title": "env" + "type": "array" }, "excludeDomains": { "description": "Intentionally exclude domains from being managed.", - "items": { - "required": [] - }, - "required": [], - "title": "excludeDomains" + "type": "array" }, "extraArgs": { - "additionalProperties": false, "description": "Extra arguments to provide to _ExternalDNS_. An array or map can be used, with maps allowing for value overrides; maps also support slice values to use the same arg multiple times.", - "required": [], - "title": "extraArgs" + "type": [ + "array", + "null", + "object" + ], + "uniqueItems": true, + "items": { + "type": "string" + } }, "extraContainers": { "description": "Extra containers to add to the `Deployment`.", - "items": { - "required": [] - }, - "required": [], - "title": "extraContainers" + "type": "array" }, "extraVolumeMounts": { "description": "Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `external-dns` container.", - "items": { - "required": [] - }, - "required": [], - "title": "extraVolumeMounts" + "type": "array" }, "extraVolumes": { "description": "Extra [volumes](https://kubernetes.io/docs/concepts/storage/volumes/) for the `Pod`.", - "items": { - "required": [] - }, - "required": [], - "title": "extraVolumes" + "type": "array" }, "fullnameOverride": { - "default": "", "description": "Override the full name of the chart.", - "required": [], - "title": "fullnameOverride", - "type": "string" + "type": [ + "string", + "null" + ] }, "global": { - "additionalProperties": false, + "type": "object", "properties": { "imagePullSecrets": { "description": "Global image pull secrets.", + "type": "array", "items": { - "required": [] - }, - "required": [], - "title": "imagePullSecrets" + "type": "object" + } } - }, - "required": [], - "title": "global", - "type": "object" + } }, "image": { - "additionalProperties": false, + "type": "object", "properties": { "pullPolicy": { - "default": "IfNotPresent", "description": "Image pull policy for the `external-dns` container.", - "required": [], - "title": "pullPolicy" + "type": "string", + "enum": [ + "IfNotPresent", + "Always" + ] }, "repository": { - "default": "registry.k8s.io/external-dns/external-dns", "description": "Image repository for the `external-dns` container.", - "required": [], - "title": "repository" + "type": "string" }, "tag": { - "default": "", "description": "Image tag for the `external-dns` container, this will default to `.Chart.AppVersion` if not set.", - "required": [], - "title": "tag" + "type": [ + "string", + "null" + ] } }, - "required": [], - "title": "image", - "type": "object" + "additionalProperties": false }, "imagePullSecrets": { "description": "Image pull secrets.", + "type": "array", "items": { - "required": [] - }, - "required": [], - "title": "imagePullSecrets" + "type": "object" + } }, "initContainers": { "description": "[Init containers](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/) to add to the `Pod` definition.", - "items": { - "required": [] - }, - "required": [], - "title": "initContainers" + "type": "array" }, "interval": { - "default": "1m", "description": "Interval for DNS updates.", - "required": [], - "title": "interval" + "type": "string" }, "labelFilter": { - "default": "", "description": "Filter resources queried for endpoints by label selector", - "required": [], - "title": "labelFilter" + "type": [ + "string", + "null" + ] }, "livenessProbe": { - "additionalProperties": false, - "default": "See _values.yaml_", "description": "[Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container.", + "type": "object", "properties": { "failureThreshold": { - "default": 2, - "required": [], - "title": "failureThreshold", "type": "integer" }, "httpGet": { - "additionalProperties": false, + "type": "object", "properties": { "path": { - "default": "/healthz", - "required": [], - "title": "path", "type": "string" }, "port": { - "default": "http", - "required": [], - "title": "port", "type": "string" } - }, - "required": [ - "path", - "port" - ], - "title": "httpGet", - "type": "object" + } }, "initialDelaySeconds": { - "default": 10, - "required": [], - "title": "initialDelaySeconds", "type": "integer" }, "periodSeconds": { - "default": 10, - "required": [], - "title": "periodSeconds", "type": "integer" }, "successThreshold": { - "default": 1, - "required": [], - "title": "successThreshold", "type": "integer" }, "timeoutSeconds": { - "default": 5, - "required": [], - "title": "timeoutSeconds", "type": "integer" } - }, - "required": [ - "httpGet", - "initialDelaySeconds", - "periodSeconds", - "timeoutSeconds", - "failureThreshold", - "successThreshold" - ], - "title": "livenessProbe" + } }, "logFormat": { - "default": "text", "description": "Log format.", - "required": [], - "title": "logFormat" + "default": "text", + "type": "string", + "enum": [ + "text", + "json" + ] }, "logLevel": { - "default": "info", "description": "Log level.", - "required": [], - "title": "logLevel" + "default": "info", + "type": "string", + "enum": [ + "panic", + "debug", + "info", + "warning", + "error", + "fatal" + ] }, "managedRecordTypes": { "description": "Record types to manage (default: A, AAAA, CNAME)", + "type": [ + "array", + "null" + ], + "uniqueItems": true, "items": { - "required": [] - }, - "required": [], - "title": "managedRecordTypes" + "type": "string" + } }, "nameOverride": { - "default": "", "description": "Override the name of the chart.", - "required": [], - "title": "nameOverride", - "type": "string" + "type": [ + "string", + "null" + ] }, "namespaced": { - "default": "false", "description": "if `true`, _ExternalDNS_ will run in a namespaced scope (`Role`` and `Rolebinding`` will be namespaced too).", - "required": [], - "title": "namespaced" + "type": "boolean" }, "nodeSelector": { - "additionalProperties": false, "description": "Node labels to match for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/).", - "required": [], - "title": "nodeSelector" + "type": "object" }, "podAnnotations": { - "additionalProperties": false, "description": "Annotations to add to the `Pod`.", - "required": [], - "title": "podAnnotations" + "type": "object" }, "podLabels": { - "additionalProperties": false, "description": "Labels to add to the `Pod`.", - "required": [], - "title": "podLabels" + "type": "object" }, "podSecurityContext": { - "additionalProperties": false, - "default": "See _values.yaml_", "description": "[Pod security context](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#podsecuritycontext-v1-core), this supports full customisation.", + "type": "object", "properties": { "fsGroup": { - "default": 65534, - "required": [], - "title": "fsGroup", "type": "integer" }, "runAsNonRoot": { - "default": true, - "required": [], - "title": "runAsNonRoot", "type": "boolean" }, "seccompProfile": { - "additionalProperties": false, + "type": "object", "properties": { "type": { - "default": "RuntimeDefault", - "required": [], - "title": "type", "type": "string" } - }, - "required": [ - "type" - ], - "title": "seccompProfile", - "type": "object" + } } - }, - "required": [ - "runAsNonRoot", - "fsGroup", - "seccompProfile" - ], - "title": "podSecurityContext" + } }, "policy": { - "default": "upsert-only", "description": "How DNS records are synchronized between sources and providers; available values are `sync` \u0026 `upsert-only`.", - "required": [], - "title": "policy" + "default": "upsert-only", + "type": "string", + "enum": [ + "sync", + "upsert-only" + ] }, "priorityClassName": { - "default": "", "description": "Priority class name for the `Pod`.", - "required": [], - "title": "priorityClassName", - "type": "string" + "type": [ + "string", + "null" + ] }, "provider": { - "additionalProperties": false, + "type": [ + "object", + "string" + ], "properties": { "name": { - "default": "aws", "description": "_ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers).", - "required": [], - "title": "name" + "type": "string" }, "webhook": { - "additionalProperties": false, + "type": "object", "properties": { "readTimeout": { - "default": "", - "required": [], - "title": "readTimeout", - "type": "null" + "description": "Webhook read timeout", + "type": [ + "integer", + "null" + ] }, "sidecar": { - "additionalProperties": false, + "description": "Webhook sidecar container", + "type": "object", "properties": { "args": { "description": "Extra arguments to provide for the `webhook` container.", - "items": { - "required": [] - }, - "required": [], - "title": "args" + "type": "array" }, "env": { "description": "[Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container.", - "items": { - "required": [] - }, - "required": [], - "title": "env" + "type": "array" }, "extraVolumeMounts": { "description": "Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `webhook` container.", - "items": { - "required": [] - }, - "required": [], - "title": "extraVolumeMounts" + "type": "array" }, "image": { - "additionalProperties": false, + "type": "object", "properties": { "pullPolicy": { - "default": "IfNotPresent", "description": "Image pull policy for the `webhook` container.", - "required": [], - "title": "pullPolicy" + "type": "string" }, "repository": { - "default": "", "description": "Image repository for the `webhook` container.", - "required": [], - "title": "repository", - "type": "string" + "type": [ + "string", + "null" + ] }, "tag": { - "default": "", "description": "Image tag for the `webhook` container.", - "required": [], - "title": "tag", + "type": [ + "string", + "null" + ] + } + } + }, + "limits": { + "type": "object", + "properties": { + "cpu": { + "type": "string" + }, + "memory": { "type": "string" } - }, - "required": [], - "title": "image", - "type": "object" + } }, "livenessProbe": { - "additionalProperties": false, - "default": "See _values.yaml_", "description": "[Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container.", + "type": "object", "properties": { "failureThreshold": { - "default": 2, - "required": [], - "title": "failureThreshold", - "type": "integer" + "type": [ + "integer", + "null" + ] }, "httpGet": { - "additionalProperties": false, + "type": "object", "properties": { "path": { - "default": "/healthz", - "required": [], - "title": "path", - "type": "string" + "type": [ + "string", + "null" + ] }, "port": { - "default": "http-webhook", - "required": [], - "title": "port", - "type": "string" + "default": "string", + "type": [ + "integer", + "string" + ] } - }, - "required": [ - "path", - "port" - ], - "title": "httpGet", - "type": "object" + } }, "initialDelaySeconds": { - "default": 10, - "required": [], - "title": "initialDelaySeconds", - "type": "integer" + "type": [ + "integer", + "null" + ] }, "periodSeconds": { - "default": 10, - "required": [], - "title": "periodSeconds", - "type": "integer" + "type": [ + "integer", + "null" + ] }, "successThreshold": { - "default": 1, - "required": [], - "title": "successThreshold", - "type": "integer" + "type": [ + "integer", + "null" + ] }, "timeoutSeconds": { - "default": 5, - "required": [], - "title": "timeoutSeconds", - "type": "integer" + "type": [ + "integer", + "null" + ] } - }, - "required": [ - "httpGet", - "initialDelaySeconds", - "periodSeconds", - "timeoutSeconds", - "failureThreshold", - "successThreshold" - ], - "title": "livenessProbe" + } }, "readinessProbe": { - "additionalProperties": false, - "default": "See _values.yaml_", "description": "[Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `webhook` container.", + "type": "object", "properties": { "failureThreshold": { - "default": 6, - "required": [], - "title": "failureThreshold", - "type": "integer" + "type": [ + "integer", + "null" + ] }, "httpGet": { - "additionalProperties": false, + "type": "object", "properties": { "path": { - "default": "/healthz", - "required": [], - "title": "path", - "type": "string" + "type": [ + "string", + "null" + ] }, "port": { - "default": "http-webhook", - "required": [], - "title": "port", - "type": "string" + "default": "string", + "type": [ + "integer", + "string" + ] } - }, - "required": [ - "path", - "port" - ], - "title": "httpGet", - "type": "object" + } }, "initialDelaySeconds": { - "default": 5, - "required": [], - "title": "initialDelaySeconds", - "type": "integer" + "type": [ + "integer", + "null" + ] }, "periodSeconds": { - "default": 10, - "required": [], - "title": "periodSeconds", - "type": "integer" + "type": [ + "integer", + "null" + ] }, "successThreshold": { - "default": 1, - "required": [], - "title": "successThreshold", - "type": "integer" + "type": [ + "integer", + "null" + ] }, "timeoutSeconds": { - "default": 5, - "required": [], - "title": "timeoutSeconds", - "type": "integer" + "type": [ + "integer", + "null" + ] } - }, - "required": [ - "httpGet", - "initialDelaySeconds", - "periodSeconds", - "timeoutSeconds", - "failureThreshold", - "successThreshold" - ], - "title": "readinessProbe" + } + }, + "requests": { + "type": "object", + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + } }, "resources": { - "additionalProperties": false, "description": "[Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `webhook` container.", - "required": [], - "title": "resources" - }, - "securityContext": { - "additionalProperties": false, - "default": "See _values.yaml_", - "description": "[Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container.", - "required": [], - "title": "securityContext" - }, - "service": { - "additionalProperties": false, - "properties": { - "port": { - "default": "8080", - "description": "Webhook exposed HTTP port for the service.", - "required": [], - "title": "port" - } - }, - "required": [], - "title": "service", "type": "object" }, + "securityContext": { + "description": "[Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container.", + "type": "object" + }, + "service": { + "type": "object", + "properties": { + "port": { + "description": "Webhook exposed HTTP port for the service.", + "type": "integer" + } + } + }, "serviceMonitor": { - "additionalProperties": false, - "default": "See _values.yaml_", "description": "Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container.", + "type": "object", "properties": { "bearerTokenFile": { - "default": "", - "required": [], - "title": "bearerTokenFile", "type": "null" }, "interval": { - "default": "", - "required": [], - "title": "interval", "type": "null" }, "metricRelabelings": { - "items": { - "required": [] - }, - "required": [], - "title": "metricRelabelings", "type": "array" }, "relabelings": { - "items": { - "required": [] - }, - "required": [], - "title": "relabelings", "type": "array" }, "scheme": { - "default": "", - "required": [], - "title": "scheme", "type": "null" }, "scrapeTimeout": { - "default": "", - "required": [], - "title": "scrapeTimeout", "type": "null" }, "tlsConfig": { - "additionalProperties": false, - "required": [], - "title": "tlsConfig", "type": "object" } - }, - "required": [ - "interval", - "scheme", - "tlsConfig", - "bearerTokenFile", - "scrapeTimeout", - "metricRelabelings", - "relabelings" - ], - "title": "serviceMonitor" + } } - }, - "required": [ - "image", - "service" - ], - "title": "sidecar", - "type": "object" + } }, "url": { - "default": "", - "required": [], - "title": "url", - "type": "null" + "description": "Webhook URL", + "type": [ + "string", + "null" + ] }, "writeTimeout": { - "default": "", - "required": [], - "title": "writeTimeout", - "type": "null" + "description": "Webhook write timeout", + "type": [ + "integer", + "null" + ] } - }, - "required": [ - "url", - "readTimeout", - "writeTimeout", - "sidecar" - ], - "title": "webhook", - "type": "object" + } } - }, - "required": [ - "webhook" - ], - "title": "provider", - "type": "object" + } }, "rbac": { - "additionalProperties": false, + "type": "object", "properties": { "additionalPermissions": { "description": "Additional rules to add to the `ClusterRole`.", - "items": { - "required": [] - }, - "required": [], - "title": "additionalPermissions" + "type": "array" }, "create": { - "default": "true", "description": "If `true`, create a `ClusterRole` \u0026 `ClusterRoleBinding` with access to the Kubernetes API.", - "required": [], - "title": "create" + "type": "boolean" } }, - "required": [], - "title": "rbac", - "type": "object" + "additionalProperties": true }, "readinessProbe": { - "additionalProperties": false, - "default": "See _values.yaml_", "description": "[Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container.", + "type": "object", "properties": { "failureThreshold": { - "default": 6, - "required": [], - "title": "failureThreshold", "type": "integer" }, "httpGet": { - "additionalProperties": false, + "type": "object", "properties": { "path": { - "default": "/healthz", - "required": [], - "title": "path", "type": "string" }, "port": { - "default": "http", - "required": [], - "title": "port", "type": "string" } - }, - "required": [ - "path", - "port" - ], - "title": "httpGet", - "type": "object" + } }, "initialDelaySeconds": { - "default": 5, - "required": [], - "title": "initialDelaySeconds", "type": "integer" }, "periodSeconds": { - "default": 10, - "required": [], - "title": "periodSeconds", "type": "integer" }, "successThreshold": { - "default": 1, - "required": [], - "title": "successThreshold", "type": "integer" }, "timeoutSeconds": { - "default": 5, - "required": [], - "title": "timeoutSeconds", "type": "integer" } - }, - "required": [ - "httpGet", - "initialDelaySeconds", - "periodSeconds", - "timeoutSeconds", - "failureThreshold", - "successThreshold" - ], - "title": "readinessProbe" + } }, "registry": { - "default": "txt", "description": "Specify the registry for storing ownership and labels. Valid values are `txt`, `aws-sd`, `dynamodb` \u0026 `noop`.", - "required": [], - "title": "registry" + "default": "txt", + "type": "string", + "enum": [ + "txt", + "aws-sd", + "dynamodb", + "noop" + ] }, "resources": { - "additionalProperties": false, "description": "[Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `external-dns` container.", - "required": [], - "title": "resources" + "type": "object", + "properties": { + "limits": { + "type": "object", + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + } + }, + "requests": { + "type": "object", + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + } + } + } }, "revisionHistoryLimit": { - "default": "", "description": "Specify the number of old `ReplicaSets` to retain to allow rollback of the `Deployment``.", - "required": [], - "title": "revisionHistoryLimit", - "type": "integer" + "type": [ + "integer", + "null" + ], + "minimum": 0 }, "secretConfiguration": { - "additionalProperties": false, + "type": "object", "properties": { "data": { - "additionalProperties": false, "description": "`Secret` data.", - "required": [], - "title": "data" + "type": "object" }, "enabled": { - "default": "false", "description": "If `true`, create a `Secret` to store sensitive provider configuration (**DEPRECATED**).", - "required": [], - "title": "enabled" + "type": "boolean" }, "mountPath": { - "default": "", "description": "Mount path for the `Secret`, this can be templated.", - "required": [], - "title": "mountPath" + "type": [ + "string", + "null" + ] }, "subPath": { - "default": "", "description": "Sub-path for mounting the `Secret`, this can be templated.", - "required": [], - "title": "subPath" + "type": [ + "string", + "null" + ] } - }, - "required": [], - "title": "secretConfiguration", - "type": "object" + } }, "securityContext": { - "additionalProperties": false, - "default": "See _values.yaml_", "description": "[Security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `external-dns` container.", + "type": "object", "properties": { "allowPrivilegeEscalation": { - "default": false, - "required": [], - "title": "allowPrivilegeEscalation", "type": "boolean" }, "capabilities": { - "additionalProperties": false, + "type": "object", "properties": { "drop": { + "type": "array", "items": { - "anyOf": [ - { - "required": [], - "type": "string" - } - ], - "required": [] - }, - "required": [], - "title": "drop", - "type": "array" + "type": "string" + } } - }, - "required": [ - "drop" - ], - "title": "capabilities", - "type": "object" + } }, "privileged": { - "default": false, - "required": [], - "title": "privileged", "type": "boolean" }, "readOnlyRootFilesystem": { - "default": true, - "required": [], - "title": "readOnlyRootFilesystem", "type": "boolean" }, "runAsGroup": { - "default": 65532, - "required": [], - "title": "runAsGroup", "type": "integer" }, "runAsNonRoot": { - "default": true, - "required": [], - "title": "runAsNonRoot", "type": "boolean" }, "runAsUser": { - "default": 65532, - "required": [], - "title": "runAsUser", "type": "integer" } - }, - "required": [ - "privileged", - "allowPrivilegeEscalation", - "readOnlyRootFilesystem", - "runAsNonRoot", - "runAsUser", - "runAsGroup", - "capabilities" - ], - "title": "securityContext" + } }, "service": { - "additionalProperties": false, + "type": "object", "properties": { "annotations": { - "additionalProperties": false, "description": "Service annotations.", - "required": [], - "title": "annotations" + "type": "object" }, "ipFamilies": { "description": "Service IP families (e.g. IPv4 and/or IPv6).", + "type": [ + "array", + "null" + ], + "maxItems": 2, + "minItems": 0, + "uniqueItems": true, "items": { - "required": [] - }, - "required": [], - "title": "ipFamilies" + "type": "string", + "enum": [ + "IPv4", + "IPv6" + ] + } }, "ipFamilyPolicy": { - "default": "", "description": "Service IP family policy.", - "required": [], - "title": "ipFamilyPolicy" + "type": [ + "string", + "null" + ], + "enum": [ + "SingleStack", + "PreferDualStack", + "RequireDualStack", + null + ] }, "port": { - "default": "7979", "description": "Service HTTP port.", - "required": [], - "title": "port" + "default": 7979, + "type": "integer", + "minimum": 0 } - }, - "required": [], - "title": "service", - "type": "object" + } }, "serviceAccount": { - "additionalProperties": false, + "type": "object", "properties": { "annotations": { - "additionalProperties": false, "description": "Annotations to add to the service account. Templates are allowed in both the key and the value. Example: `example.com/annotation/{{ .Values.nameOverride }}: {{ .Values.nameOverride }}`", - "required": [], - "title": "annotations" + "type": "object" }, "automountServiceAccountToken": { - "default": "true", "description": "Set this to `false` to [opt out of API credential automounting](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting) for the `ServiceAccount`.", - "required": [], - "title": "automountServiceAccountToken" + "type": "boolean" }, "create": { - "default": "true", "description": "If `true`, create a new `ServiceAccount`.", - "required": [], - "title": "create" + "type": "boolean" }, "labels": { - "additionalProperties": false, "description": "Labels to add to the service account.", - "required": [], - "title": "labels" + "type": "object" }, "name": { - "default": "", "description": "If this is set and `serviceAccount.create` is `true` this will be used for the created `ServiceAccount` name, if set and `serviceAccount.create` is `false` then this will define an existing `ServiceAccount` to use.", - "required": [], - "title": "name", - "type": "string" + "type": [ + "string", + "null" + ] } - }, - "required": [], - "title": "serviceAccount", - "type": "object" + } }, "serviceMonitor": { - "additionalProperties": false, + "type": "object", "properties": { "additionalLabels": { - "additionalProperties": false, "description": "Additional labels for the `ServiceMonitor`.", - "required": [], - "title": "additionalLabels" + "type": "object" }, "annotations": { - "additionalProperties": false, "description": "Annotations to add to the `ServiceMonitor`.", - "required": [], - "title": "annotations" + "type": "object" }, "bearerTokenFile": { - "default": "", "description": "Provide a bearer token file for the `ServiceMonitor`.", - "required": [], - "title": "bearerTokenFile", - "type": "string" + "type": [ + "string", + "null" + ] }, "enabled": { - "default": "false", "description": "If `true`, create a `ServiceMonitor` resource to support the _Prometheus Operator_.", - "required": [], - "title": "enabled" + "type": "boolean" }, "interval": { - "default": "", "description": "If set override the _Prometheus_ default interval.", - "required": [], - "title": "interval", - "type": "string" + "type": [ + "string", + "null" + ] }, "metricRelabelings": { "description": "[Metric relabel configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs) to apply to samples before ingestion.", - "items": { - "required": [] - }, - "required": [], - "title": "metricRelabelings" + "type": "array" }, "namespace": { - "default": "", "description": "If set create the `ServiceMonitor` in an alternate namespace.", - "required": [], - "title": "namespace", - "type": "string" + "type": [ + "string", + "null" + ] }, "relabelings": { "description": "[Relabel configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config) to apply to samples before ingestion.", - "items": { - "required": [] - }, - "required": [], - "title": "relabelings" + "type": "array" }, "scheme": { - "default": "", "description": "If set overrides the _Prometheus_ default scheme.", - "required": [], - "title": "scheme", - "type": "string" + "type": [ + "string", + "null" + ] }, "scrapeTimeout": { - "default": "", "description": "If set override the _Prometheus_ default scrape timeout.", - "required": [], - "title": "scrapeTimeout", - "type": "string" + "type": [ + "string", + "null" + ] }, "targetLabels": { "description": "Provide target labels for the `ServiceMonitor`.", - "items": { - "required": [] - }, - "required": [], - "title": "targetLabels" + "type": "array" }, "tlsConfig": { - "additionalProperties": false, "description": "Configure the `ServiceMonitor` [TLS config](https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#tlsconfig).", - "required": [], - "title": "tlsConfig" + "type": "object" } - }, - "required": [], - "title": "serviceMonitor", - "type": "object" + } }, "shareProcessNamespace": { - "default": "false", "description": "If `true`, the `Pod` will have [process namespace sharing](https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/) enabled.", - "required": [], - "title": "shareProcessNamespace" + "type": "boolean" }, "sources": { "description": "_Kubernetes_ resources to monitor for DNS entries.", + "type": "array", "items": { - "anyOf": [ - { - "required": [], - "type": "string" - }, - { - "required": [], - "type": "string" - } - ], - "required": [] - }, - "required": [], - "title": "sources" + "type": "string" + } }, "terminationGracePeriodSeconds": { - "default": "", "description": "Termination grace period for the `Pod` in seconds.", - "required": [], - "title": "terminationGracePeriodSeconds", - "type": "integer" + "type": [ + "integer", + "null" + ] }, "tolerations": { "description": "Node taints which will be tolerated for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/).", - "items": { - "required": [] - }, - "required": [], - "title": "tolerations" + "type": "array" }, "topologySpreadConstraints": { "description": "Topology spread constraints for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). If an explicit label selector is not provided one will be created from the pod selector labels.", - "items": { - "required": [] - }, - "required": [], - "title": "topologySpreadConstraints" + "type": "array" }, "triggerLoopOnEvent": { - "default": "false", "description": "If `true`, triggers run loop on create/update/delete events in addition of regular interval.", - "required": [], - "title": "triggerLoopOnEvent" + "type": "boolean" }, "txtOwnerId": { - "default": "", "description": "Specify an identifier for this instance of _ExternalDNS_ when using a registry other than `noop`.", - "required": [], - "title": "txtOwnerId", - "type": "string" + "type": [ + "string", + "null" + ] }, "txtPrefix": { - "default": "", "description": "Specify a prefix for the domain names of TXT records created for the `txt` registry. Mutually exclusive with `txtSuffix`.", - "required": [], - "title": "txtPrefix", - "type": "string" + "type": [ + "string", + "null" + ] }, "txtSuffix": { - "default": "", "description": "Specify a suffix for the domain names of TXT records created for the `txt` registry. Mutually exclusive with `txtPrefix`.", - "required": [], - "title": "txtSuffix", - "type": "string" + "type": [ + "string", + "null" + ] } }, +<<<<<<< HEAD "required": [ "global", "image", @@ -2046,3 +1767,7 @@ "type": "object" } >>>>>>> 3360e934 (WIP3) +======= + "additionalProperties": true +} +>>>>>>> fc9e156c (Update values and get schema to build) diff --git a/charts/external-dns/values.yaml b/charts/external-dns/values.yaml index 96a59a845..4abfecd33 100644 --- a/charts/external-dns/values.yaml +++ b/charts/external-dns/values.yaml @@ -12,7 +12,7 @@ image: # @schema additionalProperties: false # -- Image tag for the `external-dns` container, this will default to `.Chart.AppVersion` if not set. tag: # @schema type:[string, null] # -- Image pull policy for the `external-dns` container. - pullPolicy: IfNotPresent # @schema enum:[IfNotPresent, Always, null]; + pullPolicy: IfNotPresent # @schema enum:[IfNotPresent, Always] # -- Image pull secrets. imagePullSecrets: [] # @schema item: object @@ -44,11 +44,11 @@ service: # -- Service HTTP port. port: 7979 # @schema minimum:0; default:7979 # -- Service IP families (e.g. IPv4 and/or IPv6). - ipFamilies: [] # @schema type: [array, null]; item: string; itemEnum: ["IPv4", "IPv6"]; minItems:0; maxItems:2; uniqueItems: true; + ipFamilies: [] # @schema type: [array, null]; item: string; itemEnum: ["IPv4", "IPv6"]; minItems:0; maxItems:2; uniqueItems: true # - IPv4 # - IPv6 # -- Service IP family policy. - ipFamilyPolicy: # @schema type: [string, null]; enum:[SingleStack, PreferDualStack, RequireDualStack, null]; + ipFamilyPolicy: # @schema type: [string, null]; enum:[SingleStack, PreferDualStack, RequireDualStack, null] rbac: # @schema additionalProperties: true # -- If `true`, create a `ClusterRole` & `ClusterRoleBinding` with access to the Kubernetes API. @@ -238,16 +238,20 @@ excludeDomains: [] labelFilter: # @schema type: [string,null]; default: null # -- Record types to manage (default: A, AAAA, CNAME) -managedRecordTypes: [] # @schema type: [array, null]; item: string; uniqueItems: true; +managedRecordTypes: [] # @schema type: [array, null]; item: string; uniqueItems: true -provider: # @schema type: [object, string]; +provider: # @schema type: [object, string] # -- _ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers). name: aws - webhook: # @schema type: [object]; - url: - readTimeout: - writeTimeout: - sidecar: # @schema type: [object]; + webhook: # @schema type: [object] + # -- (string) Webhook URL + url: # @schema type:[string, null] + # -- (integer) Webhook read timeout + readTimeout: # @schema type:[integer, null] + # -- (integer) Webhook write timeout + writeTimeout: # @schema type:[integer, null] + # -- Webhook sidecar container + sidecar: # @schema type: [object] image: # -- (string) Image repository for the `webhook` container. repository: # @schema type:[string, null]; default: null @@ -304,7 +308,7 @@ provider: # @schema type: [object, string]; # -- Extra arguments to provide to _ExternalDNS_. # An array or map can be used, with maps allowing for value overrides; maps also support slice values to use the same arg multiple times. -extraArgs: {} # @schema type: [array, null, object]; item: string; uniqueItems: true; +extraArgs: {} # @schema type: [array, null, object]; item: string; uniqueItems: true secretConfiguration: # -- If `true`, create a `Secret` to store sensitive provider configuration (**DEPRECATED**). From e0fce4ef618b242ad97e2eea596ae67983c47c34 Mon Sep 17 00:00:00 2001 From: Eric Ace <24485843+aceeric@users.noreply.github.com> Date: Sun, 27 Jul 2025 16:11:33 -0400 Subject: [PATCH 07/10] Finalize schema - passes unit tests --- charts/external-dns/README.md | 4 +++- charts/external-dns/templates/deployment.yaml | 4 +++- charts/external-dns/values.schema.json | 19 +++++++++++++++---- charts/external-dns/values.yaml | 16 +++++++++------- 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/charts/external-dns/README.md b/charts/external-dns/README.md index 7c1a3a334..300eac59e 100644 --- a/charts/external-dns/README.md +++ b/charts/external-dns/README.md @@ -130,9 +130,11 @@ If `namespaced` is set to `true`, please ensure that `sources` my only contains | podSecurityContext | object | See _values.yaml_ | [Pod security context](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#podsecuritycontext-v1-core), this supports full customisation. | | policy | string | `"upsert-only"` | How DNS records are synchronized between sources and providers; available values are `create-only`, `sync`, & `upsert-only`. | | priorityClassName | string | `nil` | Priority class name for the `Pod`. | +| provider | object | `{"name":"aws","webhook":{"readTimeout":null,"sidecar":{"args":[],"env":[],"extraVolumeMounts":[],"image":{"pullPolicy":"IfNotPresent","repository":null,"tag":null},"livenessProbe":{"failureThreshold":2,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"readinessProbe":{"failureThreshold":6,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":5,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"resources":{},"securityContext":{},"service":{"port":8080},"serviceMonitor":{"bearerTokenFile":null,"interval":null,"metricRelabelings":[],"relabelings":[],"scheme":null,"scrapeTimeout":null,"tlsConfig":{}}},"url":null,"writeTimeout":null}}` | Provider configuration | | provider.name | string | `"aws"` | _ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers). | +| provider.webhook | object | `{"readTimeout":null,"sidecar":{"args":[],"env":[],"extraVolumeMounts":[],"image":{"pullPolicy":"IfNotPresent","repository":null,"tag":null},"livenessProbe":{"failureThreshold":2,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"readinessProbe":{"failureThreshold":6,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":5,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"resources":{},"securityContext":{},"service":{"port":8080},"serviceMonitor":{"bearerTokenFile":null,"interval":null,"metricRelabelings":[],"relabelings":[],"scheme":null,"scrapeTimeout":null,"tlsConfig":{}}},"url":null,"writeTimeout":null}` | Webhook configuration | | provider.webhook.readTimeout | integer | `nil` | Webhook read timeout | -| provider.webhook.sidecar | object | `{"args":[],"env":[],"extraVolumeMounts":[],"image":{"pullPolicy":"IfNotPresent","repository":null,"tag":null},"livenessProbe":{"failureThreshold":2,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"readinessProbe":{"failureThreshold":6,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":5,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"resources":{},"securityContext":{},"service":{"port":8080},"serviceMonitor":{"bearerTokenFile":null,"interval":null,"metricRelabelings":[],"relabelings":[],"scheme":null,"scrapeTimeout":null,"tlsConfig":{}}}` | Webhook sidecar container | +| provider.webhook.sidecar | object | `{"args":[],"env":[],"extraVolumeMounts":[],"image":{"pullPolicy":"IfNotPresent","repository":null,"tag":null},"livenessProbe":{"failureThreshold":2,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"readinessProbe":{"failureThreshold":6,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":5,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"resources":{},"securityContext":{},"service":{"port":8080},"serviceMonitor":{"bearerTokenFile":null,"interval":null,"metricRelabelings":[],"relabelings":[],"scheme":null,"scrapeTimeout":null,"tlsConfig":{}}}` | Webhook sidecar container configuration | | provider.webhook.sidecar.args | list | `[]` | Extra arguments to provide for the `webhook` container. | | provider.webhook.sidecar.env | list | `[]` | [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container. | | provider.webhook.sidecar.extraVolumeMounts | list | `[]` | Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `webhook` container. | diff --git a/charts/external-dns/templates/deployment.yaml b/charts/external-dns/templates/deployment.yaml index cce68d164..c57ba4857 100644 --- a/charts/external-dns/templates/deployment.yaml +++ b/charts/external-dns/templates/deployment.yaml @@ -127,7 +127,8 @@ spec: - --managed-record-types={{ . }} {{- end }} - --provider={{ $providerName }} - {{- if .Values.provider.webhook.readTimeout }} + {{- if kindIs "map" .Values.provider }} + {{- if .Values.provider.webhook.readTimeout }} - --webhook-provider-read-timeout={{ .Values.provider.webhook.readTimeout }} {{- end }} {{- if .Values.provider.webhook.writeTimeout }} @@ -136,6 +137,7 @@ spec: {{- if .Values.provider.webhook.url }} - --webhook-provider-url={{ .Values.provider.webhook.url }} {{- end }} + {{- end }} {{- if kindIs "map" .Values.extraArgs }} {{- range $key, $value := .Values.extraArgs }} {{- if not (kindIs "invalid" $value) }} diff --git a/charts/external-dns/values.schema.json b/charts/external-dns/values.schema.json index ced201d33..049e31136 100644 --- a/charts/external-dns/values.schema.json +++ b/charts/external-dns/values.schema.json @@ -1153,6 +1153,7 @@ ] }, "provider": { + "description": "Provider configuration", "type": [ "object", "string" @@ -1160,10 +1161,17 @@ "properties": { "name": { "description": "_ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers).", - "type": "string" + "type": [ + "string", + "null" + ] }, "webhook": { - "type": "object", + "description": "Webhook configuration", + "type": [ + "object", + "null" + ], "properties": { "readTimeout": { "description": "Webhook read timeout", @@ -1173,8 +1181,11 @@ ] }, "sidecar": { - "description": "Webhook sidecar container", - "type": "object", + "description": "Webhook sidecar container configuration", + "type": [ + "object", + "null" + ], "properties": { "args": { "description": "Extra arguments to provide for the `webhook` container.", diff --git a/charts/external-dns/values.yaml b/charts/external-dns/values.yaml index 4abfecd33..5add96c9d 100644 --- a/charts/external-dns/values.yaml +++ b/charts/external-dns/values.yaml @@ -240,18 +240,20 @@ labelFilter: # @schema type: [string,null]; default: null # -- Record types to manage (default: A, AAAA, CNAME) managedRecordTypes: [] # @schema type: [array, null]; item: string; uniqueItems: true +# -- (object) Provider configuration provider: # @schema type: [object, string] # -- _ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers). - name: aws - webhook: # @schema type: [object] + name: aws # @schema type:[string, null] + # -- (object) Webhook configuration + webhook: # @schema type: [object, null] # -- (string) Webhook URL - url: # @schema type:[string, null] + url: # @schema type:[string, null]; default: null # -- (integer) Webhook read timeout - readTimeout: # @schema type:[integer, null] + readTimeout: # @schema type:[integer, null]; default: null # -- (integer) Webhook write timeout - writeTimeout: # @schema type:[integer, null] - # -- Webhook sidecar container - sidecar: # @schema type: [object] + writeTimeout: # @schema type:[integer, null]; default: null + # -- (object) Webhook sidecar container configuration + sidecar: # @schema type: [object, null]; default: null image: # -- (string) Image repository for the `webhook` container. repository: # @schema type:[string, null]; default: null From 18c05800836a2c649ccd259150efc690dfa1807f Mon Sep 17 00:00:00 2001 From: Eric Ace <24485843+aceeric@users.noreply.github.com> Date: Sun, 27 Jul 2025 16:24:51 -0400 Subject: [PATCH 08/10] Fix rebase err --- charts/external-dns/values.schema.json | 898 +------------------------ 1 file changed, 9 insertions(+), 889 deletions(-) diff --git a/charts/external-dns/values.schema.json b/charts/external-dns/values.schema.json index 049e31136..98fd4ae2e 100644 --- a/charts/external-dns/values.schema.json +++ b/charts/external-dns/values.schema.json @@ -1,878 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", -<<<<<<< HEAD -<<<<<<< HEAD "type": "object", - "properties": { - "affinity": { - "description": "Affinity settings for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). If an explicit label selector is not provided for pod affinity or pod anti-affinity one will be created from the pod selector labels.", - "type": "object" - }, - "automountServiceAccountToken": { - "description": "Set this to `false` to [opt out of API credential automounting](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting) for the `Pod`.", - "type": "boolean" - }, - "commonLabels": { - "description": "Labels to add to all chart resources.", - "type": "object" - }, - "deploymentAnnotations": { - "description": "Annotations to add to the `Deployment`.", - "type": "object" - }, - "deploymentStrategy": { - "description": "[Deployment Strategy](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy).", - "type": "object", - "properties": { - "type": { - "type": [ - "string" - ], - "enum": [ - "Recreate", - "RollingUpdate" - ] - } - }, - "additionalProperties": true - }, - "dnsConfig": { - "description": "[DNS config](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config) for the pod, if not set the default will be used.", - "type": [ - "object", - "null" - ] - }, - "dnsPolicy": { - "description": "[DNS policy](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy) for the pod, if not set the default will be used.", - "type": [ - "string", - "null" - ] - }, - "domainFilters": { - "description": "Limit possible target zones by domain suffixes.", - "type": "array" - }, - "enabled": { - "description": "No effect - reserved for use in sub-charting", - "type": [ - "boolean", - "null" - ] - }, - "env": { - "description": "[Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `external-dns` container.", - "type": "array" - }, - "excludeDomains": { - "description": "Intentionally exclude domains from being managed.", - "type": "array" - }, - "extraArgs": { - "description": "Extra arguments to provide to _ExternalDNS_. An array or map can be used, with maps allowing for value overrides; maps also support slice values to use the same arg multiple times.", - "type": [ - "array", - "null", - "object" - ], - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "extraContainers": { - "description": "Extra containers to add to the `Deployment`.", - "type": "array" - }, - "extraVolumeMounts": { - "description": "Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `external-dns` container.", - "type": "array" - }, - "extraVolumes": { - "description": "Extra [volumes](https://kubernetes.io/docs/concepts/storage/volumes/) for the `Pod`.", - "type": "array" - }, - "fullnameOverride": { - "description": "Override the full name of the chart.", - "type": [ - "string", - "null" - ] - }, - "global": { - "type": "object", - "properties": { - "imagePullSecrets": { - "description": "Global image pull secrets.", - "type": "array", - "items": { - "type": "object" - } - } - } - }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "description": "Image pull policy for the `external-dns` container.", - "type": "string", - "enum": [ - "IfNotPresent", - "Always" - ] - }, - "repository": { - "description": "Image repository for the `external-dns` container.", - "type": "string" - }, - "tag": { - "description": "Image tag for the `external-dns` container, this will default to `.Chart.AppVersion` if not set.", - "type": [ - "string", - "null" - ] - } - }, - "additionalProperties": false - }, - "imagePullSecrets": { - "description": "Image pull secrets.", - "type": "array", - "items": { - "type": "object" - } - }, - "initContainers": { - "description": "[Init containers](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/) to add to the `Pod` definition.", - "type": "array" - }, - "interval": { - "description": "Interval for DNS updates.", - "type": "string" - }, - "labelFilter": { - "description": "Filter resources queried for endpoints by label selector", - "type": [ - "string", - "null" - ] - }, - "livenessProbe": { - "description": "[Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container.", - "type": "object", - "properties": { - "failureThreshold": { - "type": "integer" - }, - "httpGet": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "port": { - "type": "string" - } - } - }, - "initialDelaySeconds": { - "type": "integer" - }, - "periodSeconds": { - "type": "integer" - }, - "successThreshold": { - "type": "integer" - }, - "timeoutSeconds": { - "type": "integer" - } - } - }, - "logFormat": { - "description": "Log format.", - "default": "text", - "type": [ - "string" - ], - "enum": [ - "text", - "json" - ] - }, - "logLevel": { - "description": "Log level.", - "default": "info", - "type": [ - "string" - ], - "enum": [ - "panic", - "debug", - "info", - "warning", - "error", - "fatal" - ] - }, - "managedRecordTypes": { - "description": "Record types to manage (default: A, AAAA, CNAME)", - "type": [ - "array", - "null" - ], - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "nameOverride": { - "description": "Override the name of the chart.", - "type": [ - "string", - "null" - ] - }, - "namespaced": { - "description": "if `true`, _ExternalDNS_ will run in a namespaced scope (`Role`` and `Rolebinding`` will be namespaced too).", - "type": "boolean" - }, - "nodeSelector": { - "description": "Node labels to match for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/).", - "type": "object" - }, - "podAnnotations": { - "description": "Annotations to add to the `Pod`.", - "type": "object" - }, - "podLabels": { - "description": "Labels to add to the `Pod`.", - "type": "object" - }, - "podSecurityContext": { - "description": "[Pod security context](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#podsecuritycontext-v1-core), this supports full customisation.", - "type": "object", - "properties": { - "fsGroup": { - "type": "integer" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "seccompProfile": { - "type": "object", - "properties": { - "type": { - "type": "string" - } - } - } - } - }, - "policy": { - "description": "How DNS records are synchronized between sources and providers; available values are `create-only`, `sync`, \u0026 `upsert-only`.", - "default": "upsert-only", - "type": [ - "string" - ], - "enum": [ - "create-only", - "sync", - "upsert-only" - ] - }, - "priorityClassName": { - "description": "Priority class name for the `Pod`.", - "type": [ - "string", - "null" - ] - }, - "provider": { - "type": [ - "object", - "string" - ], - "properties": { - "name": { - "description": "_ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers).", - "type": "string" - }, - "webhook": { - "type": "object", - "properties": { - "args": { - "description": "Extra arguments to provide for the `webhook` container.", - "type": "array" - }, - "env": { - "description": "[Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container.", - "type": "array" - }, - "extraVolumeMounts": { - "description": "Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `webhook` container.", - "type": "array" - }, - "image": { - "type": "object", - "properties": { - "pullPolicy": { - "description": "Image pull policy for the `webhook` container.", - "type": "string" - }, - "repository": { - "description": "Image repository for the `webhook` container.", - "type": [ - "string", - "null" - ] - }, - "tag": { - "description": "Image tag for the `webhook` container.", - "type": [ - "string", - "null" - ] - } - } - }, - "limits": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "memory": { - "type": "string" - } - } - }, - "livenessProbe": { - "description": "[Liveness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container.", - "type": "object", - "properties": { - "failureThreshold": { - "type": [ - "integer", - "null" - ] - }, - "httpGet": { - "type": "object", - "properties": { - "path": { - "type": [ - "string", - "null" - ] - }, - "port": { - "type": [ - "integer", - "string" - ] - } - } - }, - "initialDelaySeconds": { - "type": [ - "integer", - "null" - ] - }, - "periodSeconds": { - "type": [ - "integer", - "null" - ] - }, - "successThreshold": { - "type": [ - "integer", - "null" - ] - }, - "timeoutSeconds": { - "type": [ - "integer", - "null" - ] - } - } - }, - "readinessProbe": { - "description": "[Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `webhook` container.", - "type": "object", - "properties": { - "failureThreshold": { - "type": [ - "integer", - "null" - ] - }, - "httpGet": { - "type": "object", - "properties": { - "path": { - "type": [ - "string", - "null" - ] - }, - "port": { - "type": [ - "integer", - "string" - ] - } - } - }, - "initialDelaySeconds": { - "type": [ - "integer", - "null" - ] - }, - "periodSeconds": { - "type": [ - "integer", - "null" - ] - }, - "successThreshold": { - "type": [ - "integer", - "null" - ] - }, - "timeoutSeconds": { - "type": [ - "integer", - "null" - ] - } - } - }, - "requests": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "memory": { - "type": "string" - } - } - }, - "resources": { - "description": "[Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `webhook` container.", - "type": "object" - }, - "securityContext": { - "description": "[Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container.", - "type": "object" - }, - "service": { - "type": "object", - "properties": { - "port": { - "description": "Webhook exposed HTTP port for the service.", - "type": "integer" - } - } - }, - "serviceMonitor": { - "description": "Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container.", - "type": "object", - "properties": { - "bearerTokenFile": { - "type": "null" - }, - "interval": { - "type": "null" - }, - "metricRelabelings": { - "type": "array" - }, - "relabelings": { - "type": "array" - }, - "scheme": { - "type": "null" - }, - "scrapeTimeout": { - "type": "null" - }, - "tlsConfig": { - "type": "object" - } - } - }, - "sidecar": { - "description": "If false, then do not add a webhook sidecar to the external-dns deployment.", - "type": "boolean" - } - } - } - } - }, - "rbac": { - "type": "object", - "properties": { - "additionalPermissions": { - "description": "Additional rules to add to the `ClusterRole`.", - "type": "array" - }, - "create": { - "description": "If `true`, create a `ClusterRole` \u0026 `ClusterRoleBinding` with access to the Kubernetes API.", - "type": "boolean" - } - }, - "additionalProperties": true - }, - "readinessProbe": { - "description": "[Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `external-dns` container.", - "type": "object", - "properties": { - "failureThreshold": { - "type": "integer" - }, - "httpGet": { - "type": "object", - "properties": { - "path": { - "type": "string" - }, - "port": { - "type": "string" - } - } - }, - "initialDelaySeconds": { - "type": "integer" - }, - "periodSeconds": { - "type": "integer" - }, - "successThreshold": { - "type": "integer" - }, - "timeoutSeconds": { - "type": "integer" - } - } - }, - "registry": { - "description": "Specify the registry for storing ownership and labels. Valid values are `txt`, `aws-sd`, `dynamodb` \u0026 `noop`.", - "default": "txt", - "type": "string", - "enum": [ - "txt", - "aws-sd", - "dynamodb", - "noop" - ] - }, - "resources": { - "description": "[Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `external-dns` container.", - "type": "object", - "properties": { - "limits": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "memory": { - "type": "string" - } - } - }, - "requests": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "memory": { - "type": "string" - } - } - } - } - }, - "revisionHistoryLimit": { - "description": "Specify the number of old `ReplicaSets` to retain to allow rollback of the `Deployment``.", - "type": [ - "integer", - "null" - ], - "minimum": 0 - }, - "secretConfiguration": { - "type": "object", - "properties": { - "data": { - "description": "`Secret` data.", - "type": "object" - }, - "enabled": { - "description": "If `true`, create a `Secret` to store sensitive provider configuration (**DEPRECATED**).", - "type": "boolean" - }, - "mountPath": { - "description": "Mount path for the `Secret`, this can be templated.", - "type": [ - "string", - "null" - ] - }, - "subPath": { - "description": "Sub-path for mounting the `Secret`, this can be templated.", - "type": [ - "string", - "null" - ] - } - } - }, - "securityContext": { - "description": "[Security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `external-dns` container.", - "type": "object", - "properties": { - "allowPrivilegeEscalation": { - "type": "boolean" - }, - "capabilities": { - "type": "object", - "properties": { - "drop": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "privileged": { - "type": "boolean" - }, - "readOnlyRootFilesystem": { - "type": "boolean" - }, - "runAsGroup": { - "type": "integer" - }, - "runAsNonRoot": { - "type": "boolean" - }, - "runAsUser": { - "type": "integer" - } - } - }, - "service": { - "type": "object", - "properties": { - "annotations": { - "description": "Service annotations.", - "type": "object" - }, - "ipFamilies": { - "description": "Service IP families (e.g. IPv4 and/or IPv6).", - "type": [ - "array", - "null" - ], - "maxItems": 2, - "minItems": 0, - "uniqueItems": true, - "items": { - "type": "string", - "enum": [ - "IPv4", - "IPv6" - ] - } - }, - "ipFamilyPolicy": { - "description": "Service IP family policy.", - "type": [ - "string", - "null" - ], - "enum": [ - "SingleStack", - "PreferDualStack", - "RequireDualStack", - null - ] - }, - "port": { - "description": "Service HTTP port.", - "default": 7979, - "type": "integer", - "minimum": 0 - } - } - }, - "serviceAccount": { - "type": "object", - "properties": { - "annotations": { - "description": "Annotations to add to the service account. Templates are allowed in both the key and the value. Example: `example.com/annotation/{{ .Values.nameOverride }}: {{ .Values.nameOverride }}`", - "type": "object" - }, - "automountServiceAccountToken": { - "description": "Set this to `false` to [opt out of API credential automounting](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#opt-out-of-api-credential-automounting) for the `ServiceAccount`.", - "type": "boolean" - }, - "create": { - "description": "If `true`, create a new `ServiceAccount`.", - "type": "boolean" - }, - "labels": { - "description": "Labels to add to the service account.", - "type": "object" - }, - "name": { - "description": "If this is set and `serviceAccount.create` is `true` this will be used for the created `ServiceAccount` name, if set and `serviceAccount.create` is `false` then this will define an existing `ServiceAccount` to use.", - "type": [ - "string", - "null" - ] - } - } - }, - "serviceMonitor": { - "type": "object", - "properties": { - "additionalLabels": { - "description": "Additional labels for the `ServiceMonitor`.", - "type": "object" - }, - "annotations": { - "description": "Annotations to add to the `ServiceMonitor`.", - "type": "object" - }, - "bearerTokenFile": { - "description": "Provide a bearer token file for the `ServiceMonitor`.", - "type": [ - "string", - "null" - ] - }, - "enabled": { - "description": "If `true`, create a `ServiceMonitor` resource to support the _Prometheus Operator_.", - "type": "boolean" - }, - "interval": { - "description": "If set override the _Prometheus_ default interval.", - "type": [ - "string", - "null" - ] - }, - "metricRelabelings": { - "description": "[Metric relabel configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs) to apply to samples before ingestion.", - "type": "array" - }, - "namespace": { - "description": "If set create the `ServiceMonitor` in an alternate namespace.", - "type": [ - "string", - "null" - ] - }, - "relabelings": { - "description": "[Relabel configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config) to apply to samples before ingestion.", - "type": "array" - }, - "scheme": { - "description": "If set overrides the _Prometheus_ default scheme.", - "type": [ - "string", - "null" - ] - }, - "scrapeTimeout": { - "description": "If set override the _Prometheus_ default scrape timeout.", - "type": [ - "string", - "null" - ] - }, - "targetLabels": { - "description": "Provide target labels for the `ServiceMonitor`.", - "type": "array" - }, - "tlsConfig": { - "description": "Configure the `ServiceMonitor` [TLS config](https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#tlsconfig).", - "type": "object" - } - } - }, - "shareProcessNamespace": { - "description": "If `true`, the `Pod` will have [process namespace sharing](https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/) enabled.", - "type": "boolean" - }, - "sources": { - "description": "_Kubernetes_ resources to monitor for DNS entries.", - "type": "array", - "items": { - "type": "string" - } - }, - "terminationGracePeriodSeconds": { - "description": "Termination grace period for the `Pod` in seconds.", - "type": [ - "integer", - "null" - ] - }, - "tolerations": { - "description": "Node taints which will be tolerated for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/).", - "type": "array" - }, - "topologySpreadConstraints": { - "description": "Topology spread constraints for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). If an explicit label selector is not provided one will be created from the pod selector labels.", - "type": "array" - }, - "triggerLoopOnEvent": { - "description": "If `true`, triggers run loop on create/update/delete events in addition of regular interval.", - "type": "boolean" - }, - "txtOwnerId": { - "description": "Specify an identifier for this instance of _ExternalDNS_ when using a registry other than `noop`.", - "type": [ - "string", - "null" - ] - }, - "txtPrefix": { - "description": "Specify a prefix for the domain names of TXT records created for the `txt` registry. Mutually exclusive with `txtSuffix`.", - "type": [ - "string", - "null" - ] - }, - "txtSuffix": { - "description": "Specify a suffix for the domain names of TXT records created for the `txt` registry. Mutually exclusive with `txtPrefix`.", - "type": [ - "string", - "null" - ] - } - }, - "additionalProperties": true -} -======= - "additionalProperties": false, -======= - "type": "object", ->>>>>>> fc9e156c (Update values and get schema to build) "properties": { "affinity": { "description": "Affinity settings for `Pod` [scheduling](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/). If an explicit label selector is not provided for pod affinity or pod anti-affinity one will be created from the pod selector labels.", @@ -969,6 +97,13 @@ "null" ] }, + "gatewayNamespace": { + "description": "_Gateway API_ gateway namespace to watch.", + "type": [ + "string", + "null" + ] + }, "global": { "type": "object", "properties": { @@ -1137,10 +272,11 @@ } }, "policy": { - "description": "How DNS records are synchronized between sources and providers; available values are `sync` \u0026 `upsert-only`.", + "description": "How DNS records are synchronized between sources and providers; available values are `create-only`, `sync`, \u0026 `upsert-only`.", "default": "upsert-only", "type": "string", "enum": [ + "create-only", "sync", "upsert-only" ] @@ -1764,21 +900,5 @@ ] } }, -<<<<<<< HEAD - "required": [ - "global", - "image", - "serviceAccount", - "service", - "rbac", - "serviceMonitor", - "provider", - "secretConfiguration" - ], - "type": "object" -} ->>>>>>> 3360e934 (WIP3) -======= "additionalProperties": true } ->>>>>>> fc9e156c (Update values and get schema to build) From ec5fefe4ee049081bb0f76abf8898fe52c5926c0 Mon Sep 17 00:00:00 2001 From: Eric Ace <24485843+aceeric@users.noreply.github.com> Date: Sun, 27 Jul 2025 16:32:04 -0400 Subject: [PATCH 09/10] Exclude large object defaults from helm docs --- charts/external-dns/README.md | 6 +++--- charts/external-dns/values.yaml | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/charts/external-dns/README.md b/charts/external-dns/README.md index 300eac59e..a9c8bbaf8 100644 --- a/charts/external-dns/README.md +++ b/charts/external-dns/README.md @@ -130,11 +130,11 @@ If `namespaced` is set to `true`, please ensure that `sources` my only contains | podSecurityContext | object | See _values.yaml_ | [Pod security context](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.22/#podsecuritycontext-v1-core), this supports full customisation. | | policy | string | `"upsert-only"` | How DNS records are synchronized between sources and providers; available values are `create-only`, `sync`, & `upsert-only`. | | priorityClassName | string | `nil` | Priority class name for the `Pod`. | -| provider | object | `{"name":"aws","webhook":{"readTimeout":null,"sidecar":{"args":[],"env":[],"extraVolumeMounts":[],"image":{"pullPolicy":"IfNotPresent","repository":null,"tag":null},"livenessProbe":{"failureThreshold":2,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"readinessProbe":{"failureThreshold":6,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":5,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"resources":{},"securityContext":{},"service":{"port":8080},"serviceMonitor":{"bearerTokenFile":null,"interval":null,"metricRelabelings":[],"relabelings":[],"scheme":null,"scrapeTimeout":null,"tlsConfig":{}}},"url":null,"writeTimeout":null}}` | Provider configuration | +| provider | object | See _values.yaml_ | Provider configuration | | provider.name | string | `"aws"` | _ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers). | -| provider.webhook | object | `{"readTimeout":null,"sidecar":{"args":[],"env":[],"extraVolumeMounts":[],"image":{"pullPolicy":"IfNotPresent","repository":null,"tag":null},"livenessProbe":{"failureThreshold":2,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"readinessProbe":{"failureThreshold":6,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":5,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"resources":{},"securityContext":{},"service":{"port":8080},"serviceMonitor":{"bearerTokenFile":null,"interval":null,"metricRelabelings":[],"relabelings":[],"scheme":null,"scrapeTimeout":null,"tlsConfig":{}}},"url":null,"writeTimeout":null}` | Webhook configuration | +| provider.webhook | object | See _values.yaml_ | Webhook configuration | | provider.webhook.readTimeout | integer | `nil` | Webhook read timeout | -| provider.webhook.sidecar | object | `{"args":[],"env":[],"extraVolumeMounts":[],"image":{"pullPolicy":"IfNotPresent","repository":null,"tag":null},"livenessProbe":{"failureThreshold":2,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":10,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"readinessProbe":{"failureThreshold":6,"httpGet":{"path":"/healthz","port":"http-webhook"},"initialDelaySeconds":5,"periodSeconds":10,"successThreshold":1,"timeoutSeconds":5},"resources":{},"securityContext":{},"service":{"port":8080},"serviceMonitor":{"bearerTokenFile":null,"interval":null,"metricRelabelings":[],"relabelings":[],"scheme":null,"scrapeTimeout":null,"tlsConfig":{}}}` | Webhook sidecar container configuration | +| provider.webhook.sidecar | object | See _values.yaml_ | Webhook sidecar container configuration | | provider.webhook.sidecar.args | list | `[]` | Extra arguments to provide for the `webhook` container. | | provider.webhook.sidecar.env | list | `[]` | [Environment variables](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/) for the `webhook` container. | | provider.webhook.sidecar.extraVolumeMounts | list | `[]` | Extra [volume mounts](https://kubernetes.io/docs/concepts/storage/volumes/) for the `webhook` container. | diff --git a/charts/external-dns/values.yaml b/charts/external-dns/values.yaml index 5add96c9d..75bbb640b 100644 --- a/charts/external-dns/values.yaml +++ b/charts/external-dns/values.yaml @@ -241,10 +241,12 @@ labelFilter: # @schema type: [string,null]; default: null managedRecordTypes: [] # @schema type: [array, null]; item: string; uniqueItems: true # -- (object) Provider configuration +# @default -- See _values.yaml_ provider: # @schema type: [object, string] # -- _ExternalDNS_ provider name; for the available providers and how to configure them see [README](https://github.com/kubernetes-sigs/external-dns/blob/master/charts/external-dns/README.md#providers). name: aws # @schema type:[string, null] # -- (object) Webhook configuration + # @default -- See _values.yaml_ webhook: # @schema type: [object, null] # -- (string) Webhook URL url: # @schema type:[string, null]; default: null @@ -253,6 +255,7 @@ provider: # @schema type: [object, string] # -- (integer) Webhook write timeout writeTimeout: # @schema type:[integer, null]; default: null # -- (object) Webhook sidecar container configuration + # @default -- See _values.yaml_ sidecar: # @schema type: [object, null]; default: null image: # -- (string) Image repository for the `webhook` container. From a3d019d56055a55e19676a57c4ce261e394f4150 Mon Sep 17 00:00:00 2001 From: Eric Ace <24485843+aceeric@users.noreply.github.com> Date: Sun, 27 Jul 2025 16:48:12 -0400 Subject: [PATCH 10/10] Add guards for empty map in other required areas --- charts/external-dns/templates/deployment.yaml | 2 ++ charts/external-dns/templates/service.yaml | 2 ++ charts/external-dns/templates/servicemonitor.yaml | 2 ++ 3 files changed, 6 insertions(+) diff --git a/charts/external-dns/templates/deployment.yaml b/charts/external-dns/templates/deployment.yaml index c57ba4857..42d8dbce8 100644 --- a/charts/external-dns/templates/deployment.yaml +++ b/charts/external-dns/templates/deployment.yaml @@ -184,6 +184,7 @@ spec: {{- toYaml . | nindent 12 }} {{- end }} {{- if eq $providerName "webhook" }} + {{- if kindIs "map" .Values.provider }} {{- if .Values.provider.webhook.sidecar }} {{- with .Values.provider.webhook.sidecar }} - name: webhook @@ -222,6 +223,7 @@ spec: {{- end }} {{- end }} {{- end }} + {{- end }} {{- if or .Values.secretConfiguration.enabled .Values.extraVolumes }} volumes: {{- if .Values.secretConfiguration.enabled }} diff --git a/charts/external-dns/templates/service.yaml b/charts/external-dns/templates/service.yaml index bb8bf4f32..c7a8d0b75 100644 --- a/charts/external-dns/templates/service.yaml +++ b/charts/external-dns/templates/service.yaml @@ -27,6 +27,7 @@ spec: targetPort: http protocol: TCP {{- if eq $providerName "webhook" }} + {{- if kindIs "map" .Values.provider }} {{- if .Values.provider.webhook.sidecar }} {{- with .Values.provider.webhook.sidecar.service }} - name: http-webhook @@ -36,3 +37,4 @@ spec: {{- end }} {{- end }} {{- end }} + {{- end }} diff --git a/charts/external-dns/templates/servicemonitor.yaml b/charts/external-dns/templates/servicemonitor.yaml index d75d54549..7b1e27d51 100644 --- a/charts/external-dns/templates/servicemonitor.yaml +++ b/charts/external-dns/templates/servicemonitor.yaml @@ -50,6 +50,7 @@ spec: {{- toYaml . | nindent 8 }} {{- end }} {{- if eq $providerName "webhook" }} + {{- if kindIs "map" .Values.provider }} {{- if .Values.provider.webhook.sidecar }} {{- with .Values.provider.webhook.sidecar.serviceMonitor }} - port: http-webhook @@ -81,6 +82,7 @@ spec: {{- end }} {{- end }} {{- end }} + {{- end }} {{- with .Values.serviceMonitor.targetLabels }} targetLabels: {{- toYaml . | nindent 4 }}