---
- import_role:
    name: service-precheck
  vars:
    service_precheck_services: "{{ ironic_services }}"
    service_name: "{{ project_name }}"

- name: Get container facts
  become: true
  kolla_container_facts:
    container_engine: "{{ kolla_container_engine }}"
    name:
      - ironic_api
      - ironic_inspector
      - ironic_http
      - ironic_prometheus_exporter
  check_mode: false
  register: container_facts

- name: Checking free port for Ironic API
  wait_for:
    host: "{{ api_interface_address }}"
    port: "{{ ironic_api_listen_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts['ironic_api'] is not defined
    - inventory_hostname in groups['ironic-api']

- name: Checking free port for Ironic Inspector
  wait_for:
    host: "{{ api_interface_address }}"
    port: "{{ ironic_inspector_listen_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts['ironic_inspector'] is not defined
    - inventory_hostname in groups['ironic-inspector']

- name: Checking free port for Ironic HTTP server
  wait_for:
    host: "{{ api_interface_address }}"
    port: "{{ ironic_http_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - container_facts['ironic_http'] is not defined
    - inventory_hostname in groups['ironic-http']

- name: Checking free port for Ironic Prometheus Exporter
  wait_for:
    host: "{{ api_interface_address }}"
    port: "{{ ironic_prometheus_exporter_port }}"
    connect_timeout: 1
    timeout: 1
    state: stopped
  when:
    - enable_ironic_prometheus_exporter | bool
    - container_facts['ironic_prometheus_exporter'] is not defined
    - inventory_hostname in groups['ironic-conductor']

- name: Checking ironic-agent files exist for Ironic Inspector
  stat:
    path: "{{ ironic_agent_files_directory }}/ironic/{{ item }}"
  delegate_to: localhost
  run_once: True
  register: result
  failed_when: not result.stat.exists
  when:
    # Only required when Ironic inspector is in use.
    - groups['ironic-inspector'] | length > 0
    - (not ironic_dnsmasq_serve_ipxe | bool and inventory_hostname in groups['ironic-tftp']) or
        (ironic_dnsmasq_serve_ipxe | bool and inventory_hostname in groups['ironic-http'])
  with_items:
    - "ironic-agent.kernel"
    - "ironic-agent.initramfs"

- name: Ensure ironic_dnsmasq_dhcp_ranges is configured
  fail:
    msg: >
      ironic_dnsmasq_dhcp_ranges must be a list
  connection: local
  run_once: True
  when: not ironic_dnsmasq_dhcp_ranges is sequence
