#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# -- Default values for apisix-ingress-controller.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
#
nameOverride: ""

fullnameOverride: ""

# -- Override default labels assigned to Apache APISIX ingress controller resource
labelsOverride: {}
# labelsOverride:
#   app.kubernetes.io/name: "{{ .Release.Name }}"
#   app.kubernetes.io/instance: '{{ include "apisix-ingress-controller.name" . }}'

rbac:
  # -- Specifies whether RBAC resources should be created
  create: true

serviceAccount:
  # -- Specifies whether a ServiceAccount should be created
  create: true
  # -- The name of the ServiceAccount to use.
  # If not set and create is true, a name is generated using the fullname template
  name: ""
  # -- Whether automounting API credentials for a service account
  automountServiceAccountToken: true


replicaCount: 1

image:
  repository: apache/apisix-ingress-controller
  pullPolicy: IfNotPresent
  tag: "1.6.1"

podAnnotations: {}

priorityClassName: ""

imagePullSecrets: []
clusterDomain: cluster.local

service:
  port: 80

config:
  # -- the error log level, default is info, optional values are: debug, info, warn, error, panic, fatal
  logLevel: "info"
  # -- the output file path of error log, default is stderr, when
  # the file path is "stderr" or "stdout", logs are marshalled
  # plainly, which is more readable for human; otherwise logs
  # are marshalled in JSON format, which can be parsed by
  # programs easily.
  logOutput: "stderr"
  # -- the TLS certificate file path.
  certFile: "/etc/webhook/certs/cert.pem"
  # -- the TLS key file path.
  keyFile: "/etc/webhook/certs/key.pem"
  # -- the HTTP Server listen address, default is ":8080"
  httpListen: ":8080"
  # -- the HTTPS Server listen address, default is ":8443"
  httpsListen: ":8443"
  # -- the controller will use the Endpoint of this Service to
  # update the status information of the Ingress resource.
  # The format is "namespace/svc-name" to solve the situation that
  # the data plane and the controller are not deployed in the same namespace.
  ingressPublishService: ""
  ingressStatusAddress: []
  # -- enable profiling via web interfaces host:port/debug/pprof, default is true.
  enableProfiling: true
  # -- Default interval for synchronizing Kubernetes resources to APISIX
  apisixResourceSyncInterval: "1h"
  # -- Kubernetes related configurations.
  kubernetes:
    # -- the Kubernetes configuration file path, default is "", so the in-cluster
    # configuration will be used.
    kubeconfig: ""
    # -- how long should apisix-ingress-controller re-synchronizes with Kubernetes,
    # default is 6h,
    resyncInterval: "6h"
    # -- namespace_selector represent basis for selecting managed namespaces.
    # the field is support since version 1.4.0
    # For example, "apisix.ingress=watching", so ingress will watching the namespaces which labels "apisix.ingress=watching"
    namespaceSelector: [""]
    # -- the election id for the controller leader campaign,
    # only the leader will watch and delivery resource changes,
    # other instances (as candidates) stand by.
    electionId: "ingress-apisix-leader"
    # -- The class of an Ingress object is set using the field IngressClassName in
    # Kubernetes clusters version v1.18.0 or higher or the annotation
    # "kubernetes.io/ingress.class" (deprecated).
    ingressClass: "apisix"
    # -- the supported ingress api group version, can be "networking/v1beta1",
    # "networking/v1" (for Kubernetes version v1.19.0 or higher), and
    # "extensions/v1beta1", default is "networking/v1".
    ingressVersion: "networking/v1"
    # -- whether to watch EndpointSlices rather than Endpoints.
    watchEndpointSlices: false
    # -- the supported apisixroute api group version, can be "apisix.apache.org/v2"
    # "apisix.apache.org/v2beta3" or "apisix.apache.org/v2beta2"
    apisixRouteVersion: "apisix.apache.org/v2"
    # -- whether to enable support for Gateway API.
    # Note: This feature is currently under development and may not work as expected.
    # It is not recommended to use it in a production environment.
    # Before we announce support for it to reach Beta level or GA.
    enableGatewayAPI: false
    # -- the resource API version, support "apisix.apache.org/v2beta3" and "apisix.apache.org/v2".
    # default is "apisix.apache.org/v2"
    apiVersion: "apisix.apache.org/v2"
    # -- Pluginmetadata in APISIX can be controlled through ConfigMap. default is ""
    pluginMetadataCM: ""

  # -- APISIX related configurations.
  apisix:
    # -- Enabling this value, overrides serviceName and serviceNamespace.
    # serviceFullname: "apisix-admin.apisix.svc.local"
    serviceName: apisix-admin
    serviceNamespace: ingress-apisix
    servicePort: 9180
    adminKey: "edd1c9f034335f136f87ad84b625c8f1"
    clusterName: "default"
    # -- the APISIX admin API version. can be "v2" or "v3", default is "v2".
    adminAPIVersion: "v2"

    # -- The APISIX Helm chart supports storing user credentials in a secret.
    # The secret needs to contain a single key for admin token with key adminKey by default.
    existingSecret: ""
    # -- Name of the admin token key in the secret, overrides the default key name "adminKey"
    existingSecretAdminKeyKey: ""

resources: {}

initContainer:
  image: busybox
  tag: 1.28

autoscaling:
  enabled: false
  # -- HPA version, the value is "v2" or "v2beta1", default "v2"
  version: v2
  minReplicas: 1
  maxReplicas: 100
  targetCPUUtilizationPercentage: 80
  # targetMemoryUtilizationPercentage: 80

# -- Update strategy for apisix ingress controller deployment
updateStrategy: {}
  # type: RollingUpdate

nodeSelector: {}
tolerations: []
affinity: {}
# -- Topology Spread Constraints for pod assignment spread across your cluster among failure-domains
# ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#spread-constraints-for-pods
topologySpreadConstraints: []

# -- namespace: "ingress-apisix"

serviceMonitor:
  enabled: false
  namespace: "monitoring"
  interval: 15s
  # -- @param serviceMonitor.labels ServiceMonitor extra labels
  labels: {}
  # -- @param serviceMonitor.annotations ServiceMonitor annotations
  annotations: {}
  # -- @param serviceMonitor.metricRelabelings MetricRelabelConfigs to apply to samples before ingestion.
  # ref: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs
  metricRelabelings: {}


podSecurityContext: {}
  # fsGroup: 2000

securityContext: {}
  # capabilities:
  #   drop:
  #   - ALL
  # readOnlyRootFilesystem: true
  # runAsNonRoot: true
  # runAsUser: 1000
