我正在编写一个python脚本,它将连接到HP C7000机箱上的Onboard Admin,列出所有刀片服务器并根据名称确定Bay ID,然后使用它来列出内部交换机端口ID。
登录后,执行脚本的第二部分(显示实际的端口映射)。响应缓冲区将包含此长字符串。
b'show server port map 1\r\n Mezz\r\nMezz Mezz Device Port Interconnect Interconnect\r\nSlot Device Port Status Bay Bay Port Device ID\r\n---- ------ ------ ---------- ------------ ------------ ----------------\r\n\r\n------------------------------- Blade 001 -------------------------------\r\n\r\n 1 QLogic QMH2562 8Gb FC HBA for HP BladeSystem c-Class\r\n Port 1 OK Bay 3 Port 1 50:01:43:80:21:db:8c:54\r\n Port 2 OK Bay 4 Port 1 50:01:43:80:21:db:8c:56\r\n\r\n 2 Not Present\r\n\r\n 3 Not Present\r\n\r\n FlexFabric Embedded Ethernet\r\n Ethernet (NIC 1) LOM:1-a OK Bay 1 Port 9 00:9C:02:AA:8C:58\r\niSCSI HBA (iSCSI 1) LOM:1-b OK Bay 1 Port 9 00:9C:02:AA:8C:59\r\n FCoE HBA LOM:1-b OK Bay 1 Port 9 10:00:00:9C:02:AA:8C:59\r\n Ethernet (NIC 2) LOM:2-a OK Bay 2 Port 9 00:9C:02:AA:8C:5C\r\niSCSI HBA (iSCSI 2) LOM:2-b OK Bay 2 Port 9 00:9C:02:AA:8C:5D\r\n FCoE HBA LOM:2-b OK Bay 2 Port 9 10:00:00:9C:02:AA:8C:5D\r\n Ethernet (NIC 5) LOM:3-a OK Bay 1 Port 1 00:9C:02:AA:8C:60\r\niSCSI HBA (iSCSI 3) LOM:3-b OK Bay 1 Port 1 00:9C:02:AA:8C:61\r\n FCoE HBA LOM:3-b OK Bay 1 Port 1 10:00:00:9C:02:AA:8C:61\r\n Ethernet (NIC 6) LOM:4-a OK Bay 2 Port 1 00:9C:02:AA:8C:64\r\niSCSI HBA (iSCSI 4) LOM:4-b OK Bay 2 Port 1 00:9C:02:AA:8C:65\r\n FCoE HBA LOM:4-b OK Bay 2 Port 1 10:00:00:9C:02:AA:8C:65\r\n[maros@jump ~]$ '
使用.decode(“utf-8”)对其进行格式化,这使我的人类输出更具可读性
对我来说有趣的是具有MAC地址的线路,因为它们包含Bay ID和端口ID。简而言之,我想将输出分解为单独的行,根据包含MAC地址的那些进行过滤并提取有趣的信息(Bay ID和Port ID)。为了使事情变得更难,输出可能会有一些不同的格式:
最好的办法是什么?
答案 0 :(得分:0)
这实际上听起来很简单,如果你使用正则表达式,因为只有你感兴趣的行,实际上包含所有属性(bay id,port id和mac)。
想象一下下面的测试(它实际上可以写成一个衬垫,但是让它扩展为更容易阅读):
import re
r=re.compile(r"\sPort\s+(\d+)\s+Bay\s+(\d+)\s+(([0-9A-F]{2}:){5,}..)")
for line in lines:
m = r.match(line)
if not m: continue
print("We have bay %s slot %s mac %s"%(m.group(1), m.group(2), m.group(3))