@@ -161,14 +161,13 @@ def Help():
161161 return parser
162162
163163def 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
173172def 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
297289def 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
321306def 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
352333def 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-
380356def 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-
411381def 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-
435398def 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-
463420def 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-
487437def 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-
514456def 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-
543478def 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-
567495def 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-
591512def loadCfgFile ():
592513 options = dict ()
593514 try :
0 commit comments