Advertisement
Guest User

Cisco Firmware Version Query

a guest
Nov 13th, 2015
975
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.21 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. import getpass
  4. import optparse
  5. from UcsSdk import *
  6. from UcsSdk.MoMeta.EquipmentChassis import EquipmentChassis
  7.  
  8. def loadAllMo():
  9.         import os
  10.         import UcsSdk
  11.         exports = []
  12.         globals_, locals_ = globals(), locals()
  13.         package_path = os.path.dirname(UcsSdk.__file__)
  14.         package_name = os.path.basename(package_path)
  15.         mometa_path = os.path.join(package_path,'MoMeta')
  16.         for filename in os.listdir(mometa_path):
  17.                 modulename, ext = os.path.splitext(filename)
  18.                 if not modulename.endswith('Meta') and ext in ('.py') and modulename != '__init__':
  19.                         subpackage = '{0}.{1}'.format(package_name+".MoMeta", modulename)
  20.                         module = __import__(subpackage, globals_, locals_, [modulename])
  21.                         modict = module.__dict__
  22.                         names = [name for name in modict if name[0] != '_']
  23.                         exports.extend(names)
  24.                         globals_.update((name, modict[name]) for name in names)
  25.  
  26. def getpassword(prompt):
  27.     if platform.system() == "Linux":
  28.         return getpass.unix_getpass(prompt=prompt)
  29.     elif platform.system() == "Windows" or platform.system() == "Microsoft":
  30.         return getpass.win_getpass(prompt=prompt)
  31.     else:
  32.         return getpass.getpass(prompt=prompt)
  33.  
  34. # Get Ethernet mode
  35. def getEthernetMode(handle):
  36.     molist = handle.GetManagedObject(None, None, {OrgOrg.DN:"fabric/lan"})
  37.     if (molist != None):
  38.           for mo in molist:
  39.                for prop in UcsUtils.GetUcsPropertyMetaAttributeList(mo.propMoMeta.name):
  40.                     if(str(prop) == "Mode"):
  41.                         ethmode =  mo.getattr(prop)
  42.     return ethmode
  43.  
  44. # Get software version
  45. def getSwVersion(handle):
  46.     molist = handle.GetManagedObject(None, None, {OrgOrg.DN:"sys/mgmt/fw-system"})
  47.     if (molist != None):
  48.         for mo in molist:
  49.             for prop in UcsUtils.GetUcsPropertyMetaAttributeList(mo.propMoMeta.name):
  50.                 if(str(prop) == "Version"):
  51.                     version =  mo.getattr(prop)
  52.     return version
  53.  
  54. # Get HA mode
  55. def getHaMode(handle):
  56.     molist = handle.GetManagedObject(None, None, {OrgOrg.DN:"sys"})
  57.     if (molist != None):
  58.         for mo in molist:
  59.             for prop in UcsUtils.GetUcsPropertyMetaAttributeList(mo.propMoMeta.name):
  60.                 if(str(prop) == "Mode"):
  61.                     hamode =  mo.getattr(prop)
  62.     return hamode
  63.  
  64. # Get FI model(for cluster 2 models will be returned)
  65. def getFiModel(handle):
  66.     fi_model = {}
  67.     molist = handle.GetManagedObject(None, None, {OrgOrg.DN:"sys/switch-A"})
  68.     if (molist != None):
  69.         for mo in molist:
  70.             for prop in UcsUtils.GetUcsPropertyMetaAttributeList(mo.propMoMeta.name):
  71.                 if(str(prop) == "Model"):
  72.                     fi_model[0] =  mo.getattr(prop)
  73.  
  74.     # Get FI Model for B if its cluster
  75.     if (hamode == 'cluster'):
  76.         molist = handle.GetManagedObject(None, None, {OrgOrg.DN:"sys/switch-B"})
  77.         if (molist != None):
  78.             for mo in molist:
  79.                 for prop in UcsUtils.GetUcsPropertyMetaAttributeList(mo.propMoMeta.name):
  80.                     if(str(prop) == "Model"):
  81.                         fi_model[1] =  mo.getattr(prop)
  82.  
  83.     return fi_model
  84.  
  85. def getFiSwVersion(handle):
  86.     fi_version = {}
  87.     molist = handle.GetManagedObject(None, None, {OrgOrg.DN:"sys/switch-A/mgmt/fw-system"})
  88.     if (molist != None):
  89.         for mo in molist:
  90.             for prop in UcsUtils.GetUcsPropertyMetaAttributeList(mo.propMoMeta.name):
  91.                 if(str(prop) == "Version"):
  92.                     fi_version[0] =  mo.getattr(prop)
  93.  
  94.         molist = handle.GetManagedObject(None, None, {OrgOrg.DN:"sys/switch-B/mgmt/fw-system"})
  95.         if (molist != None):
  96.             for mo in molist:
  97.                 for prop in UcsUtils.GetUcsPropertyMetaAttributeList(mo.propMoMeta.name):
  98.                     if(str(prop) == "Version"):
  99.                         fi_version[1] =  mo.getattr(prop)
  100.     return fi_version
  101.  
  102. def getFiBootSwVersion(handle):
  103.     fi_boot_version = {}
  104.     molist = handle.GetManagedObject(None, None, {OrgOrg.DN:"sys/switch-A/mgmt/fw-boot-loader"})
  105.     if (molist != None):
  106.         for mo in molist:
  107.             for prop in UcsUtils.GetUcsPropertyMetaAttributeList(mo.propMoMeta.name):
  108.                 if(str(prop) == "Version"):
  109.                     fi_boot_version[0] =  mo.getattr(prop)
  110.  
  111.         molist = handle.GetManagedObject(None, None, {OrgOrg.DN:"sys/switch-B/mgmt/fw-boot-loader"})
  112.         if (molist != None):
  113.             for mo in molist:
  114.                 for prop in UcsUtils.GetUcsPropertyMetaAttributeList(mo.propMoMeta.name):
  115.                     if(str(prop) == "Version"):
  116.                         fi_boot_version[1] =  mo.getattr(prop)
  117.     return fi_boot_version
  118.  
  119. # Get Blade chassis model details
  120. def getBladeDetail(handle):
  121.     chassis_model = []
  122.     server_model = []
  123.  
  124.     molist = handle.GetManagedObject(None, EquipmentChassis.ClassId())
  125.     chassis_cnt = 0
  126.     if (molist != None):
  127.         for mo in molist:
  128.             chassis_cnt = chassis_cnt + 1
  129.             for prop in UcsUtils.GetUcsPropertyMetaAttributeList(mo.propMoMeta.name):
  130.                 if(str(prop) == "Model"):
  131.                     chassis_model.append(mo.getattr(prop))
  132.  
  133.             molist1 = handle.GetManagedObject(None, ComputeBlade.ClassId())
  134.             server_cnt = 0
  135.             if (molist1 != None):
  136.                 for mo1 in molist1:
  137.                     server_cnt = server_cnt + 1
  138.                     for prop in UcsUtils.GetUcsPropertyMetaAttributeList(mo1.propMoMeta.name):
  139.                         if(str(prop) == "Model"):
  140.                             server_model.append(mo1.getattr(prop))
  141.  
  142.     return chassis_model, server_model
  143.  
  144. # Get Rack server model details
  145. def getRackDetail(handle):
  146.     rack_model = []
  147.  
  148.     molist = handle.GetManagedObject(None, ComputeRackUnit.ClassId())
  149.     rack_cnt = 0
  150.     if (molist != None):
  151.         for mo in molist:
  152.             rack_cnt = rack_cnt + 1
  153.             for prop in UcsUtils.GetUcsPropertyMetaAttributeList(mo.propMoMeta.name):
  154.                 if(str(prop) == "Model"):
  155.                     rack_model.append(mo.getattr(prop))
  156.  
  157.     return rack_model
  158.  
  159. if __name__ == "__main__":
  160.     loadAllMo()
  161.     handle = UcsHandle()
  162.     try:
  163.         parser = optparse.OptionParser()
  164.         parser.add_option('-i', '--ip',dest="ip",
  165.                           help="[Mandatory] UCSM IP Address")
  166.         parser.add_option('-u', '--username',dest="userName",
  167.                           help="[Mandatory] Account Username for UCSM Login")
  168.         parser.add_option('-p', '--password',dest="password",
  169.                           help="[Mandatory] Account Password for UCSM Login")
  170.  
  171.         (options, args) = parser.parse_args()
  172.  
  173.         if not options.ip:
  174.             parser.print_help()
  175.             parser.error("Provide UCSM IP Address")
  176.         if not options.userName:
  177.             parser.print_help()
  178.             parser.error("Provide UCSM UserName")
  179.         if not options.password:
  180.             options.password=getpassword("UCSM Password:")
  181.  
  182.         handle.Login(options.ip,options.userName,options.password)
  183.  
  184.         # Get Ethernet Mode
  185.         ethmode = getEthernetMode(handle)
  186.  
  187.         # Get software version
  188.         version = getSwVersion(handle)
  189.  
  190.         # Get FI software version
  191.         fiversion = getFiSwVersion(handle)
  192.  
  193.         # Get FI software version
  194.         fibootversion = getFiBootSwVersion(handle)
  195.  
  196.         # Get cluster/standalone
  197.         hamode = getHaMode(handle)
  198.  
  199.         # Get FI model for A
  200.         model = getFiModel(handle)
  201.  
  202.         # Get chassis and servers
  203.         chassismodel, servermodel = getBladeDetail(handle)
  204.  
  205.         # Get rack servers
  206.         rackmodel = getRackDetail(handle)
  207.  
  208.         print '<b>Development UCS</b><br><br>'
  209.         print '<b>HA Mode:</b>', hamode, '<br>'
  210.         print '<b>Ethernet Mode:</b>', ethmode, '<br>'
  211.         print '<b>UCS Manager Version:</b>', version, '<br><br>'
  212.         print '<b>Fiber Interconnect A:</b>', '<br>'
  213.         print '<b>Model:</b>', model[0], '<br>', '<b>Software Ver:</b>', fiversion[0], '<br>', '<b>Boot Loader Ver:</b>', fibootversion[0].strip(), '<br><br>'
  214.  
  215.         if (hamode == 'cluster'):
  216.             print '<b>Fiber Interconnect B:</b>', '<br>'
  217.             print '<b>Model:</b>', model[1], '<br>', '<b>Software Ver:</b>', fiversion[1], '<br>', '<b>Boot Loader Ver:</b>', fibootversion[1].strip(), '<br><br>'
  218.         print "<b>Blade chassis:</b>", '<br>'
  219.         i = 0
  220.         while (i < len(chassismodel)):
  221.             print chassismodel[i], '<br>'
  222.             i = i + 1
  223.  
  224.         print "<b>Blade servers:</b>", '<br>'
  225.         i = 0
  226.         while (i < len(servermodel)):
  227.             print servermodel[i], '<br>'
  228.             i = i + 1
  229.  
  230.         print "Rack servers:"
  231.         i = 0
  232.         while (i < len(rackmodel)):
  233.             print rackmodel[i], '<br>'
  234.             i = i + 1
  235.  
  236.         handle.Logout()
  237.  
  238.     except Exception, err:
  239.         handle.Logout()
  240.         print "Exception:", str(err)
  241.         import traceback, sys
  242.         print '-'*60
  243.         traceback.print_exc(file=sys.stdout)
  244.         print '-'*60
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement