# Default values for pihole.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

# -- The number of replicas
replicaCount: 1

# -- The `spec.strategyTpye` for updates
strategyType: RollingUpdate

# -- The maximum number of Pods that can be created over the desired number of `ReplicaSet` during updating.
maxSurge: 1

# -- The maximum number of Pods that can be unavailable during updating
maxUnavailable: 1

image:
  # -- the repostory to pull the image from
  repository: "pihole/pihole"
  # -- the docker tag, if left empty it will get it from the chart's appVersion
  tag: ""
  # -- the pull policy
  pullPolicy: IfNotPresent

dualStack:
  # -- set this to true to enable creation of DualStack services or creation of separate IPv6 services if `serviceDns.type` is set to `"LoadBalancer"`
  enabled: false

dnsHostPort:
  # -- set this to true to enable dnsHostPort
  enabled: false
  # -- default port for this pod
  port: 53

# -- Configuration for the DNS service on port 53
serviceDns:
  # -- deploys a mixed (TCP + UDP) Service instead of separate ones
  mixedService: false

  # -- `spec.type` for the DNS Service
  type: NodePort

  # -- The port of the DNS service
  port: 53

  # -- Optional node port for the DNS service
  nodePort: ""

  # -- `spec.externalTrafficPolicy` for the DHCP Service
  externalTrafficPolicy: Local

  # -- A fixed `spec.loadBalancerIP` for the DNS Service
  loadBalancerIP: ""
  # -- A fixed `spec.loadBalancerIP` for the IPv6 DNS Service
  loadBalancerIPv6: ""

  # -- Annotations for the DNS service
  annotations:
    {}
    # metallb.universe.tf/address-pool: network-services
    # metallb.universe.tf/allow-shared-ip: pihole-svc

# -- Configuration for the DHCP service on port 67
serviceDhcp:
  # -- Generate a Service resource for DHCP traffic
  enabled: true

  # -- `spec.type` for the DHCP Service
  type: NodePort

  # -- The port of the DHCP service
  port: 67

  # -- Optional node port for the DHCP service
  nodePort: ""

  # -- `spec.externalTrafficPolicy` for the DHCP Service
  externalTrafficPolicy: Local

  # -- A fixed `spec.loadBalancerIP` for the DHCP Service
  loadBalancerIP: ""
  # -- A fixed `spec.loadBalancerIP` for the IPv6 DHCP Service
  loadBalancerIPv6: ""

  # -- Annotations for the DHCP service
  annotations:
    {}
    # metallb.universe.tf/address-pool: network-services
    # metallb.universe.tf/allow-shared-ip: pihole-svc

# -- Configuration for the web interface service
serviceWeb:
  # -- Configuration for the HTTP web interface listener
  http:
    # -- Generate a service for HTTP traffic
    enabled: true

    # -- The port of the web HTTP service
    port: 80

    # -- Optional node port for the web HTTP service
    nodePort: ""

  # -- Configuration for the HTTPS web interface listener
  https:
    # -- Generate a service for HTTPS traffic
    enabled: true

    # -- The port of the web HTTPS service
    port: 443

    # -- Optional node port for the web HTTPS service
    nodePort: ""

  # -- `spec.type` for the web interface Service
  type: ClusterIP

  # -- `spec.externalTrafficPolicy` for the web interface Service
  externalTrafficPolicy: Local

  # -- A fixed `spec.loadBalancerIP` for the web interface Service
  loadBalancerIP: ""
  # -- A fixed `spec.loadBalancerIP` for the IPv6 web interface Service
  loadBalancerIPv6: ""

  # -- Annotations for the DHCP service
  annotations:
    {}
    # metallb.universe.tf/address-pool: network-services
    # metallb.universe.tf/allow-shared-ip: pihole-svc

virtualHost: pi.hole

