{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "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"
    },
    "annotationFilter": {
      "description": "Filter resources queried for endpoints by annotation selector.",
      "type": [
        "string",
        "null"
      ]
    },
    "annotationPrefix": {
      "description": "Annotation prefix for external-dns annotations (useful for split horizon DNS with multiple instances).",
      "type": [
        "string",
        "null"
      ]
    },
    "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": {
          "default": "Recreate",
          "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"
      ]
    },
    "gatewayNamespace": {
      "description": "_Gateway API_ gateway namespace to watch. When `namespaced=true`, setting this value avoids creating any cluster-scoped RBAC (no ClusterRole/ClusterRoleBinding) for Gateway sources.",
      "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": {
                      "default": "string",
                      "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": {
                      "default": "string",
                      "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": [
                    "string",
                    "null"
                  ]
                },
                "interval": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "metricRelabelings": {
                  "type": "array"
                },
                "relabelings": {
                  "type": "array"
                },
                "scheme": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "scrapeTimeout": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "tlsConfig": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "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
}
