
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
145 lines
4.6 KiB
YAML
145 lines
4.6 KiB
YAML
---
|
|
# NOTE: raw install is required to support cloud images which do not have python installed
|
|
- name: "Install python2"
|
|
become: True
|
|
raw: "yum install -y python || (apt-get update && apt-get install -y python2.7)"
|
|
|
|
- name: Gather facts
|
|
setup:
|
|
|
|
- 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
|
|
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
|
|
marker: "# {mark} ANSIBLE GENERATED HOSTS"
|
|
block: |
|
|
{% for host in groups['baremetal'] %}
|
|
{% set api_interface = hostvars[host]['api_interface'] %}
|
|
{% if host not in groups['bifrost'] or 'ansible_' + api_interface in hostvars[host] %}
|
|
{% set hostnames = [hostvars[host]['ansible_nodename'], hostvars[host]['ansible_hostname']] %}
|
|
{{ hostvars[host]['ansible_' + api_interface]['ipv4']['address'] }} {{ hostnames | unique | join(' ') }}
|
|
{% endif %}
|
|
{% endfor %}
|
|
become: True
|
|
when:
|
|
- customize_etc_hosts | bool
|
|
# Skip hosts in the bifrost group that do not have a valid api_interface.
|
|
- 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
|
|
state: present
|
|
become: True
|
|
|
|
- name: Ensure kolla group is present
|
|
group:
|
|
name: "{{ kolla_group }}"
|
|
state: present
|
|
become: True
|
|
when: create_kolla_user | bool
|
|
|
|
- block:
|
|
- block:
|
|
- name: Install apt packages
|
|
apt:
|
|
update_cache: yes
|
|
become: True
|
|
|
|
- name: Install ca certs
|
|
package:
|
|
name: "{{ item }}"
|
|
state: latest
|
|
become: True
|
|
with_items:
|
|
- ca-certificates
|
|
- apt-transport-https
|
|
|
|
- name: Ensure apt sources list directory exists
|
|
file:
|
|
path: /etc/apt/sources.list.d
|
|
state: directory
|
|
recurse: yes
|
|
become: True
|
|
|
|
- name: Install docker apt gpg key
|
|
apt_key:
|
|
url: "{{ docker_apt_url }}/{{ docker_apt_key_file }}"
|
|
id: "{{ docker_apt_key_id }}"
|
|
state: present
|
|
become: True
|
|
|
|
- name: Enable docker apt repository
|
|
apt_repository:
|
|
repo: "{{ docker_apt_repo }}"
|
|
filename: docker
|
|
become: True
|
|
when: ansible_os_family == 'Debian'
|
|
|
|
- block:
|
|
- name: Ensure yum repos directory exists
|
|
file:
|
|
path: /etc/yum.repos.d/
|
|
state: directory
|
|
recurse: yes
|
|
become: True
|
|
|
|
- name: Enable docker yum repository
|
|
yum_repository:
|
|
name: docker
|
|
description: Docker main Repository
|
|
baseurl: "{{ docker_yum_baseurl }}"
|
|
gpgcheck: "{{ docker_yum_gpgcheck | bool }}"
|
|
gpgkey: "{{ docker_yum_gpgkey }}"
|
|
become: True
|
|
|
|
- name: Install docker rpm gpg key
|
|
rpm_key:
|
|
state: present
|
|
key: "{{ docker_yum_url }}/gpg"
|
|
become: True
|
|
when: docker_yum_gpgcheck | bool
|
|
when: ansible_os_family == 'RedHat'
|
|
when: enable_docker_repo | bool
|