# 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."
  vca_port:
    type: int
    description: "The VCA port."
  vca_user:
    type: string
    description: "The VCA user name."
  vca_secret:
    type: string
    description: "The VCA user secret."
  vca_pubkey:
    type: string
    description: "The VCA public key."
  vca_cacert:
    type: string
    description: "The VCA cacert."
  vca_apiproxy:
    type: string
    description: "The VCA api proxy (native charms)"
  vca_cloud:
    type: string
    description: "The VCA lxd cloud name"
  vca_k8s_cloud:
    type: string
    description: "The VCA K8s cloud name"
  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"
  vca_model_config_agent_metadata_url:
    description: The URL of the private stream.
    type: string
  vca_model_config_agent_stream:
    description: |
      The stream to use for deploy/upgrades of agents.
      See additional info below.
    type: string
  vca_model_config_apt_ftp_proxy:
    description: The APT FTP proxy for the model.
    type: string
  vca_model_config_apt_http_proxy:
    description: The APT HTTP proxy for the model.
    type: string
  vca_model_config_apt_https_proxy:
    description: The APT HTTPS proxy for the model.
    type: string
  vca_model_config_apt_mirror:
    description: The APT mirror for the model.
    type: string
  vca_model_config_apt_no_proxy:
    description: The APT no proxy for the model.
    type: string
  vca_model_config_automatically_retry_hooks:
    description: Set the policy on retying failed hooks.
    type: boolean
  vca_model_config_backup_dir:
    description: Backup directory
    type: string
  vca_model_config_cloudinit_userdata:
    description: Cloudinit userdata
    type: string
  vca_model_config_container_image_metadata_url:
    description: |
      Corresponds to 'image-metadata-url' (see below) for cloud-hosted
      KVM guests or LXD containers. Not needed for the localhost cloud.
    type: string
  vca_model_config_container_image_stream:
    description: |
      Corresponds to 'image-stream' (see below) for cloud-hosted KVM
      guests or LXD containers. Not needed for the localhost cloud.
    type: string
  vca_model_config_container_inherit_properties:
    description: |
      Set parameters to be inherited from a machine toits hosted
      containers (KVM or LXD).
    type: string
  vca_model_config_container_networking_method:
    description: |
      The FAN networking mode to use. Default values can be provider-specific.
    type: string
  vca_model_config_default_series:
    description: The default series of Ubuntu to use for deploying charms.
    type: string
  vca_model_config_default_space:
    description: |
      The space used as the default binding when deploying charms.
      Will be "alpha" by default.
    type: string
  vca_model_config_development:
    description: Set whether the model is in development mode.
    type: boolean
  vca_model_config_disable_network_management:
    description: |
      Set whether to give network control to the provider instead
      of Juju controlling configuration.
    type: boolean
  vca_model_config_egress_subnets:
    description: Egress subnets
    type: string
  vca_model_config_enable_os_refresh_update:
    description: |
      Set whether newly provisioned instances should run their
      respective OS's update capability.
    type: boolean
  vca_model_config_enable_os_upgrade:
    description: |
      Set whether newly provisioned instances should run their
      respective OS's upgrade capability.
    type: boolean
  vca_model_config_fan_config:
    description: |
      The FAN overlay and underlay networks in
      CIDR notation (space-separated).
    type: string
  vca_model_config_firewall_mode:
    description: The mode to use for network firewalling.
    type: string
  vca_model_config_ftp_proxy:
    description: |
      The FTP proxy value to configure on instances,
      in the FTP_PROXY environment variable.
    type: string
  vca_model_config_http_proxy:
    description: |
      The HTTP proxy value to configure on instances,
      in the HTTP_PROXY environment variable.
    type: string
  vca_model_config_https_proxy:
    description: |
      The HTTPS proxy value to configure on instances,
      in the HTTPS_PROXY environment variable.
    type: string
  vca_model_config_ignore_machine_addresses:
    description: |
      When true, the machine worker will not look up
      or discover any machine addresses.
    type: boolean
  vca_model_config_image_metadata_url:
    description: |
      The URL at which the metadata used to locate
      OS image ids is located.
    type: string
  vca_model_config_image_stream:
    description: |
      The simplestreams stream used to identify which image
      ids to search when starting an instance.
    type: string
  vca_model_config_juju_ftp_proxy:
    description: The charm-centric FTP proxy value.
    type: string
  vca_model_config_juju_http_proxy:
    description: The charm-centric HTTP proxy value.
    type: string
  vca_model_config_juju_https_proxy:
    description: The charm-centric HTTPS proxy value.
    type: string
  vca_model_config_juju_no_proxy:
    description: The charm-centric no-proxy value.
    type: string
  vca_model_config_logforward_enabled:
    description: Set whether the log forward function is enabled.
    type: boolean
  vca_model_config_logging_config:
    description: |
      The configuration string to use when configuring Juju agent logging
    type: string
  vca_model_config_lxd_snap_channel:
    description: LXD snap channel
    type: string
  vca_model_config_max_action_results_age:
    description: The maximum aget for status action results entries
    type: string
  vca_model_config_max_action_results_size:
    description: The maximum size for status action results entries
    type: string
  vca_model_config_max_status_history_age:
    description: |
      The maximum age for status history entries before they are pruned,
      in a human-readable time format.
    type: string
  vca_model_config_max_status_history_size:
    description: |
      The maximum size for the status history collection,
      in human-readable memory format.
    type: string
  vca_model_config_net_bond_reconfigure_delay:
    description: Net bond reconfigure delay
    type: int
  vca_model_config_no_proxy:
    description: List of domain addresses not to be proxied (comma-separated).
    type: string
  vca_model_config_provisioner_harvest_mode:
    description: Set what to do with unknown machines.
    type: string
  vca_model_config_proxy_ssh:
    description: |
      Set whether SSH commands should be proxied through the API server.
    type: boolean
  vca_model_config_snap_http_proxy:
    description: The snap-centric HTTP proxy value.
    type: string
  vca_model_config_snap_https_proxy:
    description: The snap-centric HTTPS proxy value.
    type: string
  vca_model_config_snap_store_assertions:
    description: |
      The collection of snap store assertions.
      Each entry should contain the snap store ID.
    type: string
  vca_model_config_snap_store_proxy:
    description: The snap store ID.
    type: string
  vca_model_config_snap_store_proxy_url:
    description: The snap store proxy url
    type: string
  vca_model_config_ssl_hostname_verification:
    description: Set whether SSL hostname verification is enabled.
    type: boolean
  vca_model_config_test_mode:
    description: |
      Set whether the model is intended for testing.
      If true, accessing the charm store does not affect
      statistical data of the store.
    type: boolean
  vca_model_config_transmit_vendor_metrics:
    description: |
      Set whether the controller will send metrics collected from
      this model for use in anonymized aggregate analytics.
    type: boolean
  vca_model_config_update_status_hook_interval:
    description: |
      The run frequency of the update-status hook.
      The value has a random +/- 20% offset applied to avoid hooks
      for all units firing at once. Value change only honoured
      during controller and model creation
      (bootstrap --config and add-model --config).
    type: string
  vca_stablerepourl:
    description: Stable repository URL for Helm charts
    type: string
    default: https://charts.helm.sh/stable
  vca_helm_ca_certs:
    description: CA certificates to validate access to Helm repository
    type: string
    default: ""
  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_lcm_local_path:
    description: |
      Local full path to the LCM 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_n2vc_local_path:
    description: |
      Local full path to the N2VC 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
