# 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
##

name: mariadb-k8s
summary: MariaDB is a popular database server made by the developers of MySQL.
docs: https://discourse.charmhub.io/t/mariadb-documentation-overview/4116
maintainers:
  - OSM Charmers <osm-charmers@lists.launchpad.net>
description: >
  MariaDB Server is one of the most popular database servers in the world.
  It's made by the original developers of MySQL and guaranteed to stay open
  source. Notable users include Wikipedia, WordPress.com and Google.
  https://mariadb.org/
tags:
  - database
  - openstack
provides:
  mysql:
    interface: mysql
series:
  - kubernetes
storage:
  database:
    type: filesystem
    location: /var/lib/mysql
deployment:
  type: stateful
  service: cluster
