summaryrefslogtreecommitdiffstats
path: root/playbooks/common/openshift-cluster/upgrades/etcd/main.yml
blob: 62ea1fe48fff1a10d265b216e2f5e9e1a2ed9e8f (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
---
# For 1.4/3.4 we want to upgrade everyone to etcd-3.0. etcd docs say to
# upgrade from 2.0.x to 2.1.x to 2.2.x to 2.3.x to 3.0.x. While this is a tedius
# task for RHEL and CENTOS it's simply not possible in Fedora unless you've
# mirrored packages on your own because only the GA and latest versions are
# available in the repos. So for Fedora we'll simply skip this, sorry.

- include: ../../evaluate_groups.yml
  tags:
  - always

# We use two groups one for hosts we're upgrading which doesn't include embedded etcd
# The other for backing up which includes the embedded etcd host, there's no need to
# upgrade embedded etcd that just happens when the master is updated.
- name: Evaluate additional groups for upgrade
  hosts: localhost
  connection: local
  become: no
  tasks:
  - name: Evaluate etcd_hosts_to_upgrade
    add_host:
      name: "{{ item }}"
      groups: etcd_hosts_to_upgrade
    with_items: "{{ groups.oo_etcd_to_config if groups.oo_etcd_to_config is defined and groups.oo_etcd_to_config | length > 0 else [] }}"
  - name: Evaluate etcd_hosts_to_backup
    add_host:
      name: "{{ item }}"
      groups: etcd_hosts_to_backup
    with_items: "{{ groups.oo_etcd_to_config if groups.oo_etcd_to_config is defined and groups.oo_etcd_to_config | length > 0 else groups.oo_first_master }}"

- name: Backup etcd before upgrading anything
  include: backup.yml
  vars:
    backup_tag: "pre-upgrade-"
  when: openshift_upgrade_etcd_backup | default(true) | bool

- name: Drop etcdctl profiles
  hosts: etcd_hosts_to_upgrade
  tasks:
  - include: roles/etcd/tasks/etcdctl.yml

- name: Determine etcd version
  hosts: etcd_hosts_to_upgrade
  tasks:
  - name: Record RPM based etcd version
    command: rpm -qa --qf '%{version}' etcd\*
    args:
      warn: no
    register: etcd_rpm_version
    failed_when: false
    when: not openshift.common.is_containerized | bool
  - name: Record containerized etcd version
    command: docker exec etcd_container rpm -qa --qf '%{version}' etcd\*
    register: etcd_container_version
    failed_when: false
    when: openshift.common.is_containerized | bool

# I really dislike this copy/pasta but I wasn't able to find a way to get it to loop
# through hosts, then loop through tasks only when appropriate
- name: Upgrade to 2.1
  hosts: etcd_hosts_to_upgrade
  serial: 1
  vars:
    upgrade_version: '2.1'
  tasks:
  - include: rhel_tasks.yml
    when: etcd_rpm_version.stdout | default('99') | version_compare('2.1','<') and ansible_distribution == 'RedHat' and not openshift.common.is_containerized | bool

- name: Upgrade RPM hosts to 2.2
  hosts: etcd_hosts_to_upgrade
  serial: 1
  vars:
    upgrade_version: '2.2'
  tasks:
  - include: rhel_tasks.yml
    when: etcd_rpm_version.stdout | default('99') | version_compare('2.2','<') and ansible_distribution == 'RedHat' and not openshift.common.is_containerized | bool

- name: Upgrade containerized hosts to 2.2.5
  hosts: etcd_hosts_to_upgrade
  serial: 1
  vars:
    upgrade_version: 2.2.5
  tasks:
  - include: containerized_tasks.yml
    when: etcd_container_version.stdout | default('99') | version_compare('2.2','<') and openshift.common.is_containerized | bool

- name: Upgrade RPM hosts to 2.3
  hosts: etcd_hosts_to_upgrade
  serial: 1
  vars:
    upgrade_version: '2.3'
  tasks:
  - include: rhel_tasks.yml
    when: etcd_rpm_version.stdout | default('99') | version_compare('2.3','<') and ansible_distribution == 'RedHat' and not openshift.common.is_containerized | bool

- name: Upgrade containerized hosts to 2.3.7
  hosts: etcd_hosts_to_upgrade
  serial: 1
  vars:
    upgrade_version: 2.3.7
  tasks:
  - include: containerized_tasks.yml
    when: etcd_container_version.stdout | default('99') | version_compare('2.3','<') and openshift.common.is_containerized | bool

- name: Upgrade RPM hosts to 3.0
  hosts: etcd_hosts_to_upgrade
  serial: 1
  vars:
    upgrade_version: '3.0'
  tasks:
  - include: rhel_tasks.yml
    when: etcd_rpm_version.stdout | default('99') | version_compare('3.0','<') and ansible_distribution == 'RedHat' and not openshift.common.is_containerized | bool

- name: Upgrade containerized hosts to etcd3 image
  hosts: etcd_hosts_to_upgrade
  serial: 1
  vars:
    upgrade_version: 3.0.14
  tasks:
  - include: containerized_tasks.yml
    when: etcd_container_version.stdout | default('99') | version_compare('3.0','<') and openshift.common.is_containerized | bool

- name: Upgrade fedora to latest
  hosts: etcd_hosts_to_upgrade
  serial: 1
  tasks:
  - include: fedora_tasks.yml
    when: ansible_distribution == 'Fedora' and not openshift.common.is_containerized | bool

- name: Backup etcd
  include: backup.yml
  vars:
    backup_tag: "post-3.0-"
  when: openshift_upgrade_etcd_backup | default(true) | bool