# Copyright 2020 Canonical Ltd.
#
# Licensed 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.
#
# For those usages not covered by the Apache License, Version 2.0 please
# contact: legal@canonical.com
#
# To get in touch with the maintainers, please contact:
# osm-charmers@lists.launchpad.net
##

options:
  max_file_size:
    type: int
    description: |
      The maximum file size, in megabytes. If there is a reverse proxy in front
      of Keystone, it may need to be configured to handle the requested size.
      Note: if set to 0, there is no limit.
    default: 0
  ingress_whitelist_source_range:
    type: string
    description: |
      A comma-separated list of CIDRs to store in the
      ingress.kubernetes.io/whitelist-source-range annotation.

      This can be used to lock down access to
      Keystone based on source IP address.
    default: ""
  tls_secret_name:
    type: string
    description: TLS Secret name
    default: ""
  site_url:
    type: string
    description: Ingress URL
    default: ""
  cluster_issuer:
    type: string
    description: Name of the cluster issuer for TLS certificates
    default: ""
  log_level:
    description: "Log Level"
    type: string
    default: "INFO"
  database_commonkey:
    description: Database COMMON KEY
    type: string
    default: osm
  auth_backend:
    type: string
    description: Authentication backend ('internal' or 'keystone')
    default: internal
  enable_test:
    type: boolean
    description: Enable test endpoints of NBI.
    default: false
