【问题标题】:Cisco UCS Python SDK script for querying Firmware versions用于查询固件版本的 Cisco UCS Python SDK 脚本
【发布时间】:2016-02-15 15:55:38
【问题描述】:

我一直在努力训练自己掌握 Python 的伟大之处,而我学习的最佳方法之一就是边做边学。因此,我从事的众多项目之一是从我们的 Cisco UCS 环境中提取固件信息。发现Cisco提供了一个Python SDK来查询UCS后;我以此为出发点。下面是用于阐明什么是 UCS 和 UCS Python SDK 的链接。

思科 UCS 说明: http://www.cisco.com/c/en/us/products/servers-unified-computing/index.html

思科 UCS Python SDK: https://communities.cisco.com/docs/DOC-37174

引用自 Cisco 开发网站的脚本:https://sreeninet.wordpress.com/2014/09/20/cisco-ucs-automation-using-python-sdk/

我的脚本: http://pastebin.com/txjnHi9q

我只想提取每个服务器刀片、机箱和结构互连的名称、型号和固件版本。因此,使用 Cisco 提供的 SDK 和上面链接的大部分脚本,我的脚本能够登录到我们的 UCS 并查询 A 和 B Fabric Interconnects、UCS 管理器并获取模型和固件版本。

我的脚本显示的结果类似于:

UCS Manager Version: 2.2(3f)

Fabric Interconnect A:
Model: N10-S6200
Software Ver: 5.2(3)N2(2.23f)

Fabric Interconnect B:
Model: N10-S6200
Software Ver: 5.2(3)N2(2.23f)

Blade Chassis:
N20-C6508
N20-C6508
Blade Servers:
N20-B6625-1
N20-B6625-1

如上所示,我已成功检索到 Fabric Interconnects 和 UCS Manager 的固件版本。我尝试使用相同的方法来提取刀片机箱和刀片服务器的名称、型号和固件,但对于这个新手来说,事情变得更加困难。

查看上面链接的脚本的第 46 行,它显示了以下代码:

molist = handle.GetManagedObject(None, None, {OrgOrg.DN:"sys/mgmt/fw-system"}

“sys/mgmt/fw-system”是我在尝试获取固件版本时感到困惑的地方。我只能获得第 124 行和第 133 行中引用的刀片和机箱型号,如下所示。

molist = handle.GetManagedObject(None, EquipmentChassis.ClassId())
molist1 = handle.GetManagedObject(None, ComputeBlade.ClassId())

UCS 将刀片的固件存储在“sys/chassis-N/slot-N/mgmt/fw-system”中,其中 N 是机箱和插槽的编号。我试图将机箱 1 增加到机箱 2 -3 -4,依此类推,将插槽 1 增加到插槽 2 -3 -4。这不起作用,因为机箱的数量和每个机箱中的刀片数量并不总是相同的。例如,每个机箱最多可容纳 8 个服务器刀片(插槽),但并非所有机箱都安装了全部 8 个。有些有 2 个刀片,有些有 6 个,等等。一旦我通过第一个机箱并尝试增加到机箱 2,脚本就会无限期地暂停。这可能无关紧要,但我还需要考虑到机箱和插槽可以以三位数编号。

关于如何在 Python 中进行上述操作有什么想法吗?

如果我错过了任何相关信息,我深表歉意。我很乐意回答我能回答的任何问题。 :D

【问题讨论】:

    标签: python cisco ucs


    【解决方案1】:

    我确定您现在已经找到了解决问题的方法,但是我偶然发现了这篇文章,正在寻找类似的东西。

    思科对其 Python SDK 做了一些更改,但看起来非常相似。

    我从获得所有机箱开始:

    from ucsmsdk.ucshandle import UcsHandle
    handle = UcsHandle(host, login, pwd)
    handle.login()
    
    for chassis in handle.query_classid(class_id="EquipmentChassis"):
    

    查询机箱的孩子找到刀片:

      for chassis_child in handle.query_children(in_mo=chassis):
          if chassis_child.get_class_id() == 'ComputeBlade':
    

    现在我得到了一个 ComputeBlade 对象,其中包含许多有用的东西可以放入我们的 CMDB。但是要找到固件版本,我们必须进一步挖掘。首先找到BIOS:

             for blade_part in handle.query_children(in_mo=chassis_child):
                 if blade_part.get_class_id() == 'BiosUnit':
                     for bios_part in handle.query_children(in_mo=blade_part):
                         if bios_part.get_class_id() == 'FirmwareRunning':
                             print chassis_child.dn, bios_part.version
    

    phew .. 这不是很优雅,我希望在 SDK 中找到一种更简单的方法来执行此操作,但我希望它可以帮助其他人开始使用 UCSM sdk。

    【讨论】:

      猜你喜欢
      • 2018-11-17
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多