blob: a2af7bb21926f3444da9e00c5dec202040211874 (
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
|
---
- name: Run pre-checks
hosts: oo_etcd_to_migrate
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 }}"
# 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.common.service_type + '-master-controllers' }}"
- "{{ openshift.common.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
- 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: Stop etcd
hosts: oo_etcd_to_migrate
gather_facts: no
pre_tasks:
- set_fact:
l_etcd_service: "{{ 'etcd_container' if openshift.common.is_containerized else 'etcd' }}"
- name: Disable etcd members
service:
name: "{{ l_etcd_service }}"
state: stopped
- name: Migrate data on first etcd
hosts: oo_etcd_to_migrate[0]
gather_facts: no
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 }}"
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
roles:
- role: etcd_migrate
r_etcd_migrate_action: clean_data
r_etcd_common_embedded_etcd: "{{ groups.oo_etcd_to_config | default([]) | length == 0 }}"
etcd_peer: "{{ ansible_default_ipv4.address }}"
etcd_url_scheme: "https"
etcd_peer_url_scheme: "https"
post_tasks:
- 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
- include: ./scaleup.yml
- 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: Add TTLs on the first master
hosts: oo_first_master[0]
roles:
- role: etcd_migrate
r_etcd_migrate_action: add_ttls
etcd_peer: "{{ hostvars[groups.oo_etcd_to_migrate.0].ansible_default_ipv4.address }}"
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
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 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
|