我一直在努力训练自己掌握 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 ://sreeinet.wordpress.com/2014/09/20/cisco-ucs-automation-using-python-sdk/ <--这是我脚本中大部分代码的来源从,主要道具到 Sreenivas。
我的脚本: 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