---
- import_playbook: dell-compute-node-inventory.yml

- name: Ensure baremetal compute nodes are PXE booted
  hosts: baremetal-compute
  gather_facts: no
  vars:
    controller_host: "{{ groups['controllers'][0] }}"
  tasks:
    - name: Ensure ipmitool is installed
      yum:
        name: ipmitool
        state: installed
      become: True
      run_once: True
      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) }}"

    - name: Ensure baremetal compute nodes are powered off
      command: ipmitool -U {{ ipmi_username }} -P {{ ipmi_password }} -H {{ ipmi_address }} -I lanplus chassis power off
      delegate_to: "{{ controller_host }}"
      register: result
      failed_when:
        - result is failed
        # Some BMCs complain if the node is already powered off.
        - "'Command not supported in present state' not in result.stderr"
      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) }}"

    - name: Pause to prevent overwhelming BMCs
      pause:
        seconds: 5

    - name: Ensure baremetal compute nodes are set to boot via PXE
      command: ipmitool -U {{ ipmi_username }} -P {{ ipmi_password }} -H {{ ipmi_address }} -I lanplus chassis bootdev pxe
      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) }}"

    - name: Pause to prevent overwhelming BMCs
      pause:
        seconds: 5

    - name: Ensure baremetal compute nodes are powered on
      command: ipmitool -U {{ ipmi_username }} -P {{ ipmi_password }} -H {{ ipmi_address }} -I lanplus chassis power on
      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) }}"
