2015-11-13 3 views
1

Я работаю над тем, чтобы тренироваться в величии, которая является Python, и один из лучших способов для меня учиться - это делать. Итак, один из многих проектов, которые я рассмотрел, - это вывести информацию о прошивке из наших сред Cisco UCS. После обнаружения того, что Cisco предоставляет Python SDK для запроса UCS; Я использовал это как отправную точку. Ниже приведены ссылки для разъяснения того, что такое UCS, и SDC UCS Python.Сценарий Cisco UCS Python SDK для запросов версий прошивки

Cisco UCS Descrition:http://www.cisco.com/c/en/us/products/servers-unified-computing/index.html

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

Script ссылки с сайта Dev Cisco:https://sreeninet.wordpress.com/2014/09/20/cisco-ucs-automation-using-python-sdk/ < - это где большая часть кода в моей Сценарий пришел от главного реквизита к Sreenivas.

Мой сценарий:http://pastebin.com/txjnHi9q

Я просто хочу, чтобы вытащить имя, модель и версию прошивки для каждого из блейд-серверов, шасси и ткани межсоединений. Таким образом, используя SDK, предоставленный Cisco, и большой фрагмент сценария, связанный выше, мой сценарий может войти в нашу 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 Межкомпонентные и UCS. Я попытался использовать тот же метод для вытаскивания имени, модели и прошивки Blade Chassis и Blade Servers, но для этого новичка этому становится все труднее.

Глядя на линии 46 моего сценария, связанного выше, показывает этот код:

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

«SYS/Упр/ФВ-система», где я запутаться при попытке получить версию прошивки. Я могу получить только номер модели лезвия и шасси, как показано на строках 124 и 133, как показано ниже.

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

ПСК хранит прошивки для лопастей в «SYS/шасси-Н/слот-N/Упр/Fw-системы», где N есть число шасси и слот. Я попытался просто увеличить шасси-1 до шасси-2 -3 -4 и так далее и слот-1 до слота-2 -3 -4. Это не сработало, потому что количество шасси и количество лезвий в каждом шасси не всегда одинаковы. Например, каждое шасси может содержать до 8 серверных лезвий (слот), но не все шасси имеют все 8 установленных. У некоторых есть 2 лезвия, у которых есть 6 и т. Д. После того, как я прошел мимо первого шасси и попытался увеличить его до шасси-2, скрипт просто приостановился бы бесконечно. Это может быть неважно, но я также должен учитывать, что шасси и слоты могут указывать в трехзначных цифрах.

Любые идеи о том, как это сделать в Python?

Приносим извинения, если я пропустил какую-либо соответствующую информацию. Я с удовольствием отвечу на любые вопросы. : D

ответ

0

Я уверен, что вы нашли решение своей проблемы, но я наткнулся на это сообщение, ища что-то подобное.

Cisco внесла несколько изменений в свой SDK Python, но выглядит довольно похоже.

Я начал с получать все шасси:

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 

Уф .. Это был не очень элегантно, и я надеюсь найти более простой способ сделать это в SDK, но я надеюсь, что это помогает кто-то еще, начиная с UCSM sdk.

 Смежные вопросы

  • Нет связанных вопросов^_^