# Copyright (c) 2022 VEXXHOST, Inc.
#
# 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.

- hosts: controllers[0]
  become: true
  roles:
    - role: cert_manager
      tags:
        - cert-manager

    - role: cluster_issuer
      tags:
        - cluster-issuer

    - role: ingress_nginx
      tags:
        - ingress-nginx

    - role: rabbitmq_cluster_operator
      tags:
        - rabbitmq-cluster-operator

    - role: percona_xtradb_cluster_operator
      tags:
        - percona-xtradb-cluster-operator

    - role: percona_xtradb_cluster
      tags:
        - percona-xtradb-cluster

    - role: node_feature_discovery
      tags:
        - node-feature-discovery

    - role: kube_prometheus_stack
      tags:
        - kube-prometheus-stack

    - role: prometheus_ethtool_exporter
      tags:
        - prometheus-ethtool-exporter

    - role: ipmi_exporter
      tags:
        - ipmi-exporter

    - role: prometheus_pushgateway
      tags:
        - prometheus-pushgateway

    - role: keepalived
      tags:
        - keepalived

    - role: memcached
      tags:
        - memcached

    - role: keystone
      tags:
        - keystone

    - role: barbican
      tags:
        - barbican

    - role: ceph_provisioners
      when: atmosphere_ceph_enabled | default(true)
      tags:
        - ceph-provisioners

    - role: glance
      tags:
        - glance

    - role: cinder
      tags:
        - cinder

    - role: placement
      tags:
        - placement

    - role: openvswitch
      tags:
        - openvswitch

    - role: libvirt
      tags:
        - libvirt

    - role: coredns
      tags:
        - coredns

    - role: nova
      tags:
        - nova

    - role: neutron
      tags:
        - neutron

    - role: senlin
      tags:
        - senlin

    # NOTE(mnaser): This is disabled out of the box until we have a native way
    #               of configuring it with a pre-configured backend out of the
    #               box.
    # - role: designate
    #   tags:
    #     - designate

    - role: heat
      tags:
        - heat

    - role: octavia
      tags:
        - octavia

    - role: magnum
      tags:
        - magnum

    - role: horizon
      tags:
        - horizon

    - role: openstack_exporter
      tags:
        - openstack-exporter

- hosts: controllers
  become: true
  gather_facts: false
  roles:
    - role: openstack_cli
      tags:
        - openstack-cli
