# Set the repository suite, one of the: 'nightly', 'testing', 'stable', or any other required
{% set REPOSITORY_SUITE = os_env('REPOSITORY_SUITE', 'proposed') %}

#{% set DOMAIN_NAME = os_env('LAB_CONFIG_NAME', 'physical_mcp11_ovs_dpdk') + '.local' %}
{% set LAB_CONFIG_NAME = os_env('LAB_CONFIG_NAME', 'cookied-cicd-bm-ocata-contrail-maas') %}
{% set DOMAIN_NAME = os_env('DOMAIN_NAME', LAB_CONFIG_NAME + '.local') %}
{% set HOSTNAME_CFG01 = os_env('HOSTNAME_CFG01', 'cfg01') %}

{% set ETH1_IP_ADDRESS_CFG01 = os_env('ETH1_IP_ADDRESS_CFG01', '172.16.49.66') %}

---
aliases:
 - &interface_model {{ os_env('INTERFACE_MODEL', 'virtio') }}
 - &cloudinit_meta_data {{ CLOUDINIT_META_DATA }}
 - &cloudinit_user_data_cfg01 {{ CLOUDINIT_USER_DATA_CFG01 }}


template:
  devops_settings:
    env_name: {{ os_env('ENV_NAME', 'cookied-cicd-bm-ocata-contrail-maas_' + REPOSITORY_SUITE + "_" + os_env('BUILD_NUMBER', '')) }}

    address_pools:
      admin-pool01:
        net: {{ os_env('ADMIN_ADDRESS_POOL01', '172.16.49.64/26:26') }}
        params:
          ip_reserved:
            gateway: '172.16.49.65'
            l2_network_device: +61
            default_{{ HOSTNAME_CFG01 }}: {{ ETH1_IP_ADDRESS_CFG01 }}
          ip_ranges:
            dhcp: [+2, -3]
      private-pool01:
        net: {{ os_env('PRIVATE_ADDRESS_POOL01', '10.167.8.0/24:24') }}
        params:
          ip_reserved:
            gateway: +1
            l2_network_device: +1
          ip_ranges:
            dhcp: [+2, -3]

      tenant-pool01:
        net: {{ os_env('TENANT_ADDRESS_POOL01', '10.167.10.0/24:24') }}
        params:
          ip_reserved:
            gateway: +1
            l2_network_device: +1
          ip_ranges:
            dhcp: [+2, -3]

      external-pool01:
        net: {{ os_env('EXTERNAL_ADDRESS_POOL01', '172.17.42.192/26:26') }}
        params:
          ip_reserved:
            gateway: +1
            l2_network_device: -2
          ip_ranges:
            dhcp: [+2, -3]

    groups:

      - name: default
        driver:
          name: devops.driver.libvirt
          params:
            connection_string: !os_env CONNECTION_STRING, qemu:///system
            storage_pool_name: !os_env STORAGE_POOL_NAME, default
            stp: False
            hpet: False
            enable_acpi: true
            use_host_cpu: !os_env DRIVER_USE_HOST_CPU, true

        network_pools:
          admin: admin-pool01

        l2_network_devices:
          admin:
            address_pool: admin-pool01
            dhcp: false
            forward:
              mode: bridge
            parent_iface:
              phys_dev: !os_env LAB_MANAGEMENT_IFACE
          private:
            address_pool: private-pool01
            dhcp: false
            forward:
              mode: bridge
            parent_iface:
              phys_dev: !os_env LAB_CONTROL_IFACE

        group_volumes:
         - name: cfg01_day01_image               # Pre-configured day01 image
           source_image: {{ os_env('IMAGE_PATH_CFG01_DAY01') }} # http://images.mirantis.com/cfg01-day01.qcow2 or fallback to IMAGE_PATH1604
           format: qcow2

        nodes:
          - name: {{ HOSTNAME_CFG01 }}
            role: salt_master
            params:
              vcpu: !os_env SLAVE_NODE_CPU, 4
              memory: !os_env SLAVE_NODE_MEMORY, 12288
              boot:
                - hd
              volumes:
                - name: system
                  capacity: !os_env NODE_VOLUME_SIZE, 150
                  backing_store: cfg01_day01_image
                  format: qcow2
                - name: config
                  capacity: 1
                  format: raw
                  device: cdrom
                  bus: ide

              interfaces:
                - label: ens3
                  l2_network_device: admin
                  interface_model: *interface_model
                - label: ens4
                  l2_network_device: private
                  interface_model: *interface_model

              network_config:
                ens3:
                  networks:
                    - admin
                ens4:
                  networks:
                    - private
