# 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:
  enable_ng_ro:
    description: Enable NG-RO
    type: boolean
    default: true
  database_commonkey:
    description: Database COMMON KEY
    type: string
    default: osm
  mongodb_uri:
    type: string
    description: MongoDB URI (external database)
  log_level:
    description: "Log Level"
    type: string
    default: "INFO"
  period_refresh_active:
    type: int
    description: |
      Updates the VNF status from VIM for every given period of time seconds.
      Values equal or greater than 60 is allowed.
      Disable the updates from VIM by setting -1.
      Example:
        $ juju config ro period_refresh_active=-1
        $ juju config ro period_refresh_active=100
  mysql_host:
    type: string
    description: MySQL Host (external database)
  mysql_port:
    type: int
    description: MySQL Port (external database)
  mysql_user:
    type: string
    description: MySQL User (external database)
  mysql_password:
    type: string
    description: MySQL Password (external database)
  mysql_root_password:
    type: string
    description: MySQL Root Password (external database)
  vim_database:
    type: string
    description: "The database name."
    default: "mano_vim_db"
  ro_database:
    type: string
    description: "The database name."
    default: "mano_db"
  openmano_tenant:
    type: string
    description: "Openmano Tenant"
    default: "osm"
  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.
  image_pull_policy:
    type: string
    description: |
      ImagePullPolicy configuration for the pod.
      Possible values: always, ifnotpresent, never
    default: always
  debug_mode:
    description: |
      If true, debug mode is activated. It means that the service will not run,
      and instead, the command for the container will be a `sleep infinity`.
      Note: If enabled, security_context will be disabled.
    type: boolean
    default: false
  debug_pubkey:
    description: |
      Public SSH key that will be injected to the application pod.
    type: string
  debug_ro_local_path:
    description: |
      Local full path to the RO project.

      The path will be mounted to the docker image,
      which means changes during the debugging will be saved in your local path.
    type: string
  debug_common_local_path:
    description: |
      Local full path to the COMMON project.

      The path will be mounted to the docker image,
      which means changes during the debugging will be saved in your local path.
    type: string
  security_context:
    description: Enables the security context of the pods
    type: boolean
    default: false
