| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 1 | /** | 
 | 2 |  * | 
 | 3 |  * Upgrade Ceph mon/mgr/osd/rgw/client | 
 | 4 |  * | 
 | 5 |  * Requred parameters: | 
 | 6 |  *  SALT_MASTER_URL                 URL of Salt master | 
 | 7 |  *  SALT_MASTER_CREDENTIALS         Credentials to the Salt API | 
 | 8 |  * | 
 | 9 |  *  ADMIN_HOST                      Host (minion id) with admin keyring and /etc/crushmap file present | 
 | 10 |  *  CLUSTER_FLAGS                   Comma separated list of tags to apply to cluster | 
 | 11 |  *  WAIT_FOR_HEALTHY                Wait for cluster rebalance before stoping daemons | 
 | 12 |  *  ORIGIN_RELEASE                  Ceph release version before upgrade | 
 | 13 |  *  TARGET_RELEASE                  Ceph release version after upgrade | 
 | 14 |  *  STAGE_UPGRADE_MON               Set to True if Ceph mon nodes upgrade is desired | 
 | 15 |  *  STAGE_UPGRADE_MGR               Set to True if Ceph mgr nodes upgrade or new deploy is desired | 
 | 16 |  *  STAGE_UPGRADE_OSD               Set to True if Ceph osd nodes upgrade is desired | 
 | 17 |  *  STAGE_UPGRADE_RGW               Set to True if Ceph rgw nodes upgrade is desired | 
 | 18 |  *  STAGE_UPGRADE_CLIENT            Set to True if Ceph client nodes upgrade is desired (includes for example ctl/cmp nodes) | 
| Michael Vollman | bcec46f | 2019-05-07 08:10:00 -0400 | [diff] [blame] | 19 |  *  STAGE_FINALIZE                  Set to True if configs recommended for TARGET_RELEASE should be set after upgrade is done | 
 | 20 |  *  BACKUP_ENABLED                  Select to copy the disks of Ceph VMs before upgrade and backup Ceph directories on OSD nodes | 
 | 21 |  *  BACKUP_DIR                      Select the target dir to backup to when BACKUP_ENABLED | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 22 |  * | 
 | 23 |  */ | 
 | 24 |  | 
 | 25 | common = new com.mirantis.mk.Common() | 
 | 26 | salt = new com.mirantis.mk.Salt() | 
 | 27 | def python = new com.mirantis.mk.Python() | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 28 | ceph = new com.mirantis.mk.Ceph() | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 29 |  | 
 | 30 | def pepperEnv = "pepperEnv" | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 31 | flags = CLUSTER_FLAGS.tokenize(',') | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 32 |  | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 33 | def backup(master, target) { | 
| Jiri Broulik | 96c867a | 2017-11-07 16:14:10 +0100 | [diff] [blame] | 34 |     stage("backup ${target}") { | 
 | 35 |  | 
| Jiri Broulik | fd2dcaf | 2017-12-08 15:19:51 +0100 | [diff] [blame] | 36 |         if (target == 'osd') { | 
| Jiri Broulik | 96c867a | 2017-11-07 16:14:10 +0100 | [diff] [blame] | 37 |             try { | 
| Jiri Broulik | fd2dcaf | 2017-12-08 15:19:51 +0100 | [diff] [blame] | 38 |                 salt.enforceState(master, "I@ceph:${target}", "ceph.backup", true) | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 39 |                 salt.cmdRun(master, "I@ceph:${target}", "su root -c '/usr/local/bin/ceph-backup-runner-call.sh'") | 
| Jiri Broulik | 96c867a | 2017-11-07 16:14:10 +0100 | [diff] [blame] | 40 |             } catch (Exception e) { | 
| Jiri Broulik | fd2dcaf | 2017-12-08 15:19:51 +0100 | [diff] [blame] | 41 |                 common.errorMsg(e) | 
 | 42 |                 common.errorMsg("Make sure Ceph backup on OSD nodes is enabled") | 
 | 43 |                 throw new InterruptedException() | 
| Jiri Broulik | 96c867a | 2017-11-07 16:14:10 +0100 | [diff] [blame] | 44 |             } | 
| Jiri Broulik | fd2dcaf | 2017-12-08 15:19:51 +0100 | [diff] [blame] | 45 |         } else { | 
 | 46 |             def _pillar = salt.getGrain(master, 'I@salt:master', 'domain') | 
 | 47 |             def domain = _pillar['return'][0].values()[0].values()[0] | 
 | 48 |  | 
 | 49 |             def kvm_pillar = salt.getGrain(master, 'I@salt:control', 'id') | 
 | 50 |             def kvm01 = kvm_pillar['return'][0].values()[0].values()[0] | 
 | 51 |  | 
 | 52 |             def target_pillar = salt.getGrain(master, "I@ceph:${target}", 'host') | 
 | 53 |             def minions = target_pillar['return'][0].values() | 
 | 54 |             for (minion in minions) { | 
 | 55 |                 def minion_name = minion.values()[0] | 
 | 56 |                 def provider_pillar = salt.getPillar(master, "${kvm01}", "salt:control:cluster:internal:node:${minion_name}:provider") | 
 | 57 |                 def minionProvider = provider_pillar['return'][0].values()[0] | 
 | 58 |  | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 59 |                 ceph.waitForHealthy(master, ADMIN_HOST, flags) | 
| Jiri Broulik | fd2dcaf | 2017-12-08 15:19:51 +0100 | [diff] [blame] | 60 |                 try { | 
| Michael Vollman | bcec46f | 2019-05-07 08:10:00 -0400 | [diff] [blame] | 61 |                     salt.cmdRun(master, "${minionProvider}", "[ ! -f ${BACKUP_DIR}/${minion_name}.${domain}.qcow2.bak ] && virsh destroy ${minion_name}.${domain}") | 
| Jiri Broulik | fd2dcaf | 2017-12-08 15:19:51 +0100 | [diff] [blame] | 62 |                 } catch (Exception e) { | 
 | 63 |                     common.warningMsg('Backup already exists') | 
 | 64 |                 } | 
 | 65 |                 try { | 
| Michael Vollman | bcec46f | 2019-05-07 08:10:00 -0400 | [diff] [blame] | 66 |                     salt.cmdRun(master, "${minionProvider}", "[ ! -f ${BACKUP_DIR}/${minion_name}.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/${minion_name}.${domain}/system.qcow2 ${BACKUP_DIR}/${minion_name}.${domain}.qcow2.bak") | 
| Jiri Broulik | fd2dcaf | 2017-12-08 15:19:51 +0100 | [diff] [blame] | 67 |                 } catch (Exception e) { | 
 | 68 |                     common.warningMsg('Backup already exists') | 
 | 69 |                 } | 
 | 70 |                 try { | 
 | 71 |                     salt.cmdRun(master, "${minionProvider}", "virsh start ${minion_name}.${domain}") | 
 | 72 |                 } catch (Exception e) { | 
 | 73 |                     common.warningMsg(e) | 
 | 74 |                 } | 
 | 75 |                 salt.minionsReachable(master, 'I@salt:master', "${minion_name}*") | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 76 |                 ceph.waitForHealthy(master, ADMIN_HOST, flags) | 
| Jiri Broulik | 96c867a | 2017-11-07 16:14:10 +0100 | [diff] [blame] | 77 |             } | 
| Jiri Broulik | 96c867a | 2017-11-07 16:14:10 +0100 | [diff] [blame] | 78 |         } | 
 | 79 |     } | 
 | 80 |     return | 
 | 81 | } | 
 | 82 |  | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 83 | def upgrade(master, target) { | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 84 |  | 
 | 85 |     stage("Change ${target} repos") { | 
 | 86 |         salt.runSaltProcessStep(master, "I@ceph:${target}", 'saltutil.refresh_pillar', [], null, true, 5) | 
 | 87 |         salt.enforceState(master, "I@ceph:${target}", 'linux.system.repo', true) | 
 | 88 |     } | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 89 |     if (target == 'mgr') { | 
 | 90 |         stage('Run ceph mgr state') { | 
 | 91 |             salt.enforceState(master, "I@ceph:mgr", "ceph.mgr", true) | 
 | 92 |         } | 
 | 93 |     } | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 94 |     if (target == 'common') { | 
 | 95 |         stage('Upgrade ceph-common pkgs') { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 96 |             salt.cmdRun(master, "I@ceph:${target}", "apt install ceph-${target} -y") | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 97 |         } | 
 | 98 |     } else { | 
| Jiri Broulik | 96c867a | 2017-11-07 16:14:10 +0100 | [diff] [blame] | 99 |         minions = salt.getMinions(master, "I@ceph:${target}") | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 100 |  | 
| Jiri Broulik | 96c867a | 2017-11-07 16:14:10 +0100 | [diff] [blame] | 101 |         for (minion in minions) { | 
 | 102 |             // upgrade pkgs | 
 | 103 |             if (target == 'radosgw') { | 
 | 104 |                 stage('Upgrade radosgw pkgs') { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 105 |                     salt.cmdRun(master, "I@ceph:${target}", "apt install ${target} -y ") | 
| Jiri Broulik | 96c867a | 2017-11-07 16:14:10 +0100 | [diff] [blame] | 106 |                 } | 
 | 107 |             } else { | 
 | 108 |                 stage("Upgrade ${target} pkgs on ${minion}") { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 109 |                     salt.cmdRun(master, "${minion}", "apt install ceph-${target} -y") | 
| Jiri Broulik | 96c867a | 2017-11-07 16:14:10 +0100 | [diff] [blame] | 110 |                 } | 
 | 111 |             } | 
 | 112 |             // restart services | 
 | 113 |             stage("Restart ${target} services on ${minion}") { | 
| Mateusz Los | aaeeb1d | 2019-09-18 21:58:54 +0200 | [diff] [blame] | 114 |                 if (target == 'osd') { | 
| Mateusz Los | b8575e6 | 2020-02-06 13:33:42 +0100 | [diff] [blame^] | 115 |                     def device_grain_name =  salt.getPillar(master,"I@ceph:osd","ceph:osd:lvm_enabled")['return'].first().containsValue(true) ? "ceph_volume" : "ceph_disk" | 
 | 116 |                     def ceph_disks = salt.getGrain(master, minion, 'ceph')['return'][0].values()[0].values()[0][device_grain_name] | 
 | 117 |                     ceph_disks.each { osd, param -> | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 118 |                         salt.cmdRun(master, "${minion}", "systemctl restart ceph-${target}@${osd}") | 
 | 119 |                         ceph.waitForHealthy(master, ADMIN_HOST, flags) | 
 | 120 |                     } | 
| Mateusz Los | aaeeb1d | 2019-09-18 21:58:54 +0200 | [diff] [blame] | 121 |                 } else { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 122 |                     salt.cmdRun(master, "${minion}", "systemctl restart ceph-${target}.target") | 
 | 123 |                     ceph.waitForHealthy(master, ADMIN_HOST, flags) | 
| Mateusz Los | aaeeb1d | 2019-09-18 21:58:54 +0200 | [diff] [blame] | 124 |                 } | 
| Jiri Broulik | 96c867a | 2017-11-07 16:14:10 +0100 | [diff] [blame] | 125 |             } | 
 | 126 |  | 
 | 127 |             stage("Verify services for ${minion}") { | 
 | 128 |                 sleep(10) | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 129 |                 salt.cmdRun(master, "${minion}", "systemctl status ceph-${target}.target") | 
| Jiri Broulik | 96c867a | 2017-11-07 16:14:10 +0100 | [diff] [blame] | 130 |             } | 
 | 131 |  | 
 | 132 |             stage('Ask for manual confirmation') { | 
 | 133 |                 input message: "From the verification command above, please check Ceph ${target} joined the cluster correctly. If so, Do you want to continue to upgrade next node?" | 
 | 134 |             } | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 135 |         } | 
 | 136 |     } | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 137 |     salt.cmdRun(master, ADMIN_HOST, "ceph versions") | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 138 |     sleep(5) | 
 | 139 |     return | 
 | 140 | } | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 141 |  | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 142 | timeout(time: 12, unit: 'HOURS') { | 
 | 143 |     node("python") { | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 144 |  | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 145 |         // create connection to salt master | 
 | 146 |         python.setupPepperVirtualenv(pepperEnv, SALT_MASTER_URL, SALT_MASTER_CREDENTIALS) | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 147 |  | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 148 |         stage('Check user choices') { | 
| Alena Kiseleva | 639b001 | 2019-01-22 17:09:33 +0300 | [diff] [blame] | 149 |             if (STAGE_UPGRADE_RGW.toBoolean() == true) { | 
 | 150 |                 // if rgw, check if other stuff has required version | 
 | 151 |                 def mon_ok = true | 
 | 152 |                 if (STAGE_UPGRADE_MON.toBoolean() == false) { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 153 |                     def mon_v = salt.cmdRun(pepperEnv, ADMIN_HOST, "ceph mon versions")['return'][0].values()[0] | 
| Alena Kiseleva | 639b001 | 2019-01-22 17:09:33 +0300 | [diff] [blame] | 154 |                     mon_ok = mon_v.contains("${TARGET_RELEASE}") && !mon_v.contains("${ORIGIN_RELEASE}") | 
 | 155 |                 } | 
 | 156 |                 def mgr_ok = true | 
 | 157 |                 if (STAGE_UPGRADE_MGR.toBoolean() == false) { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 158 |                     def mgr_v = salt.cmdRun(pepperEnv, ADMIN_HOST, "ceph mgr versions")['return'][0].values()[0] | 
| Alena Kiseleva | 639b001 | 2019-01-22 17:09:33 +0300 | [diff] [blame] | 159 |                     mgr_ok = mgr_v.contains("${TARGET_RELEASE}") && !mgr_v.contains("${ORIGIN_RELEASE}") | 
 | 160 |                 } | 
 | 161 |                 def osd_ok = true | 
 | 162 |                 if (STAGE_UPGRADE_OSD.toBoolean() == false) { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 163 |                     def osd_v = salt.cmdRun(pepperEnv, ADMIN_HOST, "ceph osd versions")['return'][0].values()[0] | 
| Alena Kiseleva | 639b001 | 2019-01-22 17:09:33 +0300 | [diff] [blame] | 164 |                     osd_ok = osd_v.contains("${TARGET_RELEASE}") && !osd_v.contains("${ORIGIN_RELEASE}") | 
 | 165 |                 } | 
 | 166 |                 if (!mon_ok || !osd_ok || !mgr_ok) { | 
 | 167 |                     common.errorMsg('You may choose stages in any order, but RGW should be upgraded last') | 
 | 168 |                     throw new InterruptedException() | 
 | 169 |                 } | 
 | 170 |             } | 
 | 171 |         } | 
 | 172 |  | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 173 |         if (BACKUP_ENABLED.toBoolean() == true) { | 
 | 174 |             if (STAGE_UPGRADE_MON.toBoolean() == true) { | 
 | 175 |                 backup(pepperEnv, 'mon') | 
 | 176 |             } | 
 | 177 |             if (STAGE_UPGRADE_RGW.toBoolean() == true) { | 
 | 178 |                 backup(pepperEnv, 'radosgw') | 
 | 179 |             } | 
 | 180 |             if (STAGE_UPGRADE_OSD.toBoolean() == true) { | 
 | 181 |                 backup(pepperEnv, 'osd') | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 182 |             } | 
 | 183 |         } | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 184 |  | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 185 |         if (flags.size() > 0) { | 
 | 186 |             stage('Set cluster flags') { | 
 | 187 |                 for (flag in flags) { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 188 |                     salt.cmdRun(pepperEnv, ADMIN_HOST, 'ceph osd set ' + flag) | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 189 |                 } | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 190 |             } | 
 | 191 |         } | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 192 |  | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 193 |         if (STAGE_UPGRADE_MON.toBoolean() == true) { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 194 |             upgrade(pepperEnv, 'mon') | 
| Mateusz Los | b8575e6 | 2020-02-06 13:33:42 +0100 | [diff] [blame^] | 195 |  | 
 | 196 |             if (TARGET_RELEASE == 'nautilus' ) { | 
 | 197 |                 salt.cmdRun(pepperEnv, ADMIN_HOST, "ceph mon enable-msgr2") | 
 | 198 |             } | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 199 |         } | 
 | 200 |  | 
 | 201 |         if (STAGE_UPGRADE_MGR.toBoolean() == true) { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 202 |             upgrade(pepperEnv, 'mgr') | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 203 |         } | 
 | 204 |  | 
 | 205 |         if (STAGE_UPGRADE_OSD.toBoolean() == true) { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 206 |             upgrade(pepperEnv, 'osd') | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 207 |         } | 
 | 208 |  | 
 | 209 |         if (STAGE_UPGRADE_RGW.toBoolean() == true) { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 210 |             upgrade(pepperEnv, 'radosgw') | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 211 |         } | 
 | 212 |  | 
 | 213 |         if (STAGE_UPGRADE_CLIENT.toBoolean() == true) { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 214 |             upgrade(pepperEnv, 'common') | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 215 |         } | 
 | 216 |  | 
 | 217 |         // remove cluster flags | 
 | 218 |         if (flags.size() > 0) { | 
 | 219 |             stage('Unset cluster flags') { | 
 | 220 |                 for (flag in flags) { | 
 | 221 |                     if (!flag.contains('sortbitwise')) { | 
 | 222 |                         common.infoMsg('Removing flag ' + flag) | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 223 |                         salt.cmdRun(pepperEnv, ADMIN_HOST, 'ceph osd unset ' + flag) | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 224 |                     } | 
 | 225 |  | 
 | 226 |                 } | 
| Jiri Broulik | 96c867a | 2017-11-07 16:14:10 +0100 | [diff] [blame] | 227 |             } | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 228 |         } | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 229 |  | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 230 |         if (STAGE_FINALIZE.toBoolean() == true) { | 
 | 231 |             stage("Finalize ceph version upgrade") { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 232 |                 salt.cmdRun(pepperEnv, ADMIN_HOST, "ceph osd require-osd-release ${TARGET_RELEASE}") | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 233 |                 try { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 234 |                     salt.cmdRun(pepperEnv, ADMIN_HOST, "ceph osd set-require-min-compat-client ${ORIGIN_RELEASE}") | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 235 |                 } catch (Exception e) { | 
 | 236 |                     common.warningMsg(e) | 
 | 237 |                 } | 
 | 238 |                 try { | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 239 |                     salt.cmdRun(pepperEnv, ADMIN_HOST, "ceph osd crush tunables optimal") | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 240 |                 } catch (Exception e) { | 
 | 241 |                     common.warningMsg(e) | 
 | 242 |                 } | 
 | 243 |             } | 
 | 244 |         } | 
 | 245 |  | 
 | 246 |         // wait for healthy cluster | 
| Ivan Berezovskiy | 2325dcb | 2019-11-05 17:42:57 +0400 | [diff] [blame] | 247 |         if (WAIT_FOR_HEALTHY.toBoolean()) { | 
 | 248 |             ceph.waitForHealthy(pepperEnv, ADMIN_HOST, flags) | 
| Jakub Josef | a63f986 | 2018-01-11 17:58:38 +0100 | [diff] [blame] | 249 |         } | 
| Jiri Broulik | dc87d72 | 2017-11-03 15:43:22 +0100 | [diff] [blame] | 250 |     } | 
 | 251 | } |