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

# log options
log_level: "info"    # the error log level, default is info, optional values are:
                     # debug
                     # info
                     # warn
                     # error
                     # panic
                     # fatal
log_output: "stderr" # 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.

http_listen: ":8080"   # the HTTP Server listen address, default is ":8080"
enable_profiling: true # enable profiling via web interfaces
                       # host:port/debug/pprof, default is true.

# Kubernetes related configurations.
kubernetes:
  kubeconfig: ""                       # the Kubernetes configuration file path, default is
                                       # "", so the in-cluster configuration will be used.
  resync_interval: "6h"                # how long should apisix-ingress-controller
                                       # re-synchronizes with Kubernetes, default is 6h,
                                       # and the minimal resync interval is 30s.
  app_namespaces: ["*"]                # namespace list that controller will watch for resources,
                                       # by default all namespaces (represented by "*") are watched.
  election_id: "ingress-apisix-leader" # the election id for the controller leader campaign,
                                       # only the leader will watch and delivery resource changes,
                                       # other instances (as candidates) stand by.
  ingress_class: "apisix"              # 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).
  ingress_version: "networking/v1"     # 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".

  apisix_route_version: "apisix.apache.org/v2alpha1" # the supported apisixroute api group version, can be
                                                     # "apisix.apache.org/v1" or "apisix.apache.org/v2alpha1",
                                                     # default is "apisix.apache.org/v2alpha1".
# APISIX related configurations.
apisix:
  base_url: "http://127.0.0.1:9080/apisix/admin" # (Deprecated, use default_cluster_base_url) the APISIX admin api / manager api
                                                 # base url, it's required.

  default_cluster_base_url: "http://127.0.0.1:9080/apisix/admin" # The base url of admin api / manager api
                                                                 # of the default APISIX cluster

  admin_key: "" # (Deprecated, use default_cluster_admin_key) the admin key used for the authentication of
                # admin api / manager api in the default APISIX cluster, by default this field is unset.

  default_cluster_admin_key: "" # the admin key used for the authentication of admin api / manager api in the
                                # default APISIX cluster, by default this field is unset.

  default_cluster_name: "default" # name of the default APISIX cluster.
