blob: 13b3bec8b4a7fe1524b7c47988cf015f91bd457a [file] [log] [blame]
Jiri Broulikbb447ac2017-05-04 15:36:22 +02001/**
2 * Update packages on given nodes
3 *
4 * Expected parameters:
5 * SALT_MASTER_CREDENTIALS Credentials to the Salt API.
6 * SALT_MASTER_URL Full Salt API address [http://10.10.10.1:8000].
Jiri Broulik3792c962017-05-17 18:26:36 +02007 * STAGE_TEST_UPGRADE Run test upgrade stage (bool)
8 * STAGE_REAL_UPGRADE Run real upgrade stage (bool)
9 * STAGE_ROLLBACK_UPGRADE Run rollback upgrade stage (bool)
Jiri Broulikbb447ac2017-05-04 15:36:22 +020010 *
11**/
12
13def common = new com.mirantis.mk.Common()
14def salt = new com.mirantis.mk.Salt()
chnyda625f4b42017-10-11 14:10:31 +020015def python = new com.mirantis.mk.Python()
Jiri Broulikbb447ac2017-05-04 15:36:22 +020016
chnyda625f4b42017-10-11 14:10:31 +020017def pepperEnv = "pepperEnv"
Jiri Broulikbb447ac2017-05-04 15:36:22 +020018
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040019node() {
Jiri Broulikbb447ac2017-05-04 15:36:22 +020020
chnyda625f4b42017-10-11 14:10:31 +020021 stage('Setup virtualenv for Pepper') {
Dmitrii Kabanovf31c8962017-10-12 21:00:30 -070022 python.setupPepperVirtualenv(pepperEnv, SALT_MASTER_URL, SALT_MASTER_CREDENTIALS)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040023 }
Jiri Broulikbb447ac2017-05-04 15:36:22 +020024
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040025 if (STAGE_TEST_UPGRADE.toBoolean() == true) {
26 stage('Test upgrade') {
Jiri Broulik3792c962017-05-17 18:26:36 +020027
Jiri Broulik3792c962017-05-17 18:26:36 +020028
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040029 try {
chnyda625f4b42017-10-11 14:10:31 +020030 salt.enforceState(pepperEnv, 'I@salt:master', 'reclass')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040031 } catch (Exception e) {
32 common.warningMsg("Some parts of Reclass state failed. The most probable reasons were uncommited changes. We should continue to run")
33 }
Jiri Broulik80d96752017-05-22 19:42:01 +020034
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040035 try {
chnyda625f4b42017-10-11 14:10:31 +020036 salt.runSaltProcessStep(pepperEnv, '*', 'saltutil.refresh_pillar', [], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040037 } catch (Exception e) {
38 common.warningMsg("No response from some minions. We should continue to run")
39 }
Jiri Broulik3792c962017-05-17 18:26:36 +020040
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040041 try {
chnyda625f4b42017-10-11 14:10:31 +020042 salt.runSaltProcessStep(pepperEnv, '*', 'saltutil.sync_all', [], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040043 } catch (Exception e) {
44 common.warningMsg("No response from some minions. We should continue to run")
45 }
Jiri Broulik3792c962017-05-17 18:26:36 +020046
Jiri Broulik0798e512017-11-13 17:00:58 +010047 def domain = salt.getPillar(pepperEnv, 'I@salt:master', '_param:cluster_domain')
48 domain = domain['return'][0].values()[0]
Jiri Broulik3792c962017-05-17 18:26:36 +020049
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040050 // read backupninja variable
chnyda625f4b42017-10-11 14:10:31 +020051 _pillar = salt.getPillar(pepperEnv, 'I@backupninja:client', '_param:backupninja_backup_host')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040052 def backupninja_backup_host = _pillar['return'][0].values()[0]
53 print(_pillar)
54 print(backupninja_backup_host)
Jiri Broulik3792c962017-05-17 18:26:36 +020055
chnyda625f4b42017-10-11 14:10:31 +020056 _pillar = salt.getGrain(pepperEnv, 'I@salt:control', 'id')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040057 def kvm01 = _pillar['return'][0].values()[0].values()[0]
58 print(_pillar)
59 print(kvm01)
60
chnyda625f4b42017-10-11 14:10:31 +020061 _pillar = salt.getPillar(pepperEnv, "${kvm01}", 'salt:control:cluster:internal:node:upg01:provider')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040062 def upgNodeProvider = _pillar['return'][0].values()[0]
63 print(_pillar)
64 print(upgNodeProvider)
Jiri Broulikbb447ac2017-05-04 15:36:22 +020065
Jiri Broulik6fc9d3f2017-05-12 07:11:29 +020066
chnyda625f4b42017-10-11 14:10:31 +020067 salt.runSaltProcessStep(pepperEnv, "${upgNodeProvider}", 'virt.destroy', ["upg01.${domain}"], null, true)
68 salt.runSaltProcessStep(pepperEnv, "${upgNodeProvider}", 'virt.undefine', ["upg01.${domain}"], null, true)
Jiri Broulik6fc9d3f2017-05-12 07:11:29 +020069
70
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040071 try {
chnyda625f4b42017-10-11 14:10:31 +020072 salt.cmdRun(pepperEnv, 'I@salt:master', "salt-key -d upg01.${domain} -y")
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040073 } catch (Exception e) {
74 common.warningMsg("upg01.${domain} does not match any accepted, unaccepted or rejected keys. The key did not exist yet or was already removed. We should continue to run")
75 }
Jiri Broulikbb447ac2017-05-04 15:36:22 +020076
Jiri Broulikbb447ac2017-05-04 15:36:22 +020077
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040078 // salt 'kvm02*' state.sls salt.control
chnyda625f4b42017-10-11 14:10:31 +020079 salt.enforceState(pepperEnv, "${upgNodeProvider}", 'salt.control')
Jiri Broulikbb447ac2017-05-04 15:36:22 +020080
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040081 // wait until upg node is registered in salt-key
chnyda625f4b42017-10-11 14:10:31 +020082 salt.minionPresent(pepperEnv, 'I@salt:master', 'upg01')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040083
84 // salt '*' saltutil.refresh_pillar
chnyda625f4b42017-10-11 14:10:31 +020085 salt.runSaltProcessStep(pepperEnv, 'upg*', 'saltutil.refresh_pillar', [], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040086 // salt '*' saltutil.sync_all
chnyda625f4b42017-10-11 14:10:31 +020087 salt.runSaltProcessStep(pepperEnv, 'upg*', 'saltutil.sync_all', [], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040088
89 // salt "upg*" state.sls linux,openssh,salt.minion,ntp,rsyslog
90 try {
chnyda625f4b42017-10-11 14:10:31 +020091 salt.enforceState(pepperEnv, 'upg*', ['linux', 'openssh', 'salt.minion', 'ntp', 'rsyslog'])
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040092 } catch (Exception e) {
93 common.warningMsg('Received no response because salt-minion was restarted. We should continue to run')
94 }
chnyda625f4b42017-10-11 14:10:31 +020095 salt.enforceState(pepperEnv, 'upg*', ['linux', 'openssh', 'salt.minion', 'ntp', 'rsyslog'])
Jiri Broulikbb447ac2017-05-04 15:36:22 +020096
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040097 // salt "upg*" state.sls rabbitmq
chnyda625f4b42017-10-11 14:10:31 +020098 salt.enforceState(pepperEnv, 'upg*', ['rabbitmq', 'memcached'])
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +040099 try {
chnyda625f4b42017-10-11 14:10:31 +0200100 salt.enforceState(pepperEnv, 'I@backupninja:client', ['openssh.client', 'salt.minion'])
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400101 } catch (Exception e) {
102 common.warningMsg('salt-minion was restarted. We should continue to run')
103 }
104 try {
chnyda625f4b42017-10-11 14:10:31 +0200105 salt.enforceState(pepperEnv, 'I@backupninja:server', ['salt.minion'])
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400106 } catch (Exception e) {
107 common.warningMsg('salt-minion was restarted. We should continue to run')
108 }
109 // salt '*' state.apply salt.minion.grains
chnyda625f4b42017-10-11 14:10:31 +0200110 //salt.enforceState(pepperEnv, '*', 'salt.minion.grains')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400111 // salt -C 'I@backupninja:server' state.sls backupninja
chnyda625f4b42017-10-11 14:10:31 +0200112 salt.enforceState(pepperEnv, 'I@backupninja:server', 'backupninja')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400113 // salt -C 'I@backupninja:client' state.sls backupninja
chnyda625f4b42017-10-11 14:10:31 +0200114 salt.enforceState(pepperEnv, 'I@backupninja:client', 'backupninja')
115 salt.runSaltProcessStep(pepperEnv, 'I@backupninja:client', 'ssh.rm_known_host', ["root", "${backupninja_backup_host}"], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400116 try {
chnyda625f4b42017-10-11 14:10:31 +0200117 salt.cmdRun(pepperEnv, 'I@backupninja:client', "arp -d ${backupninja_backup_host}")
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400118 } catch (Exception e) {
119 common.warningMsg('The ARP entry does not exist. We should continue to run.')
120 }
chnyda625f4b42017-10-11 14:10:31 +0200121 salt.runSaltProcessStep(pepperEnv, 'I@backupninja:client', 'ssh.set_known_host', ["root", "${backupninja_backup_host}"], null, true)
122 salt.cmdRun(pepperEnv, 'I@backupninja:client', 'backupninja -n --run /etc/backup.d/101.mysql')
123 salt.cmdRun(pepperEnv, 'I@backupninja:client', 'backupninja -n --run /etc/backup.d/200.backup.rsync > /tmp/backupninjalog')
Jiri Broulik6fc9d3f2017-05-12 07:11:29 +0200124
chnyda625f4b42017-10-11 14:10:31 +0200125 salt.enforceState(pepperEnv, 'I@xtrabackup:server', 'xtrabackup')
126 salt.enforceState(pepperEnv, 'I@xtrabackup:client', 'openssh.client')
127 salt.cmdRun(pepperEnv, 'I@xtrabackup:client', "su root -c 'salt-call state.sls xtrabackup'")
128 salt.cmdRun(pepperEnv, 'I@xtrabackup:client', "su root -c '/usr/local/bin/innobackupex-runner.sh'")
Jiri Broulik6fc9d3f2017-05-12 07:11:29 +0200129
chnyda625f4b42017-10-11 14:10:31 +0200130 def databases = salt.cmdRun(pepperEnv, 'I@mysql:client','salt-call mysql.db_list | grep upgrade | awk \'/-/ {print \$2}\'')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400131 if(databases && databases != ""){
132 def databasesList = databases['return'][0].values()[0].trim().tokenize("\n")
133 for( i = 0; i < databasesList.size(); i++){
134 if(databasesList[i].toLowerCase().contains('upgrade')){
chnyda625f4b42017-10-11 14:10:31 +0200135 salt.runSaltProcessStep(pepperEnv, 'I@mysql:client', 'mysql.db_remove', ["${databasesList[i]}"], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400136 common.warningMsg("removing database ${databasesList[i]}")
chnyda625f4b42017-10-11 14:10:31 +0200137 salt.runSaltProcessStep(pepperEnv, 'I@mysql:client', 'file.remove', ["/root/mysql/flags/${databasesList[i]}-installed"], null, true)
Jiri Broulik3792c962017-05-17 18:26:36 +0200138 }
Jiri Broulik3792c962017-05-17 18:26:36 +0200139 }
chnyda625f4b42017-10-11 14:10:31 +0200140 salt.enforceState(pepperEnv, 'I@mysql:client', 'mysql.client')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400141 }else{
142 common.errorMsg("No _upgrade databases were returned")
143 }
Jiri Broulikbb447ac2017-05-04 15:36:22 +0200144
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400145 try {
chnyda625f4b42017-10-11 14:10:31 +0200146 salt.enforceState(pepperEnv, 'upg*', 'keystone.server')
147 salt.runSaltProcessStep(pepperEnv, 'upg*', 'service.restart', ['apache2'], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400148 } catch (Exception e) {
149 common.warningMsg('Restarting Apache2')
chnyda625f4b42017-10-11 14:10:31 +0200150 salt.runSaltProcessStep(pepperEnv, 'upg*', 'service.restart', ['apache2'], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400151 }
152 try {
chnyda625f4b42017-10-11 14:10:31 +0200153 salt.enforceState(pepperEnv, 'upg*', 'keystone.client')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400154 } catch (Exception e) {
155 common.warningMsg('running keystone.client state again')
chnyda625f4b42017-10-11 14:10:31 +0200156 salt.enforceState(pepperEnv, 'upg*', 'keystone.client')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400157 }
158 try {
chnyda625f4b42017-10-11 14:10:31 +0200159 salt.enforceState(pepperEnv, 'upg*', 'glance')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400160 } catch (Exception e) {
161 common.warningMsg('running glance state again')
chnyda625f4b42017-10-11 14:10:31 +0200162 salt.enforceState(pepperEnv, 'upg*', 'glance')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400163 }
chnyda625f4b42017-10-11 14:10:31 +0200164 salt.enforceState(pepperEnv, 'upg*', 'keystone.server')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400165 try {
chnyda625f4b42017-10-11 14:10:31 +0200166 salt.enforceState(pepperEnv, 'upg*', 'nova')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400167 } catch (Exception e) {
168 common.warningMsg('running nova state again')
chnyda625f4b42017-10-11 14:10:31 +0200169 salt.enforceState(pepperEnv, 'upg*', 'nova')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400170 }
171 // run nova state again as sometimes nova does not enforce itself for some reason
172 try {
chnyda625f4b42017-10-11 14:10:31 +0200173 salt.enforceState(pepperEnv, 'upg*', 'nova')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400174 } catch (Exception e) {
175 common.warningMsg('running nova state again')
chnyda625f4b42017-10-11 14:10:31 +0200176 salt.enforceState(pepperEnv, 'upg*', 'nova')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400177 }
178 try {
chnyda625f4b42017-10-11 14:10:31 +0200179 salt.enforceState(pepperEnv, 'upg*', 'cinder')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400180 } catch (Exception e) {
181 common.warningMsg('running cinder state again')
chnyda625f4b42017-10-11 14:10:31 +0200182 salt.enforceState(pepperEnv, 'upg*', 'cinder')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400183 }
184 try {
chnyda625f4b42017-10-11 14:10:31 +0200185 salt.enforceState(pepperEnv, 'upg*', 'neutron')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400186 } catch (Exception e) {
187 common.warningMsg('running neutron state again')
chnyda625f4b42017-10-11 14:10:31 +0200188 salt.enforceState(pepperEnv, 'upg*', 'neutron')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400189 }
190 try {
chnyda625f4b42017-10-11 14:10:31 +0200191 salt.enforceState(pepperEnv, 'upg*', 'heat')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400192 } catch (Exception e) {
193 common.warningMsg('running heat state again')
chnyda625f4b42017-10-11 14:10:31 +0200194 salt.enforceState(pepperEnv, 'upg*', 'heat')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400195 }
chnyda625f4b42017-10-11 14:10:31 +0200196 salt.cmdRun(pepperEnv, 'upg01*', '. /root/keystonercv3; openstack service list; openstack image list; openstack flavor list; openstack compute service list; openstack server list; openstack network list; openstack volume list; openstack orchestration service list')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400197
198 if (STAGE_TEST_UPGRADE.toBoolean() == true && STAGE_REAL_UPGRADE.toBoolean() == true) {
199 stage('Ask for manual confirmation') {
200 input message: "Do you want to continue with upgrade?"
Jiri Broulik3792c962017-05-17 18:26:36 +0200201 }
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400202 }
203 }
204 }
205
206 if (STAGE_REAL_UPGRADE.toBoolean() == true) {
207 stage('Real upgrade') {
208 // # actual upgrade
209
Jiri Broulik0798e512017-11-13 17:00:58 +0100210 def domain = salt.getPillar(pepperEnv, 'I@salt:master', '_param:cluster_domain')
211 domain = domain['return'][0].values()[0]
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400212
chnyda625f4b42017-10-11 14:10:31 +0200213 _pillar = salt.getGrain(pepperEnv, 'I@salt:control', 'id')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400214 kvm01 = _pillar['return'][0].values()[0].values()[0]
215 print(_pillar)
216 print(kvm01)
217
218 def errorOccured = false
219
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100220 def proxy_general_target = ""
Marek Celoudead57b92017-11-13 16:41:12 +0100221 def proxy_target_hosts = salt.getMinions(pepperEnv, 'I@horizon:server').sort()
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100222 def node_count = 1
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400223
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100224 for (t in proxy_target_hosts) {
225 def target = t.split("\\.")[0]
Jiri Broulik42dfbb12017-11-13 11:27:45 +0100226 proxy_general_target = target.replaceAll('\\d+$', "")
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100227 _pillar = salt.getPillar(pepperEnv, "${kvm01}", "salt:control:cluster:internal:node:prx0${node_count}:provider")
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100228 def nodeProvider = _pillar['return'][0].values()[0]
229 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'virt.destroy', ["${target}.${domain}"], null, true)
230 sleep(2)
231 try {
232 salt.cmdRun(pepperEnv, "${nodeProvider}", "[ ! -f /root/${target}.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/${target}.${domain}/system.qcow2 ./${target}.${domain}.qcow2.bak")
233 } catch (Exception e) {
234 common.warningMsg('File already exists')
235 }
236 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'virt.undefine', ["${target}.${domain}"], null, true)
237 try {
238 salt.cmdRun(pepperEnv, 'I@salt:master', "salt-key -d ${target}.${domain} -y")
239 } catch (Exception e) {
240 common.warningMsg('does not match any accepted, unaccepted or rejected keys. They were probably already removed. We should continue to run')
241 }
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100242 node_count++
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400243 }
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100244 def control_general_target = ""
Marek Celoud8c34fc52017-11-13 16:46:09 +0100245 def control_target_hosts = salt.getMinions(pepperEnv, 'I@keystone:server and not upg*')
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100246 node_count = 1
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400247
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100248 for (t in control_target_hosts) {
249 def target = t.split("\\.")[0]
Jiri Broulik42dfbb12017-11-13 11:27:45 +0100250 control_general_target = target.replaceAll('\\d+$', "")
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100251 _pillar = salt.getPillar(pepperEnv, "${kvm01}", "salt:control:cluster:internal:node:ctl0${node_count}:provider")
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100252 def nodeProvider = _pillar['return'][0].values()[0]
253 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'virt.destroy', ["${target}.${domain}"], null, true)
254 sleep(2)
255 try {
256 salt.cmdRun(pepperEnv, "${nodeProvider}", "[ ! -f /root/${target}.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/${target}.${domain}/system.qcow2 ./${target}.${domain}.qcow2.bak")
257 } catch (Exception e) {
258 common.warningMsg('File already exists')
259 }
260 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'virt.undefine', ["${target}.${domain}"], null, true)
261 try {
262 salt.cmdRun(pepperEnv, 'I@salt:master', "salt-key -d ${target}.${domain} -y")
263 } catch (Exception e) {
264 common.warningMsg('does not match any accepted, unaccepted or rejected keys. They were probably already removed. We should continue to run')
265 }
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100266 node_count++
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100267 }
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400268
chnyda625f4b42017-10-11 14:10:31 +0200269 salt.cmdRun(pepperEnv, 'I@xtrabackup:client', "su root -c '/usr/local/bin/innobackupex-runner.sh'")
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400270
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400271 // salt 'kvm*' state.sls salt.control
chnyda625f4b42017-10-11 14:10:31 +0200272 salt.enforceState(pepperEnv, 'I@salt:control', 'salt.control')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400273
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100274 for (t in control_target_hosts) {
275 def target = t.split("\\.")[0]
276 // wait until ctl and prx nodes are registered in salt-key
Jiri Broulik0798e512017-11-13 17:00:58 +0100277 salt.minionPresent(pepperEnv, 'I@salt:master', "${target}")
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100278 }
279 for (t in proxy_target_hosts) {
280 def target = t.split("\\.")[0]
281 // wait until ctl and prx nodes are registered in salt-key
Jiri Broulik0798e512017-11-13 17:00:58 +0100282 salt.minionPresent(pepperEnv, 'I@salt:master', "${target}")
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100283 }
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400284
285 // salt '*' saltutil.refresh_pillar
chnyda625f4b42017-10-11 14:10:31 +0200286 salt.runSaltProcessStep(pepperEnv, '*', 'saltutil.refresh_pillar', [], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400287 // salt '*' saltutil.sync_all
chnyda625f4b42017-10-11 14:10:31 +0200288 salt.runSaltProcessStep(pepperEnv, '*', 'saltutil.sync_all', [], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400289
290 try {
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100291 salt.enforceState(pepperEnv, "${proxy_general_target}* or ${control_general_target}*", ['linux', 'openssh', 'salt.minion', 'ntp', 'rsyslog'])
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400292 } catch (Exception e) {
293 common.warningMsg('Received no response because salt-minion was restarted. We should continue to run')
294 }
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100295 salt.enforceState(pepperEnv, "${proxy_general_target}* or ${control_general_target}*", ['linux', 'openssh', 'salt.minion', 'ntp', 'rsyslog'])
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400296
297 // salt 'ctl*' state.sls keepalived
298 // salt 'ctl*' state.sls haproxy
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100299 salt.enforceState(pepperEnv, "${control_general_target}*", ['keepalived', 'haproxy'])
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400300 // salt 'ctl*' service.restart rsyslog
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100301 salt.runSaltProcessStep(pepperEnv, "${control_general_target}*", 'service.restart', ['rsyslog'], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400302 // salt "ctl*" state.sls memcached
303 // salt "ctl*" state.sls keystone.server
304 try {
Jiri Broulik69de13a2017-05-18 13:53:58 +0200305 try {
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100306 salt.enforceState(pepperEnv, "${control_general_target}*", ['memcached', 'keystone.server'])
307 salt.runSaltProcessStep(pepperEnv, "${control_general_target}*", 'service.restart', ['apache2'], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400308 } catch (Exception e) {
309 common.warningMsg('Restarting Apache2 and enforcing keystone.server state again')
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100310 salt.runSaltProcessStep(pepperEnv, "${control_general_target}*", 'service.restart', ['apache2'], null, true)
311 salt.enforceState(pepperEnv, "${control_general_target}*", 'keystone.server')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400312 }
313 // salt 'ctl01*' state.sls keystone.client
314 try {
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100315 salt.enforceState(pepperEnv, "I@keystone:client and ${control_general_target}*", 'keystone.client')
Jiri Broulik69de13a2017-05-18 13:53:58 +0200316 } catch (Exception e) {
317 common.warningMsg('running keystone.client state again')
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100318 salt.enforceState(pepperEnv, "I@keystone:client and ${control_general_target}*", 'keystone.client')
Jiri Broulik69de13a2017-05-18 13:53:58 +0200319 }
Jiri Broulik5f83c292017-05-18 12:09:07 +0200320 try {
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100321 salt.enforceState(pepperEnv, "${control_general_target}*", 'glance')
Jiri Broulik5f83c292017-05-18 12:09:07 +0200322 } catch (Exception e) {
323 common.warningMsg('running glance state again')
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100324 salt.enforceState(pepperEnv, "${control_general_target}*", 'glance')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400325 } // salt 'ctl*' state.sls glusterfs.client
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100326 salt.enforceState(pepperEnv, "${control_general_target}*", 'glusterfs.client')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400327 // salt 'ctl*' state.sls keystone.server
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100328 salt.enforceState(pepperEnv, "${control_general_target}*", 'keystone.server')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400329 // salt 'ctl*' state.sls nova
Jiri Broulik5f83c292017-05-18 12:09:07 +0200330 try {
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100331 salt.enforceState(pepperEnv, "${control_general_target}*", 'nova')
Jiri Broulik5f83c292017-05-18 12:09:07 +0200332 } catch (Exception e) {
333 common.warningMsg('running nova state again')
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100334 salt.enforceState(pepperEnv, "${control_general_target}*", 'nova')
Jiri Broulik5f83c292017-05-18 12:09:07 +0200335 }
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400336 // salt 'ctl*' state.sls cinder
Jiri Broulik80d96752017-05-22 19:42:01 +0200337 try {
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100338 salt.enforceState(pepperEnv, "${control_general_target}*", 'cinder')
Jiri Broulikbda0a212017-05-18 12:54:51 +0200339 } catch (Exception e) {
340 common.warningMsg('running cinder state again')
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100341 salt.enforceState(pepperEnv, "${control_general_target}*", 'cinder')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400342 }
Jiri Broulik5f83c292017-05-18 12:09:07 +0200343 try {
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100344 salt.enforceState(pepperEnv, "${control_general_target}*", 'neutron')
Jiri Broulik5f83c292017-05-18 12:09:07 +0200345 } catch (Exception e) {
346 common.warningMsg('running neutron state again')
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100347 salt.enforceState(pepperEnv, "${control_general_target}*", 'neutron')
Jiri Broulik5f83c292017-05-18 12:09:07 +0200348 }
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400349 // salt 'ctl*' state.sls heat
Jiri Broulikbda0a212017-05-18 12:54:51 +0200350 try {
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100351 salt.enforceState(pepperEnv, "${control_general_target}*", 'heat')
Jiri Broulikbda0a212017-05-18 12:54:51 +0200352 } catch (Exception e) {
353 common.warningMsg('running heat state again')
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100354 salt.enforceState(pepperEnv, "${control_general_target}*", 'heat')
Jiri Broulik3792c962017-05-17 18:26:36 +0200355 }
356
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400357 } catch (Exception e) {
358 errorOccured = true
Jiri Broulik0798e512017-11-13 17:00:58 +0100359 input message: "Some states that require syncdb failed. Please check the reason and click proceed only if you want to restore database into it's pre-upgrade state. Otherwise, click abort."
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400360 common.warningMsg('Some states that require syncdb failed. Restoring production databases')
Jiri Broulik3792c962017-05-17 18:26:36 +0200361
Jiri Broulik00d01092017-06-01 19:38:15 +0200362 // database restore section
363 try {
chnyda625f4b42017-10-11 14:10:31 +0200364 salt.runSaltProcessStep(pepperEnv, 'I@galera:slave', 'service.stop', ['mysql'], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400365 } catch (Exception er) {
Jiri Broulik00d01092017-06-01 19:38:15 +0200366 common.warningMsg('Mysql service already stopped')
Jiri Broulik3792c962017-05-17 18:26:36 +0200367 }
Jiri Broulik00d01092017-06-01 19:38:15 +0200368 try {
chnyda625f4b42017-10-11 14:10:31 +0200369 salt.runSaltProcessStep(pepperEnv, 'I@galera:master', 'service.stop', ['mysql'], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400370 } catch (Exception er) {
Jiri Broulik00d01092017-06-01 19:38:15 +0200371 common.warningMsg('Mysql service already stopped')
372 }
373 try {
chnyda625f4b42017-10-11 14:10:31 +0200374 salt.cmdRun(pepperEnv, 'I@galera:slave', "rm /var/lib/mysql/ib_logfile*")
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400375 } catch (Exception er) {
Jiri Broulik00d01092017-06-01 19:38:15 +0200376 common.warningMsg('Files are not present')
377 }
378 try {
chnyda625f4b42017-10-11 14:10:31 +0200379 salt.cmdRun(pepperEnv, 'I@galera:master', "mkdir /root/mysql/mysql.bak")
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400380 } catch (Exception er) {
381 common.warningMsg('Directory already exists')
382 }
383 try {
chnyda625f4b42017-10-11 14:10:31 +0200384 salt.cmdRun(pepperEnv, 'I@galera:master', "rm -rf /root/mysql/mysql.bak/*")
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400385 } catch (Exception er) {
Jiri Broulik00d01092017-06-01 19:38:15 +0200386 common.warningMsg('Directory already empty')
387 }
388 try {
chnyda625f4b42017-10-11 14:10:31 +0200389 salt.cmdRun(pepperEnv, 'I@galera:master', "mv /var/lib/mysql/* /root/mysql/mysql.bak")
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400390 } catch (Exception er) {
391 common.warningMsg('Files were already moved')
392 }
393 try {
chnyda625f4b42017-10-11 14:10:31 +0200394 salt.runSaltProcessStep(pepperEnv, 'I@galera:master', 'file.remove', ["/var/lib/mysql/.galera_bootstrap"], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400395 } catch (Exception er) {
Jiri Broulik00d01092017-06-01 19:38:15 +0200396 common.warningMsg('File is not present')
397 }
chnyda625f4b42017-10-11 14:10:31 +0200398 salt.cmdRun(pepperEnv, 'I@galera:master', "sed -i '/gcomm/c\\wsrep_cluster_address=\"gcomm://\"' /etc/mysql/my.cnf")
399 _pillar = salt.getPillar(pepperEnv, "I@galera:master", 'xtrabackup:client:backup_dir')
Jiri Broulik00d01092017-06-01 19:38:15 +0200400 backup_dir = _pillar['return'][0].values()[0]
401 if(backup_dir == null || backup_dir.isEmpty()) { backup_dir='/var/backups/mysql/xtrabackup' }
402 print(backup_dir)
chnyda625f4b42017-10-11 14:10:31 +0200403 salt.runSaltProcessStep(pepperEnv, 'I@galera:master', 'file.remove', ["${backup_dir}/dbrestored"], null, true)
404 salt.cmdRun(pepperEnv, 'I@xtrabackup:client', "su root -c 'salt-call state.sls xtrabackup'")
405 salt.runSaltProcessStep(pepperEnv, 'I@galera:master', 'service.start', ['mysql'], null, true)
Jiri Broulik8dabbfd2017-07-25 10:49:45 +0200406
407 // wait until mysql service on galera master is up
chnyda625f4b42017-10-11 14:10:31 +0200408 salt.commandStatus(pepperEnv, 'I@galera:master', 'service mysql status', 'running')
Jiri Broulik8dabbfd2017-07-25 10:49:45 +0200409
chnyda625f4b42017-10-11 14:10:31 +0200410 salt.runSaltProcessStep(pepperEnv, 'I@galera:slave', 'service.start', ['mysql'], null, true)
Jiri Broulik00d01092017-06-01 19:38:15 +0200411 //
Jiri Broulik3792c962017-05-17 18:26:36 +0200412
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400413 common.errorMsg("Stage Real control upgrade failed")
414 }
415 if(!errorOccured){
416
417 ceph = null
418
419 try {
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100420 ceph = salt.cmdRun(pepperEnv, "${control_general_target}*", "salt-call grains.item roles | grep ceph.client")
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400421
422 } catch (Exception er) {
423 common.infoMsg("Ceph is not used")
424 }
425
426 if(ceph != null) {
427 try {
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100428 salt.enforceState(pepperEnv, "${control_general_target}*", 'ceph.client')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400429 } catch (Exception er) {
430 common.warningMsg("Ceph client state on controllers failed. Please fix it manually")
431 }
432 }
Jiri Broulik3792c962017-05-17 18:26:36 +0200433
434 // salt 'cmp*' cmd.run 'service nova-compute restart'
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100435 salt.runSaltProcessStep(pepperEnv, 'I@nova:compute', 'service.restart', ['nova-compute'], null, true)
436 salt.runSaltProcessStep(pepperEnv, "${control_general_target}*", 'service.restart', ['nova-conductor'], null, true)
437 salt.runSaltProcessStep(pepperEnv, "${control_general_target}*", 'service.restart', ['nova-scheduler'], null, true)
Jiri Broulikf20c7672017-06-19 21:20:52 +0200438
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400439
440 // salt 'prx*' state.sls linux,openssh,salt.minion,ntp,rsyslog
441 // salt 'ctl*' state.sls keepalived
442 // salt 'prx*' state.sls keepalived
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100443 salt.enforceState(pepperEnv, "${proxy_general_target}*", 'keepalived')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400444 // salt 'prx*' state.sls horizon
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100445 salt.enforceState(pepperEnv, "${proxy_general_target}*", 'horizon')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400446 // salt 'prx*' state.sls nginx
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100447 salt.enforceState(pepperEnv, "${proxy_general_target}*", 'nginx')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400448 // salt "prx*" state.sls memcached
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100449 salt.enforceState(pepperEnv, "${proxy_general_target}*", 'memcached')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400450
451 try {
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100452 salt.enforceHighstate(pepperEnv, "${control_general_target}*")
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400453 } catch (Exception er) {
454 common.errorMsg("Highstate was executed on controller nodes but something failed. Please check it and fix it accordingly.")
455 }
456
457 try {
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100458 salt.enforceHighstate(pepperEnv, "${proxy_general_target}*")
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400459 } catch (Exception er) {
460 common.errorMsg("Highstate was executed on proxy nodes but something failed. Please check it and fix it accordingly.")
461 }
462
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100463 salt.cmdRun(pepperEnv, "${control_general_target}01*", '. /root/keystonercv3; openstack service list; openstack image list; openstack flavor list; openstack compute service list; openstack server list; openstack network list; openstack volume list; openstack orchestration service list')
Jiri Broulik3792c962017-05-17 18:26:36 +0200464 }
Jiri Broulik6fc9d3f2017-05-12 07:11:29 +0200465 }
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400466
467 if (STAGE_REAL_UPGRADE.toBoolean() == true && STAGE_ROLLBACK_UPGRADE.toBoolean() == true) {
468 stage('Ask for manual confirmation') {
469 input message: "Please verify if the control upgrade was successful. If it did not succeed, in the worst scenario, you can click YES to continue with control-upgrade-rollback. Do you want to continue with the rollback?"
470 }
471 }
472 }
473
474 if (STAGE_ROLLBACK_UPGRADE.toBoolean() == true) {
475 stage('Rollback upgrade') {
476
477 stage('Ask for manual confirmation') {
478 input message: "Do you really want to continue with the rollback?"
479 }
480
Jiri Broulik0798e512017-11-13 17:00:58 +0100481 def domain = salt.getPillar(pepperEnv, 'I@salt:master', '_param:cluster_domain')
482 domain = domain['return'][0].values()[0]
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400483
chnyda625f4b42017-10-11 14:10:31 +0200484 _pillar = salt.getGrain(pepperEnv, 'I@salt:control', 'id')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400485 kvm01 = _pillar['return'][0].values()[0].values()[0]
486 print(_pillar)
487 print(kvm01)
488
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100489 def proxy_general_target = ""
490 def proxy_target_hosts = salt.getMinions(pepperEnv, 'I@horizon:server')
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100491 def node_count = 1
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400492
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100493 for (t in proxy_target_hosts) {
494 def target = t.split("\\.")[0]
Jiri Broulik42dfbb12017-11-13 11:27:45 +0100495 proxy_general_target = target.replaceAll('\\d+$', "")
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100496 _pillar = salt.getPillar(pepperEnv, "${kvm01}", "salt:control:cluster:internal:node:prx0${node_count}:provider")
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100497 def nodeProvider = _pillar['return'][0].values()[0]
498 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'virt.destroy', ["${target}.${domain}"], null, true)
499 sleep(2)
500 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'file.copy', ["/root/${target}.${domain}.qcow2.bak", "/var/lib/libvirt/images/${target}.${domain}/system.qcow2"], null, true)
501 try {
502 salt.cmdRun(pepperEnv, 'I@salt:master', "salt-key -d ${target}.${domain} -y")
503 } catch (Exception e) {
504 common.warningMsg('does not match any accepted, unaccepted or rejected keys. They were probably already removed. We should continue to run')
505 }
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100506 node_count++
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100507 }
508 def control_general_target = ""
Marek Celoudead57b92017-11-13 16:41:12 +0100509 def control_target_hosts = salt.getMinions(pepperEnv, 'I@keystone:server').sort()
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100510 node_count = 1
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400511
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100512 for (t in control_target_hosts) {
513 def target = t.split("\\.")[0]
Jiri Broulik42dfbb12017-11-13 11:27:45 +0100514 control_general_target = target.replaceAll('\\d+$', "")
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100515 _pillar = salt.getPillar(pepperEnv, "${kvm01}", "salt:control:cluster:internal:node:ctl0${node_count}:provider")
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100516 def nodeProvider = _pillar['return'][0].values()[0]
517 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'virt.destroy', ["${target}.${domain}"], null, true)
518 sleep(2)
519 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'file.copy', ["/root/${target}.${domain}.qcow2.bak", "/var/lib/libvirt/images/${target}.${domain}/system.qcow2"], null, true)
520 try {
521 salt.cmdRun(pepperEnv, 'I@salt:master', "salt-key -d ${target}.${domain} -y")
522 } catch (Exception e) {
523 common.warningMsg('does not match any accepted, unaccepted or rejected keys. They were probably already removed. We should continue to run')
524 }
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100525 node_count++
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400526 }
527
528 // database restore section
529 try {
chnyda625f4b42017-10-11 14:10:31 +0200530 salt.runSaltProcessStep(pepperEnv, 'I@galera:slave', 'service.stop', ['mysql'], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400531 } catch (Exception e) {
532 common.warningMsg('Mysql service already stopped')
533 }
534 try {
chnyda625f4b42017-10-11 14:10:31 +0200535 salt.runSaltProcessStep(pepperEnv, 'I@galera:master', 'service.stop', ['mysql'], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400536 } catch (Exception e) {
537 common.warningMsg('Mysql service already stopped')
538 }
539 try {
chnyda625f4b42017-10-11 14:10:31 +0200540 salt.cmdRun(pepperEnv, 'I@galera:slave', "rm /var/lib/mysql/ib_logfile*")
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400541 } catch (Exception e) {
542 common.warningMsg('Files are not present')
543 }
544 try {
chnyda625f4b42017-10-11 14:10:31 +0200545 salt.cmdRun(pepperEnv, 'I@galera:master', "rm -rf /var/lib/mysql/*")
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400546 } catch (Exception e) {
547 common.warningMsg('Directory already empty')
548 }
549 try {
chnyda625f4b42017-10-11 14:10:31 +0200550 salt.runSaltProcessStep(pepperEnv, 'I@galera:master', 'file.remove', ["/var/lib/mysql/.galera_bootstrap"], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400551 } catch (Exception e) {
552 common.warningMsg('File is not present')
553 }
chnyda625f4b42017-10-11 14:10:31 +0200554 salt.cmdRun(pepperEnv, 'I@galera:master', "sed -i '/gcomm/c\\wsrep_cluster_address=\"gcomm://\"' /etc/mysql/my.cnf")
555 _pillar = salt.getPillar(pepperEnv, "I@galera:master", 'xtrabackup:client:backup_dir')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400556 backup_dir = _pillar['return'][0].values()[0]
557 if(backup_dir == null || backup_dir.isEmpty()) { backup_dir='/var/backups/mysql/xtrabackup' }
558 print(backup_dir)
chnyda625f4b42017-10-11 14:10:31 +0200559 salt.runSaltProcessStep(pepperEnv, 'I@galera:master', 'file.remove', ["${backup_dir}/dbrestored"], null, true)
560 salt.cmdRun(pepperEnv, 'I@xtrabackup:client', "su root -c 'salt-call state.sls xtrabackup'")
561 salt.runSaltProcessStep(pepperEnv, 'I@galera:master', 'service.start', ['mysql'], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400562
563 // wait until mysql service on galera master is up
chnyda625f4b42017-10-11 14:10:31 +0200564 salt.commandStatus(pepperEnv, 'I@galera:master', 'service mysql status', 'running')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400565
chnyda625f4b42017-10-11 14:10:31 +0200566 salt.runSaltProcessStep(pepperEnv, 'I@galera:slave', 'service.start', ['mysql'], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400567 //
568
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100569 node_count = 1
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100570 for (t in control_target_hosts) {
571 def target = t.split("\\.")[0]
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100572 _pillar = salt.getPillar(pepperEnv, "${kvm01}", "salt:control:cluster:internal:node:ctl0${node_count}:provider")
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100573 def nodeProvider = _pillar['return'][0].values()[0]
574 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'virt.start', ["${target}.${domain}"], null, true)
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100575 node_count++
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100576 }
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100577 node_count = 1
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100578 for (t in proxy_target_hosts) {
579 def target = t.split("\\.")[0]
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100580 _pillar = salt.getPillar(pepperEnv, "${kvm01}", "salt:control:cluster:internal:node:prx0${node_count}:provider")
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100581 def nodeProvider = _pillar['return'][0].values()[0]
582 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'virt.start', ["${target}.${domain}"], null, true)
Jiri Broulik21b4f4d2017-11-13 14:04:46 +0100583 node_count++
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100584 }
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400585
586 // salt 'cmp*' cmd.run 'service nova-compute restart'
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100587 salt.runSaltProcessStep(pepperEnv, 'I@nova:compute', 'service.restart', ['nova-compute'], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400588
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100589 for (t in control_target_hosts) {
590 def target = t.split("\\.")[0]
591 salt.minionPresent(pepperEnv, 'I@salt:master', "${target}")
592 }
593 for (t in proxy_target_hosts) {
594 def target = t.split("\\.")[0]
595 salt.minionPresent(pepperEnv, 'I@salt:master', "${target}")
596 }
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400597
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100598 salt.runSaltProcessStep(pepperEnv, "${control_general_target}*", 'service.restart', ['nova-conductor'], null, true)
599 salt.runSaltProcessStep(pepperEnv, "${control_general_target}*", 'service.restart', ['nova-scheduler'], null, true)
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400600
Jiri Broulik3f5ed1a2017-11-10 17:35:52 +0100601 salt.cmdRun(pepperEnv, "${control_general_target}01*", '. /root/keystonerc; nova service-list; glance image-list; nova flavor-list; nova hypervisor-list; nova list; neutron net-list; cinder list; heat service-list')
Ruslan Kamaldinov6feef402017-08-02 16:55:58 +0400602 }
Jiri Broulikbb447ac2017-05-04 15:36:22 +0200603 }
604}