# 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:
  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: ""
  osm_dashboards:
    type: boolean
    description: Enable OSM System monitoring dashboards
    default: false
  image_pull_policy:
    type: string
    description: |
      ImagePullPolicy configuration for the pod.
      Possible values: always, ifnotpresent, never
    default: always
  mysql_uri:
    type: string
    description: |
      Mysql uri with the following format:
        mysql://<user>:<pass>@<host>:<port>/<database>
  admin_user:
    type: string
    description: Admin user
    default: admin
  log_level:
    type: string
    description: |
      Logging level for Grafana. Options are “debug”, “info”,
      “warn”, “error”, and “critical”.
    default: info
  port:
    description: The port grafana-k8s will be listening on
    type: int
    default: 3000
  security_context:
    description: Enables the security context of the pods
    type: boolean
    default: false
