blob: 0a2ac7f1a13714dfbc927d364af9ee9688f907b1 (
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: Check if the master has embedded etcd
hosts: localhost
connection: local
become: no
gather_facts: no
tags:
- always
tasks:
- fail:
msg: "Migration of an embedded etcd is not supported. Please, migrate the embedded etcd into an external etcd first."
when:
- groups.oo_etcd_to_config | default([]) | length == 0
- name: Run pre-checks
hosts: oo_etcd_to_migrate
tasks:
- import_role:
name: etcd
tasks_from: migrate.pre_check.yml
vars:
etcd_peer: "{{ ansible_default_ipv4.address }}"
# TODO: This will be different for release-3.6 branch
- name: Prepare masters for etcd data migration
hosts: oo_masters_to_config
tasks:
- set_fact:
master_services:
- "{{ openshift_service_type + '-master-controllers' }}"
- "{{ openshift_service_type + '-master-api' }}"
- debug:
msg: "master service name: {{ master_services }}"
- name: Stop masters
service:
name: "{{ item }}"
state: stopped
with_items: "{{ master_services }}"
- name: Backup v2 data
hosts: oo_etcd_to_migrate
gather_facts: no
roles:
- role: openshift_facts
post_tasks:
- import_role:
name: etcd
tasks_from: backup.yml
vars:
r_etcd_common_backup_tag: pre-migration
r_etcd_common_backup_sufix_name: "{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}"
- name: Gate on etcd backup
hosts: localhost
connection: local
become: no
tasks:
- set_fact:
etcd_backup_completed: "{{ hostvars
| lib_utils_oo_select_keys(groups.oo_etcd_to_migrate)
| lib_utils_oo_collect('inventory_hostname', {'r_etcd_common_backup_complete': true}) }}"
- set_fact:
etcd_backup_failed: "{{ groups.oo_etcd_to_migrate | difference(etcd_backup_completed) | list }}"
- fail:
msg: "Migration cannot continue. The following hosts did not complete etcd backup: {{ etcd_backup_failed | join(',') }}"
when:
- etcd_backup_failed | length > 0
- name: Stop etcd
hosts: oo_etcd_to_migrate
gather_facts: no
pre_tasks:
- import_role:
name: etcd
tasks_from: disable_etcd.yml
- name: Migrate data on first etcd
hosts: oo_etcd_to_migrate[0]
gather_facts: no
tasks:
- import_role:
name: etcd
tasks_from: migrate.yml
vars:
etcd_peer: "{{ openshift.common.ip }}"
etcd_url_scheme: "https"
etcd_peer_url_scheme: "https"
- name: Clean data stores on remaining etcd hosts
hosts: oo_etcd_to_migrate[1:]
gather_facts: no
tasks:
- import_role:
name: etcd
tasks_from: clean_data.yml
vars:
etcd_peer: "{{ openshift.common.ip }}"
etcd_url_scheme: "https"
etcd_peer_url_scheme: "https"
- name: Add etcd hosts
delegate_to: localhost
add_host:
name: "{{ item }}"
groups: oo_new_etcd_to_config
ansible_ssh_user: "{{ g_ssh_user | default(omit) }}"
ansible_become: "{{ g_sudo | default(omit) }}"
with_items: "{{ groups.oo_etcd_to_migrate[1:] | default([]) }}"
changed_when: no
- name: Set success
set_fact:
r_etcd_migrate_success: true
- import_playbook: scaleup.yml
- name: Gate on etcd migration
hosts: oo_masters_to_config
gather_facts: no
tasks:
- set_fact:
etcd_migration_completed: "{{ hostvars
| lib_utils_oo_select_keys(groups.oo_etcd_to_migrate)
| lib_utils_oo_collect('inventory_hostname', {'r_etcd_migrate_success': true}) }}"
- set_fact:
etcd_migration_failed: "{{ groups.oo_etcd_to_migrate | difference(etcd_migration_completed) | list }}"
- name: Add TTLs on the first master
hosts: oo_first_master[0]
tasks:
- import_role:
name: etcd
tasks_from: migrate.add_ttls.yml
vars:
etcd_peer: "{{ hostvars[groups.oo_etcd_to_migrate.0].openshift.common.ip }}"
etcd_url_scheme: "https"
etcd_peer_url_scheme: "https"
when: etcd_migration_failed | length == 0
- name: Configure masters if etcd data migration is succesfull
hosts: oo_masters_to_config
tasks:
- import_role:
name: etcd
tasks_from: migrate.configure_master.yml
when: etcd_migration_failed | length == 0
- debug:
msg: "Skipping master re-configuration since migration failed."
when:
- etcd_migration_failed | length > 0
- name: Start master services
service:
name: "{{ item }}"
state: started
register: service_status
# Sometimes the master-api, resp. master-controllers fails to start for the first time
until: service_status.state is defined and service_status.state == "started"
retries: 5
delay: 10
with_items: "{{ master_services[::-1] }}"
- fail:
msg: "Migration failed. The following hosts were not properly migrated: {{ etcd_migration_failed | join(',') }}"
when:
- etcd_migration_failed | length > 0
|