Skip to content

Commit 063d550

Browse files
committed
bug 9787: fix tools
status 9787: resolved fixed
1 parent 8a68e81 commit 063d550

2 files changed

Lines changed: 71 additions & 150 deletions

File tree

cloud-cli/bindir/cloudvoladm

Lines changed: 71 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -161,14 +161,13 @@ def Help():
161161
return parser
162162

163163
def httpErrorHandler(code, msg):
164-
if code == 430:
165-
info = msg.split(":")[1]
166-
info = info.split("<")[0]
167-
print "Reason:" + info
168-
elif code == 436:
169-
print msg
170-
elif code == 530:
171-
print "Internal Error"
164+
try:
165+
errtext = xml.dom.minidom.parseString(msg)
166+
if errtext.getElementsByTagName("errortext") is not None:
167+
err = getText(errtext.getElementsByTagName("errortext")[0].childNodes).strip()
168+
print err
169+
except:
170+
print "Internal Error %s"%msg
172171

173172
def getText(nodelist):
174173
rc = []
@@ -274,7 +273,8 @@ def createvol(options):
274273
output = cloudtool.main(['cloud-tool', 'createVolumeOnFiler', '--ipaddress=' + NetAppServerIP , '--aggregatename=' + options.aggregate_name,
275274
'--poolname=' + options.pool_name, '--volumename=' + options.vol_name,
276275
'--size=' + options.size,
277-
'--username=' + NetAppUserName, '--password=' + NetAppPassword, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort)] + args)
276+
'--username=' + NetAppUserName, '--password=' + NetAppPassword, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"] + args)
277+
print "Successfully added volume"
278278
except urllib2.HTTPError, err:
279279
code = err.code
280280
msg = err.read()
@@ -285,21 +285,14 @@ def createvol(options):
285285
print "executing createvol cmd failed: %s" % (err.reason)
286286
sys.exit(1)
287287

288-
xmlResult = xml.dom.minidom.parseString(output)
289-
result = getText(xmlResult.getElementsByTagName("success")[0].childNodes).strip()
290-
if result == "true":
291-
print "Successfully added volume"
292-
else:
293-
exception = getText(xmlResult.getElementsByTagName("exception")[0].childNodes).strip()
294-
print "Unable to add volume: %s" %(exception)
295-
296288

297289
def deletevol(options):
298290
validate_parameter(options, delvolParser)
299291

300292
try:
301293
output = cloudtool.main(['cloud-tool', 'destroyVolumeOnFiler', '--ipaddress=' + NetAppServerIP, '--aggregatename=' + options.aggregate_name,
302-
'--volumename=' + options.vol_name, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort)])
294+
'--volumename=' + options.vol_name, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
295+
print "Successfully deleted volume"
303296
except urllib2.HTTPError, err:
304297
code = err.code
305298
msg = err.read()
@@ -309,20 +302,23 @@ def deletevol(options):
309302
except urllib2.URLError, err:
310303
print "executing deletevol cmd failed: %s" % (err.reason)
311304
sys.exit(1)
312-
313-
xmlResult = xml.dom.minidom.parseString(output)
314-
result = getText(xmlResult.getElementsByTagName("success")[0].childNodes).strip()
315-
if result == "true":
316-
print "Successfully deleted volume"
317-
else:
318-
exception = getText(xmlResult.getElementsByTagName("exception")[0].childNodes).strip()
319-
print "Unable to delete volume: %s"% (exception)
320305

321306
def listvol(options):
322307
validate_parameter(options, listvolParser)
323308

