---
- name: Retrieve current hostsfile contents
  ansible.builtin.command:
    cmd: cat /etc/hosts
  changed_when: false
  register: _existing_hostsfile_raw

- name: Assemble hostsfile lines
  vars:
    _hostsfile_lines: []
  ansible.builtin.set_fact:
    _hostsfile_lines: "{{ _hostsfile_lines + [hostvars[item].skylab_cluster.address.internal | ansible.netcommon.ipaddr('address') + '   ' + item + '.local ' + hostvars[item].skylab_legacy_names | default([]) | join(' ')] }}"
  loop: "{{ groups.cluster }}"

- name: Configure local hostsfile
  become: true
  ansible.builtin.lineinfile:
    path: /etc/hosts
    line: "{{ item }}"
    state: present
  loop: "{{ _hostsfile_lines }}"
  loop_control:
    label: "{{ item.partition(' ')[0] }}"

- name: Remove unmanaged hostsfile entries
  become: true
  when: "'localhost' not in item and item not in _hostsfile_lines"
  ansible.builtin.lineinfile:
    path: /etc/hosts
    line: "{{ item }}"
    state: absent
  loop: "{{ _existing_hostsfile_raw.stdout_lines }}"
