# Copyright 2021 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:
  web-subpath:
    description: Subpath for accessing Prometheus
    type: string
    default: /
  default-target:
    description: Default target to be added in Prometheus
    type: string
    default: ""
  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: ""
  enable_web_admin_api:
    type: boolean
    description: Boolean to enable the web admin api
    default: false
