# 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:
  vca_host:
    type: string
    description: "The VCA host."
    default: "admin"
  vca_port:
    type: int
    description: "The VCA port."
    default: 17070
  vca_user:
    type: string
    description: "The VCA user name."
    default: "admin"
  vca_password:
    type: string
    description: "The VCA user password."
    default: "secret"
  vca_pubkey:
    type: string
    description: "The VCA public key."
    default: "secret"
  vca_cacert:
    type: string
    description: "The VCA cacert."
    default: ""
  vca_apiproxy:
    type: string
    description: "The VCA api proxy (native charms)"
    default: ""
  vca_cloud:
    type: string
    description: "The VCA lxd cloud name"
    default: "localhost"
  vca_k8s_cloud:
    type: string
    description: "The VCA K8s cloud name"
    default: "k8scloud"
  database_commonkey:
    description: Database common key
    type: string
    default: osm
  log_level:
    description: "Log Level"
    type: string
    default: "INFO"
