aboutsummaryrefslogtreecommitdiff
path: root/ansible/roles/baremetal/tasks/install.yml
blob: adb904370fb02090a4f77d5ab1f3b21000557bb4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
---
- name: Update apt cache
  apt:
    update_cache: yes
  become: True
  when: ansible_facts.os_family == 'Debian'

# TODO(inc0): Gates don't seem to have ufw executable, check for it instead of ignore errors
- block:
    - name: Set firewall default policy
      become: True
      ufw:
        state: disabled
        policy: allow
      when: ansible_facts.os_family == 'Debian'
      ignore_errors: yes

    - name: Check if firewalld is installed
      command: rpm -q firewalld
      register: firewalld_check
      changed_when: false
      failed_when: firewalld_check.rc > 1
      args:
        warn: false
      when: ansible_facts.os_family == 'RedHat'

    - name: Disable firewalld
      become: True
      service:
        name: "{{ item }}"
        enabled: false
        state: stopped
      with_items:
        - firewalld
      when:
        - ansible_facts.os_family == 'RedHat'
        - firewalld_check.rc == 0
  when: disable_firewall | bool

# Upgrading docker engine may cause containers to stop. Take a snapshot of the
# running containers prior to a potential upgrade of Docker.

- name: Check which containers are running
  command: docker ps -f 'status=running' -q
  become: true
  # If Docker is not installed this command may exit non-zero.
  failed_when: false
  changed_when: false
  register: running_containers

# APT starts Docker engine right after installation, which creates
# iptables rules before we disable iptables in Docker config

- name: Check if docker systemd unit exists
  stat:
    path: /etc/systemd/system/docker.service
  register: docker_unit_file

- name: Mask the docker systemd unit on Debian/Ubuntu
  file:
    src: /dev/null
    dest: /etc/systemd/system/docker.service
    owner: root
    group: root
    state: link
  become: true
  when:
    - ansible_facts.os_family == 'Debian'
    - not docker_unit_file.stat.exists

- name: Install apt packages
  package:
    name: "{{ (debian_pkg_install | join(' ')).split() }}"
    state: present
  become: True
  when: ansible_facts.os_family == 'Debian'
  register: apt_install_result

- name: Install deltarpm packages
  package:
    name: drpm
    state: present
    update_cache: yes
  become: True
  when: ansible_facts.os_family == 'RedHat'

- name: Install RPM packages
  package:
    name: "{{ (redhat_pkg_install | join(' ')).split() }}"
    state: present
    update_cache: yes
  become: True
  when: ansible_facts.os_family == 'RedHat'
  register: rpm_install_result

# If any packages were updated, and any containers were running, wait for the
# daemon to come up and start all previously running containers.

- block:
    # At some point (at least on CentOS 7) Docker CE stopped starting
    # automatically after an upgrade from legacy docker . Start it manually.
    - name: Start docker
      systemd:
        name: docker
        state: started
        enabled: yes
        masked: no
      become: True

    - name: Wait for Docker to start
      command: docker info
      become: true
      changed_when: false
      register: result
      until: result is success
      retries: 6
      delay: 10

    - name: Ensure containers are running after Docker upgrade
      command: "docker start {{ running_containers.stdout }}"
      become: true
  when:
    - install_result is changed
    - running_containers.rc == 0
    - running_containers.stdout != ''
  vars:
    install_result: "{{ rpm_install_result if ansible_facts.os_family == 'RedHat' else apt_install_result }}"

- name: Install latest pip in the virtualenv
  pip:
    # NOTE(hrw) pip 19.3 is first version complaining about being run with Python 2
    name: pip>19.3
    virtualenv: "{{ virtualenv }}"
    virtualenv_site_packages: "{{ virtualenv_site_packages }}"
    virtualenv_python: "python{{ host_python_version }}"
  become: True
  when: virtualenv is not none

- name: Install docker SDK for python
  pip:
    # NOTE(hrw) docker 2.4.2 is in kolla-ansible requirements
    # NOTE(mnasiadka): docker 5.0.0 lacks six in deps but requires it
    name: docker>=2.4.2,<5.0.0
    executable: "{{ virtualenv is none | ternary('pip3', omit) }}"
    virtualenv: "{{ virtualenv is none | ternary(omit, virtualenv) }}"
    virtualenv_site_packages: "{{ virtualenv is none | ternary(omit, virtualenv_site_packages) }}"
    virtualenv_python: "{{ virtualenv is none | ternary(omit, 'python' ~ host_python_version) }}"
  become: True

- name: Remove packages
  package:
    name: "{{ (ubuntu_pkg_removals | join(' ')).split() }}"
    state: absent
  become: True
  when: ansible_facts.os_family == 'Debian'

- name: Remove packages
  package:
    name: "{{ (redhat_pkg_removals | join(' ')).split() }}"
    state: absent
  become: True
  when: ansible_facts.os_family == 'RedHat'