---
- name: Ensure localhost in /etc/hosts
  lineinfile:
    dest: /etc/hosts
    regexp: "^127.0.0.1.*"
    line: "127.0.0.1 localhost"
    state: present
  become: True

# NOTE(mgoddard): Ubuntu may include a line in /etc/hosts that makes the local
# hostname and fqdn point to 127.0.1.1. This can break
# RabbitMQ, which expects the hostname to resolve to the API network address.
# Remove the troublesome entry.
# see https://bugs.launchpad.net/kolla-ansible/+bug/1837699
# and https://bugs.launchpad.net/kolla-ansible/+bug/1862739
- name: Ensure hostname does not point to 127.0.1.1 in /etc/hosts
  lineinfile:
    dest: /etc/hosts
    regexp: "^127.0.1.1\\b.*\\s{{ ansible_facts.hostname }}\\b"
    state: absent
  become: True

- name: Generate /etc/hosts for all of the nodes
  blockinfile:
    dest: /etc/hosts
    marker: "# {mark} ANSIBLE GENERATED HOSTS"
    block: |
        {% for host in etc_hosts_hosts %}
        {% if hostvars[host].internal_net_name in hostvars[host].network_interfaces %}
        {% set hostnames = [hostvars[host].ansible_facts.nodename, hostvars[host].ansible_facts.hostname] %}
        {{ hostvars[host].internal_net_name | net_ip(inventory_hostname=host) }} {{ hostnames | unique | join(' ') }}
        {% endif %}
        {% endfor %}
  become: True
  when:
    # Skip hosts that do not have a valid internal network interface.
    - internal_net_name in network_interfaces

# NOTE(osmanlicilegi): The distribution might come with cloud-init installed, and manage_etc_hosts
# configuration enabled. If so, it will override the file /etc/hosts from cloud-init templates at
# every boot, which will break RabbitMQ. To prevent this happens, first we check whether cloud-init
# has been installed, and then set manage_etc_hosts to false.
- name: Check whether cloud-init has been installed, and ensure manage_etc_hosts is disabled
  block:
    - name: Ensure /etc/cloud/cloud.cfg exists
      stat:
        path: /etc/cloud/cloud.cfg
      register: cloud_init

    - name: Disable cloud-init manage_etc_hosts
      copy:
        content: "manage_etc_hosts: false"
        dest: /etc/cloud/cloud.cfg.d/99-kolla.cfg
        mode: "0660"
      when: cloud_init.stat.exists
  become: True
