# 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:
    client-port:
        description: Zookeeper client port
        type: int
        default: 2181
    server-port:
        description: Zookeeper server port
        type: int
        default: 2888
    leader-election-port:
        description: Zookeeper leader-election port
        type: int
        default: 3888
    zookeeper-units:
        description: Zookeeper zookeeper-units
        type: int
        default: 1
    image:
        description: Zookeeper image to use
        type: string
        default: rocks.canonical.com:443/k8s.gcr.io/kubernetes-zookeeper:1.0-3.4.10
