# 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_class:
    type: string
    description: |
      Ingress class name. This is useful for selecting the ingress to be used
      in case there are multiple ingresses in the underlying k8s clusters.
  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: ""
  enable_web_admin_api:
    type: boolean
    description: Boolean to enable the web admin api
    default: false
  image_pull_policy:
    type: string
    description: |
      ImagePullPolicy configuration for the pod.
      Possible values: always, ifnotpresent, never
    default: always
  security_context:
    description: Enables the security context of the pods
    type: boolean
    default: false
  web_config_username:
    type: string
    default: admin
    description: Username to access the Prometheus Web Interface
  web_config_password:
    type: string
    default: admin
    description: Password to access the Prometheus Web Interface
