---

- name: Set facts about infra VMs
  gather_facts: false
  hosts: "{{ infra_vm_limit | default('infra-vms') }}"
  tags:
    - always
  tasks:
    - name: Group virtual machines by hypervisor
      group_by:
        key: infra_vms_{{ infra_vm_hypervisor }}
      # FIXME(mgoddard): Is delegate_to necessary?
      delegate_to: "{{ infra_vm_hypervisor }}"
      changed_when: false

- name: Ensure defined infra VMs are deployed
  hosts: hypervisors
  max_fail_percentage: >-
    {{ infra_vm_provision_max_fail_percentage |
       default(kayobe_max_fail_percentage) |
       default(100) }}
  tags:
    - infra-vm-provision
  tasks:
    - import_role:
        name: infra-vms
      vars:
        infra_vm_vms: "{{ groups['infra_vms_' ~ inventory_hostname ] | default([]) }}"

- name: Wait for infra VMs to be accessible
  hosts: "{{ infra_vm_limit | default('infra-vms') }}"
  gather_facts: false
  max_fail_percentage: >-
    {{ infra_vm_provision_max_fail_percentage |
       default(kayobe_max_fail_percentage) |
       default(100) }}
  tags:
    - infra-vm-provision
  tasks:
    - name: Wait for SSH access to the infra VM
      wait_for:
        host: "{{ hostvars[inventory_hostname].ansible_host }}"
        port: 22
        state: started
        # NOTE: Ensure we exceed the 5 minute DHCP timeout of the eth0
        # interface if necessary.
        timeout: 360
      delegate_to: localhost
