# 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:
  user:
    type: string
    description: 'The database user name.'
    default: 'mysql'
  password:
    type: string
    description: 'The database user password.'
    default: 'password'
  database:
    type: string
    description: 'The database name.'
    default: 'database'
  root_password:
    type: string
    description: 'The database root password.'
    default: 'root'
  mysql_port:
    type: string
    description: 'The mysql port'
    default: '3306'
  query-cache-type:
    default: "OFF"
    type: string
    description: "Query cache is usually a good idea, \
      but can hurt concurrency. \
      Valid values are \"OFF\", \"ON\", or \"DEMAND\"."
  query-cache-size:
    default: !!int "0"
    type: int
    description: "Override the computed version from dataset-size. \
      Still works if query-cache-type is \"OFF\" since sessions \
      can override the cache type setting on their own."
  ha-mode:
    type: boolean
    description: Indicates if the charm should have the capabilities to scale
    default: false
  image:
    type: string
    description: OCI image
    default: rocks.canonical.com:443/mariadb/server:10.3
  ha-image:
    type: string
    description: OCI image
    default: rocks.canonical.com:443/canonicalosm/galera-mysql:latest
