#
# 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"

resources: {}

initContainer:
  image: busybox
  tag: 1.28

autoscaling:
  enabled: false
  minReplicas: 1
  maxReplicas: 100
  targetCPUUtilizationPercentage: 80
  # targetMemoryUtilizationPercentage: 80

nodeSelector: {}
tolerations: []

# -- namespace: "ingress-apisix"

serviceMonitor:
  enabled: false
  namespace: "monitoring"
  interval: 15s
  # -- @param serviceMonitor.labels ServiceMonitor extra labels
  labels: {}
  # -- @param serviceMonitor.annotations ServiceMonitor annotations
  annotations: {}


podSecurityContext: {}
  # fsGroup: 2000

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