---
# Facts may not be available for the Ansible control host, so read the OS
# release manually.
- name: Check the OS release
  local_action:
    module: shell . /etc/os-release && echo $ID
  changed_when: False
  register: console_allocation_os_release

- name: Include RedHat family-specific variables
  include_vars: "RedHat.yml"
  when: console_allocation_os_release.stdout in ['centos', 'fedora', 'rhel']

- name: Include Debian family-specific variables
  include_vars: "Debian.yml"
  when: console_allocation_os_release.stdout in ['debian', 'ubuntu']

# Note: Currently we install these using the system package manager rather than
# pip to a virtualenv. This is because Yum is required elsewhere and cannot
# easily be installed in a virtualenv.
- name: Ensure package dependencies are installed
  local_action:
    module: package
    name: "{{ item }}"
    state: installed
    use: "{{ console_allocation_package_manager }}"
  become: True
  with_items: "{{ console_allocation_package_dependencies }}"
  run_once: True

- name: Validate allocation pool start
  vars:
    port: "{{ console_allocation_pool_start | int(default=-1) }}"
  fail:
    msg: >-
      You must must define an console_allocation_pool_start. This should
      be a valid TCP port.
  when: >-
    console_allocation_pool_end is none or
    port | int < 0 or port | int > 65535

- name: Validate allocation pool end
  vars:
    port: "{{ console_allocation_pool_end | int(default=-1) }}"
  fail:
    msg: >-
      You must must define an console_allocation_pool_end. This should
      be a valid TCP port.
  when: >-
    console_allocation_pool_end is none or
    port | int < 0 or port | int > 65535

- name: Validate that allocation start is less than allocation end
  fail:
    msg: >-
      console_allocation_start and console_allocation_end define a range
      of TCP ports. You have defined a range with a start that is less than
      the end
  when:
    - (console_allocation_pool_start | int) > (console_allocation_pool_end | int)

- name: Ensure Ironic serial console ports are allocated
  local_action:
    module: console_allocation
    allocation_file: "{{ console_allocation_filename }}"
    nodes: "{{ console_allocation_ironic_nodes }}"
    allocation_pool_start: "{{ console_allocation_pool_start }}"
    allocation_pool_end: "{{ console_allocation_pool_end }}"
  register: result

- name: Register a fact containing the console allocation result
  set_fact:
    console_allocation_result: "{{ result }}"
