---
# This playbook will ensure that all baremetal compute nodes in the
# baremetal-compute ansible group are inspected. The nodes should be in the
# 'manageable' state.

# We install openstacksdk in a virtualenv on one of the controllers, and delegate to
# it when executing the stackhpc.os-ironic-state role.

- name: Ensure dependencies are installed
  hosts: controllers[0]
  gather_facts: true
  vars:
    venv: "{{ virtualenv_path }}/openstacksdk"
  roles:
    - role: stackhpc.openstack.os_openstacksdk
      os_openstacksdk_venv: "{{ venv }}"
      os_openstacksdk_install_epel: "{{ dnf_install_epel }}"
      os_openstacksdk_upper_constraints_file: "{{ openstacksdk_upper_constraints_file }}"

- name: Ensure baremetal compute nodes are inspected in ironic
  hosts: baremetal-compute
  gather_facts: False
  max_fail_percentage: >-
    {{ baremetal_compute_inspect_max_fail_percentage |
       default(baremetal_compute_max_fail_percentage) |
       default(kayobe_max_fail_percentage) |
       default(100) }}
  vars:
    controller_host: "{{ groups['controllers'][0] }}"
    venv: "{{ virtualenv_path }}/openstacksdk"
    ansible_python_interpreter: "{{ venv }}/bin/python"
    # Whether to wait for the state transition to complete.
    baremetal_compute_wait: True
    # Time to wait for state transition to complete, if baremetal_compute_wait
    # is True.
    baremetal_compute_timeout: "{{ inspector_inspection_timeout }}"
  tasks:
    - name: Ensure baremetal compute nodes are inspected in ironic
      os_ironic_inspect:
        auth_type: "{{ openstack_auth_type }}"
        auth: "{{ openstack_auth }}"
        cacert: "{{ openstack_cacert | default(omit, true) }}"
        interface: "{{ openstack_interface | default(omit, true) }}"
        name: "{{ inventory_hostname }}"
        timeout: "{{ baremetal_compute_timeout }}"
        wait: "{{ baremetal_compute_wait }}"
      delegate_to: "{{ controller_host }}"
      vars:
        # NOTE: Without this, the controller's ansible_host variable will not
        # be respected when using delegate_to.
        ansible_host: "{{ hostvars[controller_host].ansible_host | default(controller_host) }}"
