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