【发布时间】: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
【问题讨论】: