Skip to content

Commit db5db65

Browse files
author
Ferenc Born
authored
Merge pull request #40 from schubergphilis/fix/unmanage-poolmaster-only
Unmanage the cluster only when rebooting poolmaster
2 parents 5191625 + ba8dc52 commit db5db65

1 file changed

Lines changed: 30 additions & 24 deletions

File tree

xenserver_rolling_reboot.py

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def handleArguments(argv):
141141

142142
# Check cloudstack IDs
143143
if DEBUG == 1:
144-
print "Note: Checking CloudStack IDs of provided input.."
144+
print "Note: Checking IDs of provided input.."
145145
clusterID = c.checkCloudStackName(
146146
{'csname': clustername, 'csApiCall': 'listClusters'})
147147
if clusterID == 1:
@@ -196,7 +196,7 @@ def handleArguments(argv):
196196
print "Warning: We are running in DRYRUN mode."
197197
print
198198
print "This script will: "
199-
print " - Set cluster " + clustername + " to unmanage in CloudStack"
199+
print " - Set cluster " + clustername + " to Unmanage"
200200
print " - Turn OFF XenServer poolHA for " + clustername
201201
print " - For any hypervisor it will do this (poolmaster " + poolmaster.name + " first):"
202202
print " - put it to Disabled aka Maintenance in XenServer"
@@ -206,8 +206,8 @@ def handleArguments(argv):
206206
print " - set the hypervisor to Enabled in XenServer"
207207
print " - continues to the next hypervisor"
208208
print " - When the rebooting is done, it enables XenServer poolHA again for " + clustername
209-
print " - Finally, it sets the " + clustername + " to Managed again in CloudStack"
210-
print " - CloudStack will update its admin according to the new situation"
209+
print " - Finally, it sets the " + clustername + " to Managed again"
210+
print " - Database will be updated according to the new situation"
211211
print "Then the reboot cyclus for " + clustername + " is done!"
212212
print
213213
print "To kick it off, run with the --exec flag."
@@ -218,16 +218,6 @@ def handleArguments(argv):
218218
# Start time
219219
print "Note: Starting @ " + time.strftime("%Y-%m-%d %H:%M")
220220

221-
# Set to unmanage in CloudStack
222-
print "Note: Setting cluster " + clustername + " to Unmanaged in CloudStack"
223-
clusterUpdateReturn = c.updateCluster(
224-
{'clusterid': clusterID, 'managedstate': 'Unmanaged'})
225-
226-
if clusterUpdateReturn == 1 or clusterUpdateReturn is None:
227-
print "Error: Unmanaging cluster " + clustername + " failed. Halting."
228-
disconnect_all()
229-
sys.exit(1)
230-
231221
# Check HA of Cluster
232222
pool_ha = x.pool_ha_check(poolmaster)
233223
if pool_ha == "Error":
@@ -248,6 +238,18 @@ def handleArguments(argv):
248238

249239
# Do the poolmaster first
250240
if poolmaster.name not in ignoreHosts:
241+
242+
# BEFORE: Set to Unmanage
243+
print "Note: Setting cluster " + clustername + " to Unmanaged"
244+
clusterUpdateReturn = c.updateCluster(
245+
{'clusterid': clusterID, 'managedstate': 'Unmanaged'})
246+
247+
if clusterUpdateReturn == 1 or clusterUpdateReturn is None:
248+
print "Error: Unmanaging cluster " + clustername + " failed. Halting."
249+
disconnect_all()
250+
sys.exit(1)
251+
252+
# Migrate all VMs off of pool master
251253
vm_count = x.host_get_vms(poolmaster)
252254
if vm_count:
253255
print "Note: " + poolmaster.name + " (poolmaster) has " + vm_count + " VMs running."
@@ -261,23 +263,27 @@ def handleArguments(argv):
261263
print "Error: Unable to contact the poolmaster " + poolmaster.name
262264
disconnect_all()
263265
sys.exit(1)
266+
267+
# AFTER: Set to Manage
268+
print "Note: Setting cluster " + clustername + " back to Managed"
269+
clusterUpdateReturn = c.updateCluster(
270+
{'clusterid': clusterID, 'managedstate': 'Managed'})
271+
272+
if clusterUpdateReturn == 1 or clusterUpdateReturn is None:
273+
print "Error: Managing cluster " + clustername + " failed. Please check manually."
274+
disconnect_all()
275+
sys.exit(1)
276+
277+
print "Note: Waiting 30s to allow all hosts connect.."
278+
time.sleep(30)
279+
264280
else:
265281
print "Warning: Skipping " + poolmaster.name + " due to --ignore-hosts setting"
266282

267283
# Print overview
268284
checkBonds = True
269285
c.printHypervisors(clusterID, poolmaster.name, checkBonds)
270286

271-
# Set to manage in CloudStack
272-
print "Note: Setting cluster " + clustername + " back to Managed in CloudStack"
273-
clusterUpdateReturn = c.updateCluster(
274-
{'clusterid': clusterID, 'managedstate': 'Managed'})
275-
276-
if clusterUpdateReturn == 1 or clusterUpdateReturn is None:
277-
print "Error: Managing cluster " + clustername + " failed. Please check manually."
278-
disconnect_all()
279-
sys.exit(1)
280-
281287
# Print cluster info
282288
print "Note: Some info about cluster '" + clustername + "':"
283289
c.printCluster(clusterID)

0 commit comments

Comments
 (0)