# -- Configuration for the Ingress
ingress:
  # -- Generate a Ingress resource
  enabled: false

  # -- Specify an ingressClassName
  # ingressClassName: nginx

  # -- Annotations for the ingress
  annotations:
    {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  path: /
  hosts:
    # virtualHost (default value is pi.hole) will be appended to the hosts
    - chart-example.local
  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #     #- virtualHost (default value is pi.hole) will be appended to the hosts
  #      - chart-example.local

# -- Probes configuration
probes:
  # -- probes.liveness -- Configure the healthcheck for the ingress controller
  liveness:
    # -- Generate a liveness probe
    # 'type' defaults to httpGet, can be set to 'command' to use a command type liveness probe.
    type: httpGet
    # command:
    #   - /bin/bash
    #   - -c
    #   - /bin/true
    enabled: true
    initialDelaySeconds: 60
    failureThreshold: 10
    timeoutSeconds: 5
    port: http
    scheme: HTTP
  readiness:
    # -- Generate a readiness probe
    enabled: true
    initialDelaySeconds: 60
    failureThreshold: 3
    timeoutSeconds: 5
    port: http
    scheme: HTTP

# -- We usually recommend not to specify default resources and to leave this as a conscious
# -- choice for the user. This also increases chances charts run on environments with little
# -- resources, such as Minikube. If you do want to specify resources, uncomment the following
# -- lines, adjust them as necessary, and remove the curly braces after 'resources:'.
resources:
  {}
  # limits:
  #  cpu: 100m
  #  memory: 128Mi
  # requests:
  #  cpu: 100m
  #  memory: 128Mi

# -- `spec.PersitentVolumeClaim` configuration
persistentVolumeClaim:
  # -- set to true to use pvc
  enabled: false

  # -- specify an existing `PersistentVolumeClaim` to use
  # existingClaim: ""

  # -- Annotations for the `PersitentVolumeClaim`
  annotations: {}

  accessModes:
    - ReadWriteOnce

  size: "500Mi"

  ## If defined, storageClassName: <storageClass>
  ## If set to "-", storageClassName: "", which disables dynamic provisioning
  ## If undefined (the default) or set to null, no storageClassName spec is
  ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
  ##   GKE, AWS & OpenStack)
  ##
  # storageClass: "-"

  ## If subPath is set mount a sub folder of a volume instead of the root of the volume.
  ## This is especially handy for volume plugins that don't natively support sub mounting (like glusterfs).

  ## subPath: "pihole"

nodeSelector: {}

tolerations: []

# -- Specify a priorityClassName
# priorityClassName: ""

# Reference: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/
topologySpreadConstraints: []
# - maxSkew: <integer>
#   topologyKey: <string>
#   whenUnsatisfiable: <string>
#   labelSelector: <object>

affinity: {}

# -- Administrator password when not using an existing secret (see below)
adminPassword: "admin"

# -- Use an existing secret for the admin password.
admin:
  # -- If set to false admin password will be disabled, adminPassword specified above and the pre-existing secret (if specified) will be ignored.
  enabled: true
  # -- Specify an existing secret to use as admin password
  existingSecret: ""
  # -- Specify the key inside the secret to use
  passwordKey: "password"

# -- extraEnvironmentVars is a list of extra enviroment variables to set for pihole to use
extraEnvVars:
  {}
  # TZ: UTC

# -- extraEnvVarsSecret is a list of secrets to load in as environment variables.
extraEnvVarsSecret:
  {}
  # env_var:
  #   name: secret-name
  #   key: secret-key

# -- default upstream DNS 1 server to use
DNS1: "8.8.8.8"
# -- default upstream DNS 2 server to use
DNS2: "8.8.4.4"

antiaff:
  # -- set to true to enable antiaffinity (example: 2 pihole DNS in the same cluster)
  enabled: false
  # -- Here you can set the pihole release (you set in `helm install <releasename> ...`)
  # you want to avoid
  avoidRelease: pihole1
  # -- Here you can choose between preferred or required
  strict: true
  # -- Here you can pass namespaces to be part of those inclueded in anti-affinity
  namespaces: []

doh:
  # -- set to true to enabled DNS over HTTPs via cloudflared
  enabled: false
  name: "cloudflared"
  repository: "crazymax/cloudflared"
  tag: latest
  pullPolicy: IfNotPresent
  # -- Here you can pass environment variables to the DoH container, for example:
  envVars:
    {}
    # TUNNEL_DNS_UPSTREAM: "https://1.1.1.2/dns-query,https://1.0.0.2/dns-query"

  # -- Probes configuration
  probes:
    # -- Configure the healthcheck for the doh container
    liveness:
      # -- set to true to enable liveness probe
      enabled: true
      # -- customize the liveness probe
      probe:
        exec:
          command:
            - nslookup
            - -po=5053
            - cloudflare.com
            - "127.0.0.1"
      # -- defines the initial delay for the liveness probe
      initialDelaySeconds: 60
      # -- defines the failure threshold for the liveness probe
      failureThreshold: 10
      # -- defines the timeout in secondes for the liveness probe
      timeoutSeconds: 5

dnsmasq:
  # -- Add upstream dns servers. All lines will be added to the pihole dnsmasq configuration
  upstreamServers: []
  # - server=/foo.bar/192.168.178.10
  # - server=/bar.foo/192.168.178.11

  # -- Add custom dns entries to override the dns resolution. All lines will be added to the pihole dnsmasq configuration.
  customDnsEntries: []
  # - address=/foo.bar/192.168.178.10
  # - address=/bar.foo/192.168.178.11

  # -- Dnsmasq reads the /etc/hosts file to resolve ips. You can add additional entries if you like
  additionalHostsEntries: []
  # - 192.168.0.3     host4
  # - 192.168.0.4     host5

  # -- Static DHCP config
  staticDhcpEntries: []
  # staticDhcpEntries:
  # - dhcp-host=MAC_ADDRESS,IP_ADDRESS,HOSTNAME

  # -- Other options
  customSettings:
  # otherSettings:
  # - rebind-domain-ok=/plex.direct/

  # -- Here we specify custom cname entries that should point to `A` records or
  # elements in customDnsEntries array.
  # The format should be:
  #  - cname=cname.foo.bar,foo.bar
  #  - cname=cname.bar.foo,bar.foo
  #  - cname=cname record,dns record
  customCnameEntries: []
  # Here we specify custom cname entries that should point to `A` records or
  # elements in customDnsEntries array.
  # The format should be:
  #   - cname=cname.foo.bar,foo.bar
  #   - cname=cname.bar.foo,bar.foo
  #   - cname=cname record,dns record

# -- list of adlists to import during initial start of the container
adlists:
  {}
  # If you want to provide blocklists, add them here.
  # - https://hosts-file.net/grm.txt
  # - https://reddestdream.github.io/Projects/MinimalHosts/etc/MinimalHostsBlocker/minimalhosts

# -- list of whitelisted domains to import during initial start of the container
whitelist:
  {}
  # If you want to provide whitelisted domains, add them here.
  # - clients4.google.com

# -- list of blacklisted domains to import during initial start of the container
blacklist:
  {}
  # If you want to have special domains blacklisted, add them here
  # - *.blackist.com

# -- list of blacklisted regex expressions to import during initial start of the container
regex:
  {}
  # Add regular expression blacklist items
  # - (^|\.)facebook\.com$

# -- values that should be added to pihole-FTL.conf
ftl:
  {}
  # Add values for pihole-FTL.conf
  # MAXDBDAYS: 14

# -- port the container should use to expose HTTP traffic
webHttp: "80"

# -- port the container should use to expose HTTPS traffic
webHttps: "443"

# -- hostname of pod
hostname: ""

# -- should the container use host network
hostNetwork: "false"

# -- should container run in privileged mode
privileged: "false"

# linux capabilities container should run with
capabilities:
  {}
  # add:
  # - NET_ADMIN

customVolumes:
  # -- set this to true to enable custom volumes
  enabled: false
  # -- any volume type can be used here
  config:
    {}
    # hostPath:
    #   path: "/mnt/data"

# -- any extra volumes you might want
extraVolumes:
  {}
  # external-conf:
  #   configMap:
  #     name: pi-hole-lighttpd-external-conf

# -- any extra volume mounts you might want
extraVolumeMounts:
  {}
  # external-conf:
  #   mountPath: /etc/lighttpd/external.conf
  #   subPath: external.conf

extraContainers:
  []
  # - name: pihole-logwatcher
  #   image: your-registry/pihole-logwatcher
  #   imagePullPolicy: Always
  #   resources:
  #     requests:
  #       cpu: 100m
  #       memory: 5Mi
  #     limits:
  #       cpu: 100m
  #       memory: 5Mi
  #   volumeMounts:
  #   - name: pihole-logs
  #     mountPath: /var/log/pihole

# -- any extra kubernetes manifests you might want
extraObjects:
  []
  # - apiVersion: v1
  #   kind: ConfigMap
  #   metadata:
  #     name: pi-hole-lighttpd-external-conf
  #   data:
  #     external.conf: |
  #       $HTTP["host"] =~ "example.foo" {
  #         # If we're using a non-standard host for pihole, ensure the Pi-hole
  #         # Block Page knows that this is not a blocked domain
  #         setenv.add-environment = ("fqdn" => "true")
  #
  #         # Enable the SSL engine with a cert, only for this specific host
  #         $SERVER["socket"] == ":443" {
  #           ssl.engine = "enable"
  #           ssl.pemfile = "/etc/ssl/lighttpd-private/tls.crt"
  #           ssl.privkey = "/etc/ssl/lighttpd-private/tls.key"
  #           ssl.ca-file = "/etc/ssl/lighttpd-private/ca.crt"
  #           ssl.honor-cipher-order = "enable"
  #           ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
  #           ssl.use-sslv2 = "disable"
  #           ssl.use-sslv3 = "disable"
  #         }
  #       }
  #
  #       # Redirect HTTP to HTTPS
  #       $HTTP["scheme"] == "http" {
  #         $HTTP["host"] =~ ".*" {
  #           url.redirect = (".*" => "https://%0$0")
  #         }
  #       }

# -- Additional annotations for pods
podAnnotations:
  {}
  # Example below allows Prometheus to scape on metric port (requires pihole-exporter sidecar enabled)
  # prometheus.io/port: '9617'
  # prometheus.io/scrape: 'true'

# -- any initContainers you might want to run before starting pihole
extraInitContainers:
  []
  # - name: copy-config
  #   image: busybox
  #   args:
  #     - sh
  #     - -c
  #     - |
  #       cp /etc/lighttpd-cm/external.conf /etc/lighttpd/
  #       ls -l /etc/lighttpd/
  #   volumeMounts:
  #     - name: external-conf-cm
  #       mountPath: /etc/lighttpd-cm/
  #     - name: external-conf
  #       mountPath: /etc/lighttpd/

monitoring:
  # -- Preferably adding prometheus scrape annotations rather than enabling podMonitor.
  podMonitor:
    # -- set this to true to enable podMonitor
    enabled: false
  # -- Sidecar configuration
  sidecar:
    # -- set this to true to enable podMonitor as sidecar
    enabled: false
    port: 9617
    image:
      repository: ekofr/pihole-exporter
      tag: v0.3.0
      pullPolicy: IfNotPresent
    resources:
      limits:
        memory: 128Mi
      # requests:
      #  cpu: 100m
      #  memory: 128Mi

podDnsConfig:
  enabled: true
  policy: "None"
  nameservers:
    - 127.0.0.1
    - 8.8.8.8

# -- configure a Pod Disruption Budget
podDisruptionBudget:
  # -- set to true to enable creating the PDB
  enabled: false
  # -- minimum number of pods Kubernetes should try to have running at all times
  minAvailable: 1
  # -- maximum number of pods Kubernetes will allow to be unavailable. Cannot set both `minAvailable` and `maxAvailable`
  # maxUnavailable: 1
