# 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:
  advertised-hostname:
    description: MongoDB Hostname
    type: string
    default: mongodb-k8s
  advertised-port:
    description: MongoDB port
    type: int
    default: 27017
  replica-set:
    description: Mongo Replica-set name
    type: string
    default: rs0
  namespace:
    description: Kubernetes namespace
    type: string
    default: osm
  service-name:
    description: Headless service name
    type: string
    default: mongodb-k8s-endpoints
  cluster-domain:
    description: Cluster domain
    type: string
    default: cluster.local
  enable-sidecar:
    description: Enable sidecar
    type: boolean
    default: false
  mongodb-image:
    type: string
    description: OCI image
    default: rocks.canonical.com:443/mongo:latest
  sidecar-image:
    type: string
    description: OCI image
    default: rocks.canonical.com:443/cvallance/mongo-k8s-sidecar:latest
