# Copyright (c) 2023 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.

dependency:
  name: galaxy
driver:
  name: docker
platforms:
  - name: ${MOLECULE_SCENARIO_NAME}
    image: geerlingguy/docker-${MOLECULE_DISTRO:-ubuntu2004}-ansible:latest
    command: ${MOLECULE_DOCKER_COMMAND:-""}
    privileged: true
    cgroupns_mode: host
    pre_build_image: true
    purge_networks: true
    dns_servers:
      - 1.1.1.1
    docker_networks:
      - name: mgmt
        ipam_config:
          - subnet: 10.96.240.0/24
            gateway: 10.96.240.1
      - name: public
        ipam_config:
          - subnet: 10.96.250.0/24
            gateway: 10.96.250.1
    networks:
      - name: mgmt
      - name: public
    published_ports:
      - 80:80
      - 443:443
    security_opts:
      - apparmor=unconfined
    volumes:
      - /dev:/dev
      - /lib/modules:/lib/modules:ro
      - /sys/fs/cgroup:/sys/fs/cgroup:rw
      - /usr/src:/usr/src:ro
    groups:
      - controllers
      - cephs
      - computes
provisioner:
  name: ansible
  config_options:
    connection:
      pipelining: true
    tags:
      skip: >-
        sysctl,
        ethtool
  inventory:
    group_vars:
      all:
        # Ceph
        ceph_fsid: ${MOLECULE_CEPH_FSID:-"d1f9e453-f13a-4d30-9ab1-e5ae1d87b67f"}
        ceph_conf_overrides:
          - section: global
            option: osd crush chooseleaf type
            value: 0
          - section: mon
            option: auth allow insecure global id reclaim
            value: false
        # Kubernetes
        kubernetes_keepalived_interface: eth0
        kubernetes_keepalived_vrid: 42
        kubernetes_keepalived_vip: 10.96.240.10
        kubernetes_hostname: 10.96.240.10
        # CNI
        cilium_helm_values:
          operator:
            replicas: 1
        # CSI
        csi_driver: ${MOLECULE_CSI_DRIVER:-"local-path-provisioner"}
        ceph_csi_rbd_helm_values:
          provisioner:
            replicaCount: 1
        # Percona XtraDB Cluster
        percona_xtradb_cluster_spec:
          allowUnsafeConfigurations: true
          pxc:
            size: 1
          haproxy:
            size: 1
        # Common
        domain_name: "{{ (lookup('env', 'HOST_IP') | default(ansible_default_ipv4.address, true)).replace('.', '-') }}.nip.io"
        openstack_helm_endpoints_region_name: RegionOne
      cephs:
        ceph_osd_devices:
          - "/dev/ceph-{{ inventory_hostname_short }}-osd0/data"
          - "/dev/ceph-{{ inventory_hostname_short }}-osd1/data"
          - "/dev/ceph-{{ inventory_hostname_short }}-osd2/data"
  # options:
  #   inventory: "${MOLECULE_EPHEMERAL_DIRECTORY}/workspace"
  # inventory:
  #   links:
  #     host_vars: "${MOLECULE_SCENARIO_DIRECTORY}/host_vars"
  #     group_vars: "${MOLECULE_SCENARIO_DIRECTORY}/group_vars"
verifier:
  name: ansible
