From 0b24a0f2f0880c35368581e3acc529672da665f8 Mon Sep 17 00:00:00 2001 From: Mark Goddard Date: Fri, 27 Sep 2019 09:20:44 +0100 Subject: [PATCH] Remove /etc/hosts entries pointing hostname to localhost and prevent cloud-init to manage /etc/hosts 1) Ubuntu includes a line in /etc/hosts that makes the local hostname and nodename (if different) point to 127.0.1.1. This can break RabbitMQ, which expects the hostname to resolve to the API network address. 2) 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. This change fixes these issues. Change-Id: I53261d0403b983ab419bd44e705b89f7b7a1c316 Closes-Bug: #1837699 --- ansible/roles/baremetal/tasks/pre-install.yml | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/ansible/roles/baremetal/tasks/pre-install.yml b/ansible/roles/baremetal/tasks/pre-install.yml index f29b62ea22..61387beb71 100644 --- a/ansible/roles/baremetal/tasks/pre-install.yml +++ b/ansible/roles/baremetal/tasks/pre-install.yml @@ -16,6 +16,18 @@ become: True when: customize_etc_hosts | bool +# NOTE(mgoddard): Ubuntu includes a line in /etc/hosts that makes the local +# hostname and nodename (if different) point to 127.0.1.1. This can break +# RabbitMQ, which expects the hostname to resolve to the API network address. +# Remove these troublesome entries. +- name: Ensure hostname does not point to loopback in /etc/hosts + lineinfile: + dest: /etc/hosts + regexp: "^127.\\d+.\\d+.\\d+(\\s+{{ ansible_nodename }})?\\s+{{ ansible_hostname }}$" + state: absent + become: True + when: customize_etc_hosts | bool + - name: Generate /etc/hosts for all of the nodes blockinfile: dest: /etc/hosts @@ -35,6 +47,26 @@ - inventory_hostname not in groups['bifrost'] or 'ansible_' + hostvars[inventory_hostname]['api_interface'] in hostvars[inventory_hostname] +# 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 + when: customize_etc_hosts | bool + - name: Ensure sudo group is present group: name: sudo