# Copyright 2022 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
#
#
# This file populates the Configure tab on Charmhub.
# See https://juju.is/docs/some-url-to-be-determined/ for a checklist and guidance.

options:
  log-level:
    default: "INFO"
    description: |
      Set the Logging Level.

      Options:
        - TRACE
        - DEBUG
        - INFO
        - WARN
        - ERROR
        - FATAL
    type: string
  database-commonkey:
    description: Database COMMON KEY
    type: string
    default: osm
  openstack-default-granularity:
    description: Openstack default granularity
    type: int
    default: 300
  global-request-timeout:
    description: Global request timeout
    type: int
    default: 10
  collector-interval:
    description: Collector interval
    type: int
    default: 30
  evaluator-interval:
    description: Evaluator interval
    type: int
    default: 30
  grafana-url:
    description: Grafana URL
    type: string
    default: http://grafana:3000
  grafana-user:
    description: Grafana user
    type: string
    default: admin
  grafana-password:
    description: Grafana password
    type: string
    default: admin
  keystone-enabled:
    description: MON will use Keystone backend
    type: boolean
    default: false
  vm-infra-metrics:
    description: Enables querying the VIMs asking for the status of the VMs
    type: boolean
    default: true
  certificates:
    type: string
    description: |
      comma-separated list of <name>:<content> certificates.
      Where:
        name: name of the file for the certificate
        content: base64 content of the certificate
      The path for the files is /certs.

  # Debug-mode options
  debug-mode:
    type: boolean
    description: |
      Great for OSM Developers! (Not recommended for production deployments)

      This action activates the Debug Mode, which sets up the container to be ready for debugging.
      As part of the setup, SSH is enabled and a VSCode workspace file is automatically populated.

      After enabling the debug-mode, execute the following command to get the information you need
      to start debugging:
        `juju run-action <unit name> get-debug-mode-information --wait`

      The previous command returns the command you need to execute, and the SSH password that was set.

      See also:
        - https://charmhub.io/osm-mon/configure#mon-hostpath
        - https://charmhub.io/osm-mon/configure#common-hostpath
        - https://charmhub.io/osm-mon/configure#n2vc-hostpath
    default: false
  mon-hostpath:
    type: string
    description: |
      Set this config to the local path of the MON module to persist the changes done during the
      debug-mode session.

      Example:
        $ git clone "https://osm.etsi.org/gerrit/osm/MON" /home/ubuntu/MON
        $ juju config mon mon-hostpath=/home/ubuntu/MON

      This configuration only applies if option `debug-mode` is set to true.
  common-hostpath:
    type: string
    description: |
      Set this config to the local path of the common module to persist the changes done during the
      debug-mode session.

      Example:
        $ git clone "https://osm.etsi.org/gerrit/osm/common" /home/ubuntu/common
        $ juju config mon common-hostpath=/home/ubuntu/common

      This configuration only applies if option `debug-mode` is set to true.
  n2vc-hostpath:
    type: string
    description: |
      Set this config to the local path of the N2VC module to persist the changes done during the
      debug-mode session.

      Example:
        $ git clone "https://osm.etsi.org/gerrit/osm/N2VC" /home/ubuntu/N2VC
        $ juju config mon n2vc-hostpath=/home/ubuntu/N2VC

      This configuration only applies if option `debug-mode` is set to true.
