blob: 3e7a486691623ff6d52fe46d69fbce72b097daa1 (
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
|
---
- include: ../openshift-cluster/evaluate_groups.yml
tags:
- always
- name: Run pre-checks
hosts: oo_etcd_to_migrate
tags:
- always
roles:
- role: etcd_migrate
r_etcd_migrate_action: check
r_etcd_common_embedded_etcd: "{{ groups.oo_etcd_to_config | default([]) | length == 0 }}"
etcd_peer: "{{ ansible_default_ipv4.address }}"
- include: ../openshift-cluster/initialize_facts.yml
tags:
- always
- name: Prepare masters for etcd data migration
hosts: oo_masters_to_config
tasks:
- set_fact:
master_services:
- "{{ openshift.common.service_type + '-master' }}"
- set_fact:
master_services:
- "{{ openshift.common.service_type + '-master-controllers' }}"
- "{{ openshift.common.service_type + '-master-api' }}"
when:
- (openshift_master_cluster_method is defined and openshift_master_cluster_method == "native") or openshift.common.is_master_system_container | bool
- 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
tags:
- always
roles:
- role: openshift_facts
- role: etcd_common
r_etcd_common_action: backup
r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}"
r_etcd_common_backup_tag: pre-migration
r_etcd_common_embedded_etcd: "{{ groups.oo_etcd_to_config | default([]) | length == 0 }}"
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
| oo_select_keys(groups.oo_etcd_to_migrate)
| oo_collect('inventory_hostname', {'r_etcd_common_backup_complete': true}) }}"
- set_fact:
etcd_backup_failed: "{{ groups.oo_etcd_to_migrate | difference(etcd_backup_completed) }}"
- fail:
msg: "Migration cannot continue. The following hosts did not complete etcd backup: {{ etcd_backup_failed | join(',') }}"
when:
- etcd_backup_failed | length > 0
- name: Migrate etcd data from v2 to v3
hosts: oo_etcd_to_migrate
gather_facts: no
tags:
- always
roles:
- role: etcd_migrate
r_etcd_migrate_action: migrate
r_etcd_common_embedded_etcd: "{{ groups.oo_etcd_to_config | default([]) | length == 0 }}"
etcd_peer: "{{ ansible_default_ipv4.address }}"
- name: Gate on etcd migration
hosts: oo_masters_to_config
gather_facts: no
tasks:
- set_fact:
etcd_migration_completed: "{{ hostvars
| oo_select_keys(groups.oo_etcd_to_migrate)
| oo_collect('inventory_hostname', {'r_etcd_migrate_success': true}) }}"
- set_fact:
etcd_migration_failed: "{{ groups.oo_etcd_to_migrate | difference(etcd_migration_completed) }}"
- name: Configure masters if etcd data migration is succesfull
hosts: oo_masters_to_config
roles:
- role: etcd_migrate
r_etcd_migrate_action: configure
when: etcd_migration_failed | length == 0
tasks:
- debug:
msg: "Skipping master re-configuration since migration failed."
when:
- etcd_migration_failed | length > 0
- name: Start masters after etcd data migration
hosts: oo_masters_to_config
tasks:
- 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
|