--- - 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