# Copyright (C) 2018  AT&T Intellectual Property.  All rights reserved.
#
# 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.

dependencies:
  - name: common
    version: ~5.x-0
    repository: '@local'
  - name: mariadb-galera
    version: ~5.x-0
    repository: '@local'
    condition: global.mariadbGalera.localCluster
  - name: mariadb-init
    version: ~5.x-0
    repository: '@local'
    condition: not global.mariadbGalera.localCluster
