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

apiVersion: v1
data:
  config.yaml: |
   # 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.

   # APISIX related configurations.
   apisix:
     base_url: "http://127.0.0.1:9080/apisix/admin" # the APISIX admin api / manager api
                                              # base url, it's required.
kind: ConfigMap
metadata:
  name: apisix-ingress-cm