324309
try:
325-
output = cloudtool.main(['cloud-tool', 'listVolumesOnFiler', '--poolname=' + options.pool_name, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort)])
310+
output = cloudtool.main(['cloud-tool', 'listVolumesOnFiler', '--poolname=' + options.pool_name, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"]).strip("\n")
311+
312+
xmlResult = xml.dom.minidom.parseString(output)
313+
print "%-10s %-20s %-20s %-40s %-20s %-30s "%('Id', 'Address', 'Aggregate', 'Volume', 'Size(GB)', 'snapshotPolicy', )
314+
for volume in xmlResult.getElementsByTagName("volume"):
315+
aggregatename = getText(volume.getElementsByTagName('aggregatename')[0].childNodes).strip()
316+
id = getText(volume.getElementsByTagName('id')[0].childNodes).strip()
317+
volumeName = getText(volume.getElementsByTagName('volumename')[0].childNodes).strip()
318+
snapshotPolicy = getText(volume.getElementsByTagName('snapshotpolicy')[0].childNodes).strip()
319+
ipaddress = getText(volume.getElementsByTagName('ipaddress')[0].childNodes).strip()
320+
volSize = getText(volume.getElementsByTagName('size')[0].childNodes).strip()
321+
print "%-10s %-20s %-20s %-40s %-20s %-30s "%(id, ipaddress, aggregatename, volumeName, volSize, snapshotPolicy)
326322
except urllib2.HTTPError, err:
327323
code = err.code
328324
msg = err.read()
@@ -333,28 +329,20 @@ def listvol(options):
333329
print "executing listvol cmd failed: %s" % (err.reason)
334330
sys.exit(1)
335331

336-
xmlResult = xml.dom.minidom.parseString(output)
337-
result = getText(xmlResult.getElementsByTagName("success")[0].childNodes).strip()
338-
if result == "true":
339-
print "%-10s %-20s %-20s %-40s %-20s %-30s "%('Id', 'Address', 'Aggregate', 'Volume', 'Size(GB)', 'snapshotPolicy', )
340-
for volume in xmlResult.getElementsByTagName("volume"):
341-
aggregatename = getText(volume.getElementsByTagName('aggregatename')[0].childNodes).strip()
342-
id = getText(volume.getElementsByTagName('id')[0].childNodes).strip()
343-
volumeName = getText(volume.getElementsByTagName('volumename')[0].childNodes).strip()
344-
snapshotPolicy = getText(volume.getElementsByTagName('snapshotpolicy')[0].childNodes).strip()
345-
ipaddress = getText(volume.getElementsByTagName('ipaddress')[0].childNodes).strip()
346-
volSize = getText(volume.getElementsByTagName('volsizestr')[0].childNodes).strip()
347-
print "%-10s %-20s %-20s %-40s %-20s %-30s "%(id, ipaddress, aggregatename, volumeName, volSize, snapshotPolicy)
348-
else:
349-
exception = getText(xmlResult.getElementsByTagName("exception")[0].childNodes).strip()
350-
print "Unable to list volume: %s"% (exception)
351332

352333
def createlun(options):
353334
validate_parameter(options, createlunParser)
354335

355336
try:
356-
output = cloudtool.main(['cloud-tool', 'createLunOnFiler', '--poolname=' + options.pool_name,
357-
'--size=' + options.size, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort)])
337+
output = cloudtool.main(['cloud-tool', 'createLunOnFiler', '--name=' + options.pool_name,
338+
'--size=' + options.size, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
339+
340+
xmlResult = xml.dom.minidom.parseString(output.strip("\n"))
341+
path = getText(xmlResult.getElementsByTagName("path")[0].childNodes).strip()
342+
iqn = getText(xmlResult.getElementsByTagName("iqn")[0].childNodes).strip()
343+
ipAddr = getText(xmlResult.getElementsByTagName('ipaddress')[0].childNodes).strip()
344+
print "%-30s %-30s %-50s "%('LUN Name', 'Address', 'Target IQN')
345+
print "%-30s %-30s %-50s "%(path, ipAddr, iqn)
358346
except urllib2.HTTPError, err:
359347
code = err.code
360348
msg = err.read()
@@ -365,24 +353,21 @@ def createlun(options):
365353
print "executing createlun cmd failed: %s" % (err.reason)
366354
sys.exit(1)
367355

368-
xmlResult = xml.dom.minidom.parseString(output)
369-
result = getText(xmlResult.getElementsByTagName("success")[0].childNodes).strip()
370-
if result == "true":
371-
path = getText(xmlResult.getElementsByTagName("path")[0].childNodes).strip()
372-
iqn = getText(xmlResult.getElementsByTagName("iqn")[0].childNodes).strip()
373-
ipAddr = getText(xmlResult.getElementsByTagName('ipaddress')[0].childNodes).strip()
374-
print "%-30s %-30s %-50s "%('LUN Name', 'Address', 'Target IQN')
375-
print "%-30s %-30s %-50s "%(path, ipAddr, iqn)
376-
else:
377-
exception = getText(xmlResult.getElementsByTagName("exception")[0].childNodes).strip()
378-
print "Unable to create lun: %s"% (exception)
379-
380356
def listlun(options):
381357
validate_parameter(options, listlunParser)
382358

383-
args = ["--poolname=" + options.pool_name, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort)]
359+
args = ["--poolname=" + options.pool_name, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"]
384360
try:
385-
output = cloudtool.main(['cloud-tool', 'listLunsOnFiler'] + args)
361+
output = cloudtool.main(['cloud-tool', 'listLunsOnFiler'] + args).strip("\n")
362+
xmlResult = xml.dom.minidom.parseString(output)
363+
364+
print "%-10s %-10s %-50s %-30s "%('LUN Id', 'Volume Id', 'Target IQN', 'LUN Name')
365+
for volume in xmlResult.getElementsByTagName("lun"):
366+
uuid = getText(volume.getElementsByTagName('id')[0].childNodes).strip()
367+
path = getText(volume.getElementsByTagName('name')[0].childNodes).strip()
368+
targetiqn = getText(volume.getElementsByTagName('iqn')[0].childNodes).strip()
369+
volumeId = getText(volume.getElementsByTagName('volumeid')[0].childNodes).strip()
370+
print "%-10s %-10s %-50s %-30s "%(uuid, volumeId, targetiqn, path)
386371
except urllib2.HTTPError, err:
387372
code = err.code
388373
msg = err.read()
@@ -393,27 +378,13 @@ def listlun(options):
393378
print "executing listlun cmd failed: %s" % (err.reason)
394379
sys.exit(1)
395380

396-
xmlResult = xml.dom.minidom.parseString(output)
397-
result = getText(xmlResult.getElementsByTagName("success")[0].childNodes).strip()
398-
if result == "true":
399-
print "%-10s %-10s %-50s %-30s "%('LUN Id', 'Volume Id', 'Target IQN', 'LUN Name')
400-
for volume in xmlResult.getElementsByTagName("lun"):
401-
uuid = getText(volume.getElementsByTagName('id')[0].childNodes).strip()
402-
path = getText(volume.getElementsByTagName('name')[0].childNodes).strip()
403-
targetiqn = getText(volume.getElementsByTagName('targetiqn')[0].childNodes).strip()
404-
volumeId = getText(volume.getElementsByTagName('volumeid')[0].childNodes).strip()
405-
print "%-10s %-10s %-50s %-30s "%(uuid, volumeId, targetiqn, path)
406-
else:
407-
exception = getText(xmlResult.getElementsByTagName("exception")[0].childNodes).strip()
408-
print "Unable to list lun: %s"% (exception)
409-
410-
411381
def destroylun(options):
412382
validate_parameter(options, destroylunParser)
413383

414384
try:
415385
output = cloudtool.main(['cloud-tool', 'destroyLunOnFiler', '--path=' + options.lun_name,
416-
"--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort)])
386+
"--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
387+
print "Successfully destroyed LUN"
417388
except urllib2.HTTPError, err:
418389
code = err.code
419390
msg = err.read()
@@ -424,20 +395,18 @@ def destroylun(options):
424395
print "executing destroylun failed: %s" % (err.reason)
425396
sys.exit(1)
426397

427-
xmlResult = xml.dom.minidom.parseString(output)
428-
result = getText(xmlResult.getElementsByTagName("success")[0].childNodes).strip()
429-
if result == "true":
430-
print "Successfully destroyed LUN"
431-
else:
432-
exception = getText(xmlResult.getElementsByTagName("exception")[0].childNodes).strip()
433-
print "Unable to destroy lun: %s" % (exception)
434-
435398
def assoclun(options):
436399
validate_parameter(options, assocLunParser)
437400

438401
try:
439402
output = cloudtool.main(['cloud-tool', 'associateLun', '--name=' + options.lun_name,
440-
'--iqn=' + options.guest_iqn, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort)])
403+
'--iqn=' + options.guest_iqn, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
404+
xmlResult = xml.dom.minidom.parseString(output.strip("\n"))
405+
lunid = getText(xmlResult.getElementsByTagName("id")[0].childNodes).strip()
406+
iqn = getText(xmlResult.getElementsByTagName("targetiqn")[0].childNodes).strip()
407+
ipAddr = getText(xmlResult.getElementsByTagName('ipaddress')[0].childNodes).strip()
408+
print "%-30s %-30s %-50s "%('LUN Id', 'Address', 'Target IQN')
409+
print "%-30s %-30s %-50s" % (lunid, ipAddr, iqn)
441410
except urllib2.HTTPError, err:
442411
code = err.code
443412
msg = err.read()
@@ -448,24 +417,13 @@ def assoclun(options):
448417
print "executing assoclun failed: %s" % (err.reason)
449418
sys.exit(1)
450419

451-
xmlResult = xml.dom.minidom.parseString(output)
452-
result = getText(xmlResult.getElementsByTagName("success")[0].childNodes).strip()
453-
if result == "true":
454-
lunid = getText(xmlResult.getElementsByTagName("lunid")[0].childNodes).strip()
455-
iqn = getText(xmlResult.getElementsByTagName("targetiqn")[0].childNodes).strip()
456-
ipAddr = getText(xmlResult.getElementsByTagName('ipaddress')[0].childNodes).strip()
457-
print "%-30s %-30s %-50s "%('LUN Id', 'Address', 'Target IQN')
458-
print "%-30s %-30s %-50s" % (lunid, ipAddr, iqn)
459-
else:
460-
exception = getText(xmlResult.getElementsByTagName("exception")[0].childNodes).strip()
461-
print "Unable to assoclun: %s" % (exception)
462-
463420
def disassoclun(options):
464421
validate_parameter(options, disassocLunParser)
465422

466423
try:
467424
output = cloudtool.main(['cloud-tool', 'dissociateLun', '--path=' + options.lun_name,
468-
'--iqn=' + options.guest_iqn, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort)])
425+
'--iqn=' + options.guest_iqn, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
426+
print "Successfully dissociated LUN"
469427
except urllib2.HTTPError, err:
470428
code = err.code
471429
msg = err.read()
@@ -476,45 +434,37 @@ def disassoclun(options):
476434
print "executing disassoclun failed: %s" % (err.reason)
477435
sys.exit(1)
478436

479-
xmlResult = xml.dom.minidom.parseString(output)
480-
result = getText(xmlResult.getElementsByTagName("success")[0].childNodes).strip()
481-
if result == "true":
482-
print "Successfully dissociated LUN"
483-
else:
484-
exception = getText(xmlResult.getElementsByTagName("exception")[0].childNodes).strip()
485-
print "Unable to dissociate lun: %s" % (exception)
486-
487437
def createpool(options):
488438
validate_parameter(options, createPoolParser)
489439

490440
if not (options.algorithm == "roundrobin" or options.algorithm == "leastfull"):
491441
print "Only roundrobin or leastfull algorithm is supported"
492442
sys.exit(1)
493443
try:
494-
output = cloudtool.main(['cloud-tool', 'createPool', '--poolname=' + options.pool_name,
495-
'--algorithm=' + options.algorithm, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort)])
444+
output = cloudtool.main(['cloud-tool', 'createPool', '--name=' + options.pool_name,
445+
'--algorithm=' + options.algorithm, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
446+
print "Successfully created pool"
496447
except urllib2.HTTPError, err:
497448
code = err.code
498-
msg = err.read()
499449
print "executing createpool cmd failed, http returning error code: %s" % (code)
500-
httpErrorHandler(code, msg)
450+
httpErrorHandler(code, err.read())
501451
sys.exit(1)
502452
except urllib2.URLError, err:
503453
print "executing createpool failed: %s" % (err.reason)
504454
sys.exit(1)
505455

506-
xmlResult = xml.dom.minidom.parseString(output)
507-
result = getText(xmlResult.getElementsByTagName("success")[0].childNodes).strip()
508-
if result == "true":
509-
print "Successfully created pool"
510-
else:
511-
exception = getText(xmlResult.getElementsByTagName("exception")[0].childNodes).strip()
512-
print "Unable to create pool: %s" % (exception)
513-
514456
def listpools(options):
515457
try:
516458
output = cloudtool.main(['cloud-tool', 'listPools',
517-
"--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort)])
459+
"--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
460+
output = output.strip("\n")
461+
xmlResult = xml.dom.minidom.parseString(output)
462+
print "%-10s %-40s %-10s" %('Id', 'Pool Name', 'Algorithm')
463+
for volume in xmlResult.getElementsByTagName("pool"):
464+
id = getText(volume.getElementsByTagName('id')[0].childNodes).strip()
465+
poolname = getText(volume.getElementsByTagName('name')[0].childNodes).strip()
466+
alg = getText(volume.getElementsByTagName('algorithm')[0].childNodes).strip()
467+
print "%-10s %-40s %-10s"%(id, poolname, alg)
518468
except urllib2.HTTPError, err:
519469
code = err.code
520470
msg = err.read()
@@ -525,27 +475,13 @@ def listpools(options):
525475
print "executing listpools failed, due to: %s" % (err.reason)
526476
sys.exit(1)
527477

528-
xmlResult = xml.dom.minidom.parseString(output)
529-
result = getText(xmlResult.getElementsByTagName("success")[0].childNodes).strip()
530-
if result == "true":
531-
print "%-10s %-40s %-10s" %('Id', 'Pool Name', 'Algorithm')
532-
for volume in xmlResult.getElementsByTagName("pool"):
533-
id = getText(volume.getElementsByTagName('id')[0].childNodes).strip()
534-
poolname = getText(volume.getElementsByTagName('poolname')[0].childNodes).strip()
535-
alg = getText(volume.getElementsByTagName('algorithm')[0].childNodes).strip()
536-
print "%-10s %-40s %-10s"%(id, poolname, alg)
537-
538-
else:
539-
exception = getText(xmlResult.getElementsByTagName("exception")[0].childNodes).strip()
540-
print "Unable to list pool: %s"% (exception)
541-
542-
543478
def modifypool(options):
544479
validate_parameter(options, modifyPoolParser)
545480

546481
try:
547482
output = cloudtool.main(['cloud-tool', 'modifyPool', '--poolname=' + options.pool_name,
548-
'--algorithm=' + options.algorithm, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort)])
483+
'--algorithm=' + options.algorithm, "--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
484+
print "Successfully modified pool"
549485
except urllib2.HTTPError, err:
550486
code = err.code
551487
msg = err.read()
@@ -556,20 +492,13 @@ def modifypool(options):
556492
print "executing modifypool failed, due to: %s" % (err.reason)
557493
sys.exit(1)
558494

559-
xmlResult = xml.dom.minidom.parseString(output)
560-
result = getText(xmlResult.getElementsByTagName("success")[0].childNodes).strip()
561-
if result == "true":
562-
print "Successfully modified pool"
563-
else:
564-
exception = getText(xmlResult.getElementsByTagName("exception")[0].childNodes).strip()
565-
print "Unable to modify pool: %s" % (exception)
566-
567495
def destroypool(options):
568496
validate_parameter(options, destroyPoolParser)
569497

570498
try:
571499
output = cloudtool.main(['cloud-tool', 'deletePool', '--poolname=' + options.pool_name,
572-
"--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort)])
500+
"--server=" + CloudStackSvrIP + ":" + str(CloudStackSvrPort), "--stripxml=false"])
501+
print "Successfully destroyed pool: " + options.pool_name
573502
except urllib2.HTTPError, err:
574503
code = err.code
575504
msg = err.read()
@@ -580,14 +509,6 @@ def destroypool(options):
580509
print "executing destroypool failed, due to: %s" % (err.reason)
581510
sys.exit(1)
582511

583-
xmlResult = xml.dom.minidom.parseString(output)
584-
result = getText(xmlResult.getElementsByTagName("success")[0].childNodes).strip()
585-
if result == "true":
586-
print "Successfully destroyed pool: " + options.pool_name
587-
else:
588-
exception = getText(xmlResult.getElementsByTagName("exception")[0].childNodes).strip()
589-
print "Unable to destroy pool: %s " % (exception)
590-
591512
def loadCfgFile():
592513
options = dict()
593514
try:

deps/cloud-manageontap.jar

54.1 KB
Binary file not shown.

0 commit comments

Comments
 (0)