【发布时间】:2017-08-17 12:31:52
【问题描述】:
我正在编写一个 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 和 Port ID。简而言之,我想将输出分解为单独的行,根据包含 MAC 地址的行进行过滤并提取有趣的信息(Bay ID 和 Port ID)。为了使事情变得更难,输出可能会有稍微不同的格式,如下所示:
解决这个问题的最佳方法是什么?
【问题讨论】:
-
是否尝试过 grepping? `grep -E 'mac1|man2|macN'
-
我相信这可以在 *nix 环境中工作,但我想留在这个 python 脚本中,我想使用这个输出来执行另一组操作,例如在每个刀片交换机的这些端口中设置 VLAN。
标签: python networking scripting paramiko