From 01d2e2e33162c4ea0e30809d3d6aa21e85df7647 Mon Sep 17 00:00:00 2001
From: "Michal (inc0) Jastrzebski" <inc007@gmail.com>
Date: Thu, 15 Sep 2016 03:30:28 +0000
Subject: [PATCH] Generate full /etc/hosts on every node

Since compute nodes needs to resolve each other, and controller nodes
needs to resolve each other, let everyone resolve everyone.

Change-Id: I1ee117bdb2d71d48a064c4d317b53a1500bdd753
Closes-Bug: #1623669
---
 .../baremetal/tasks/append_to_etc_hosts.yml   | 17 ----------
 ansible/roles/baremetal/tasks/pre-install.yml | 33 +++++--------------
 2 files changed, 9 insertions(+), 41 deletions(-)
 delete mode 100644 ansible/roles/baremetal/tasks/append_to_etc_hosts.yml

diff --git a/ansible/roles/baremetal/tasks/append_to_etc_hosts.yml b/ansible/roles/baremetal/tasks/append_to_etc_hosts.yml
deleted file mode 100644
index c577d2fe2c..0000000000
--- a/ansible/roles/baremetal/tasks/append_to_etc_hosts.yml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-- name: get real node hostname
-  shell: echo $(hostname)
-  register: real_node_hostname
-  delegate_to: "{{ control_node }}"
-
-- name: get real node ip
-  shell: ip -4 addr show "{{ hostvars[control_node]['api_interface'] }}" | grep -oP "(?<=inet )[\d\.]+(?=/)"
-  register: real_node_ip
-  delegate_to: "{{ control_node }}"
-
-- name: Insert hosts entries for all kolla-ansible hosts
-  lineinfile:
-    dest=/etc/hosts
-    line="{{ real_node_ip.stdout }} {{ real_node_hostname.stdout.split('.')[0] }} {{ real_node_hostname.stdout }} {{ '#' }}a_kolla_ansible_host"
-    insertafter=".*kolla-ansible\ hosts"
-    state=present
diff --git a/ansible/roles/baremetal/tasks/pre-install.yml b/ansible/roles/baremetal/tasks/pre-install.yml
index 8a0f483146..43993229ab 100644
--- a/ansible/roles/baremetal/tasks/pre-install.yml
+++ b/ansible/roles/baremetal/tasks/pre-install.yml
@@ -20,30 +20,15 @@
   become: True
   when: customize_etc_hosts | bool == True
 
-- name: Remove all previous kolla-ansible hosts entries to prevent cruft
-  lineinfile:
-    dest=/etc/hosts
-    regexp="{{ '#' }}a_kolla-ansible_host"
-    state=absent
-  become: True
-  when: customize_etc_hosts | bool == True
-
-- name: Insert a comment after EOF to put our entries under, IF it is not already present
-  lineinfile:
-    dest=/etc/hosts
-    regexp="{{ '#' }}kolla-ansible hosts"
-    line="{{ '#' }}kolla-ansible hosts"
-    insertafter=EOF
-    state=present
-  become: True
-  when: customize_etc_hosts | bool == True
-
-- include: append_to_etc_hosts.yml
-  with_inventory_hostnames: control
-  loop_control:
-    loop_var: control_node
-  become: True
-  when: customize_etc_hosts | bool == True
+- name: Generate etc/hosts
+  blockinfile:
+      dest: /etc/hosts
+      marker: "# {mark} ANSIBLE GENERATED HOSTS"
+      block: |
+          {% for host in groups['all'] %}
+          {{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }} {{ hostvars[host]['ansible_hostname'] }}
+          {% endfor %}
+  when: customize_etc_hosts | bool
 
 - name: ensure sudo group is present
   group: name=sudo state=present