Skip to content

Commit a2743ea

Browse files
authored
Merge pull request #1215 from ExaneServerTeam/feature/nxos_ssh_get_optics
Initial version for nxos_ssh get_optics
2 parents d12fa31 + ac35ddf commit a2743ea

File tree

3 files changed

+812
-0
lines changed

3 files changed

+812
-0
lines changed

napalm/nxos_ssh/nxos_ssh.py

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,17 @@ def __init__(self, hostname, username, password, timeout=60, optional_args=None)
429429
hostname, username, password, timeout=timeout, optional_args=optional_args
430430
)
431431
self.platform = "nxos_ssh"
432+
self.connector_type_map = {
433+
"1000base-LH": "LC_CONNECTOR",
434+
"1000base-SX": "LC_CONNECTOR",
435+
"1000base-T": "Unknown",
436+
"10Gbase-LR": "LC_CONNECTOR",
437+
"10Gbase-SR": "LC_CONNECTOR",
438+
"SFP-H10GB-CU1M": "DAC_CONNECTOR",
439+
"SFP-H10GB-CU1.45M": "DAC_CONNECTOR",
440+
"SFP-H10GB-CU3M": "DAC_CONNECTOR",
441+
"SFP-H10GB-CU3.45M": "DAC_CONNECTOR",
442+
}
432443

433444
def open(self):
434445
self.device = self._netmiko_open(
@@ -1528,3 +1539,105 @@ def get_vlans(self):
15281539
"interfaces": self._parse_vlan_ports(vlan["vlanshowplist-ifidx"]),
15291540
}
15301541
return vlans
1542+
1543+
def get_optics(self):
1544+
command = "show interface transceiver details"
1545+
output = self._send_command(command)
1546+
1547+
# Formatting data into return data structure
1548+
optics_detail = {}
1549+
1550+
# Extraction Regexps
1551+
port_ts_re = re.compile(r"^Ether.*?(?=\nEther|\Z)", re.M | re.DOTALL)
1552+
port_re = re.compile(r"^(Ether.*)[ ]*?$", re.M)
1553+
vendor_re = re.compile("name is (.*)$", re.M)
1554+
vendor_part_re = re.compile("part number is (.*)$", re.M)
1555+
vendor_rev_re = re.compile("revision is (.*)$", re.M)
1556+
serial_no_re = re.compile("serial number is (.*)$", re.M)
1557+
type_no_re = re.compile("type is (.*)$", re.M)
1558+
rx_instant_re = re.compile(r"Rx Power[ ]+(?:(\S+?)[ ]+dBm|(N.A))", re.M)
1559+
tx_instant_re = re.compile(r"Tx Power[ ]+(?:(\S+?)[ ]+dBm|(N.A))", re.M)
1560+
current_instant_re = re.compile(r"Current[ ]+(?:(\S+?)[ ]+mA|(N.A))", re.M)
1561+
1562+
port_ts_l = port_ts_re.findall(output)
1563+
1564+
for port_ts in port_ts_l:
1565+
port = port_re.search(port_ts).group(1)
1566+
# No transceiver is present in those case
1567+
if "transceiver is not present" in port_ts:
1568+
continue
1569+
if "transceiver is not applicable" in port_ts:
1570+
continue
1571+
port_detail = {"physical_channels": {"channel": []}}
1572+
# No metric present
1573+
vendor = vendor_re.search(port_ts).group(1)
1574+
vendor_part = vendor_part_re.search(port_ts).group(1)
1575+
vendor_rev = vendor_rev_re.search(port_ts).group(1)
1576+
serial_no = serial_no_re.search(port_ts).group(1)
1577+
type_s = type_no_re.search(port_ts).group(1)
1578+
state = {
1579+
"vendor": vendor.strip(),
1580+
"vendor_part": vendor_part.strip(),
1581+
"vendor_rev": vendor_rev.strip(),
1582+
"serial_no": serial_no.strip(),
1583+
"connector_type": self.connector_type_map.get(type_s, "Unknown"),
1584+
}
1585+
if "DOM is not supported" not in port_ts:
1586+
res = rx_instant_re.search(port_ts)
1587+
input_power = res.group(1) or res.group(2)
1588+
res = tx_instant_re.search(port_ts)
1589+
output_power = res.group(1) or res.group(2)
1590+
res = current_instant_re.search(port_ts)
1591+
current = res.group(1) or res.group(2)
1592+
1593+
# If interface is shutdown it returns "N/A" as output power
1594+
# or "N/A" as input power
1595+
# Converting that to -100.0 float
1596+
try:
1597+
float(output_power)
1598+
except ValueError:
1599+
output_power = -100.0
1600+
try:
1601+
float(input_power)
1602+
except ValueError:
1603+
input_power = -100.0
1604+
try:
1605+
float(current)
1606+
except ValueError:
1607+
current = -100.0
1608+
1609+
# Defaulting avg, min, max values to -100.0 since device does not
1610+
# return these values
1611+
optic_states = {
1612+
"index": 0,
1613+
"state": {
1614+
"input_power": {
1615+
"instant": (
1616+
float(input_power) if "input_power" else -100.0
1617+
),
1618+
"avg": -100.0,
1619+
"min": -100.0,
1620+
"max": -100.0,
1621+
},
1622+
"output_power": {
1623+
"instant": (
1624+
float(output_power) if "output_power" else -100.0
1625+
),
1626+
"avg": -100.0,
1627+
"min": -100.0,
1628+
"max": -100.0,
1629+
},
1630+
"laser_bias_current": {
1631+
"instant": (float(current) if "current" else -100.0),
1632+
"avg": 0.0,
1633+
"min": 0.0,
1634+
"max": 0.0,
1635+
},
1636+
},
1637+
}
1638+
port_detail["physical_channels"]["channel"].append(optic_states)
1639+
1640+
port_detail["state"] = state
1641+
optics_detail[port] = port_detail
1642+
1643+
return optics_detail
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"Ethernet1/1": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-TYCO", "vendor_part": "1-2053783-2", "vendor_rev": "T", "serial_no": "TED1842B14Q", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/2": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9520", "vendor_rev": "09", "serial_no": "MOC1843A2BG", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/3": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-TYCO", "vendor_part": "1-2053783-2", "vendor_rev": "T", "serial_no": "TED1841B92L", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/4": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-TYCO", "vendor_part": "1-2053783-2", "vendor_rev": "T", "serial_no": "TED1842B14W", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/5": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-TYCO", "vendor_part": "1-2053783-2", "vendor_rev": "T", "serial_no": "TED1841B3SN", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/6": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9520", "vendor_rev": "09", "serial_no": "MOC1846A1WH", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/7": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9520", "vendor_rev": "09", "serial_no": "MOC1843A2BZ", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/8": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9520", "vendor_rev": "09", "serial_no": "MOC1843A2AN", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/9": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9520", "vendor_rev": "09", "serial_no": "MOC1846A17G", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/10": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9520", "vendor_rev": "09", "serial_no": "MOC1846A1JA", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/11": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9520", "vendor_rev": "09", "serial_no": "MOC1843A2BC", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/12": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9520", "vendor_rev": "09", "serial_no": "MOC1846A0QS", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/13": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-TYCO", "vendor_part": "1-2053783-2", "vendor_rev": "T", "serial_no": "TED1842B19F", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/14": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-TYCO", "vendor_part": "1-2053783-2", "vendor_rev": "T", "serial_no": "TED1842B186", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/15": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-TYCO", "vendor_part": "1-2053783-2", "vendor_rev": "T", "serial_no": "TED1841B90A", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/16": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-TYCO", "vendor_part": "1-2053783-2", "vendor_rev": "T", "serial_no": "TED1842B155", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/17": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9520", "vendor_rev": "09", "serial_no": "MOC1939A7FT", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/20": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9520", "vendor_rev": "09", "serial_no": "MOC1939A80T", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/21": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9520", "vendor_rev": "09", "serial_no": "MOC1939A7W5", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/22": {"physical_channels": {"channel": [{"index": 0, "state": {"input_power": {"instant": -100.0, "avg": -100.0, "min": -100.0, "max": -100.0}, "output_power": {"instant": -100.0, "avg": -100.0, "min": -100.0, "max": -100.0}, "laser_bias_current": {"instant": 0.0, "avg": 0.0, "min": 0.0, "max": 0.0}}}]}, "state": {"vendor": "CISCO-FINISAR", "vendor_part": "FTLF1318P2BCL", "vendor_rev": "A0", "serial_no": "FNS15420WYA", "connector_type": "LC_CONNECTOR"}}, "Ethernet1/23": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-LOROM", "vendor_part": "LRHSPB54D030", "vendor_rev": "B2", "serial_no": "LRM20178056", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/24": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-LOROM", "vendor_part": "LRHSPB54D030", "vendor_rev": "B2", "serial_no": "LRM201780W1", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/25": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-LOROM", "vendor_part": "LRHSPB54D030", "vendor_rev": "B2", "serial_no": "LRM2017R011", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/26": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-LOROM", "vendor_part": "LRHSPB54D030", "vendor_rev": "B2", "serial_no": "LRM2017R00T", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/27": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-LOROM", "vendor_part": "LRHSPB54D030", "vendor_rev": "B2", "serial_no": "LRM201780CS", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/28": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-AVAGO", "vendor_part": "ABCU-5710RZ-CS4", "vendor_rev": "", "serial_no": "AGM1438228E", "connector_type": "Unknown"}}, "Ethernet1/29": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-AVAGO", "vendor_part": "ABCU-5710RZ-CS4B", "vendor_rev": "2", "serial_no": "AGM155029P2", "connector_type": "Unknown"}}, "Ethernet1/30": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-JPC", "vendor_part": "P3410UB03000-1", "vendor_rev": "A0", "serial_no": "JPC221402D8", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/31": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-JPC", "vendor_part": "P3410UB03000-1", "vendor_rev": "A0", "serial_no": "JPC22140098", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/32": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-JPC", "vendor_part": "P3410UB03000-1", "vendor_rev": "A0", "serial_no": "JPC221404J0", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/33": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-JPC", "vendor_part": "P3410UB03000-1", "vendor_rev": "A0", "serial_no": "JPC2214009K", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/34": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-AVAGO", "vendor_part": "ABCU-5710RZ-CS4", "vendor_rev": "", "serial_no": "AGM133123B4", "connector_type": "Unknown"}}, "Ethernet1/35": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-JPC", "vendor_part": "P3410UB03000-1", "vendor_rev": "A0", "serial_no": "JPC221404FY", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/36": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-JPC", "vendor_part": "P3410UB03000-1", "vendor_rev": "A0", "serial_no": "JPC221405JM", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/38": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-FINISAR", "vendor_part": "FTLF8519P2BCL-C4", "vendor_rev": "A", "serial_no": "FNS13490F31", "connector_type": "LC_CONNECTOR"}}, "Ethernet1/39": {"physical_channels": {"channel": [{"index": 0, "state": {"input_power": {"instant": -100.0, "avg": -100.0, "min": -100.0, "max": -100.0}, "output_power": {"instant": -100.0, "avg": -100.0, "min": -100.0, "max": -100.0}, "laser_bias_current": {"instant": 0.0, "avg": 0.0, "min": 0.0, "max": 0.0}}}]}, "state": {"vendor": "CISCO", "vendor_part": "FTLF1318P3BTL-CS", "vendor_rev": "A", "serial_no": "FNS1906107E", "connector_type": "LC_CONNECTOR"}}, "Ethernet1/40": {"physical_channels": {"channel": [{"index": 0, "state": {"input_power": {"instant": -100.0, "avg": -100.0, "min": -100.0, "max": -100.0}, "output_power": {"instant": -100.0, "avg": -100.0, "min": -100.0, "max": -100.0}, "laser_bias_current": {"instant": 0.0, "avg": 0.0, "min": 0.0, "max": 0.0}}}]}, "state": {"vendor": "CISCO", "vendor_part": "FTLF1318P3BTL-CS", "vendor_rev": "A", "serial_no": "FNS1906106H", "connector_type": "LC_CONNECTOR"}}, "Ethernet1/41": {"physical_channels": {"channel": [{"index": 0, "state": {"input_power": {"instant": -100.0, "avg": -100.0, "min": -100.0, "max": -100.0}, "output_power": {"instant": -100.0, "avg": -100.0, "min": -100.0, "max": -100.0}, "laser_bias_current": {"instant": 0.01, "avg": 0.0, "min": 0.0, "max": 0.0}}}]}, "state": {"vendor": "CISCO-FINISAR", "vendor_part": "FTLX8571D3BCL-C2", "vendor_rev": "", "serial_no": "FNS17040H79", "connector_type": "LC_CONNECTOR"}}, "Ethernet1/42": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-FINISAR", "vendor_part": "FTLF8519P2BCL-C4", "vendor_rev": "A", "serial_no": "FNS13300AG7", "connector_type": "LC_CONNECTOR"}}, "Ethernet1/43": {"physical_channels": {"channel": [{"index": 0, "state": {"input_power": {"instant": -2.91, "avg": -100.0, "min": -100.0, "max": -100.0}, "output_power": {"instant": -1.72, "avg": -100.0, "min": -100.0, "max": -100.0}, "laser_bias_current": {"instant": 41.98, "avg": 0.0, "min": 0.0, "max": 0.0}}}]}, "state": {"vendor": "CISCO", "vendor_part": "FTLX1474D3BCL-CS", "vendor_rev": "A", "serial_no": "FNS170605JQ", "connector_type": "LC_CONNECTOR"}}, "Ethernet1/44": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-LOROM", "vendor_part": "LRHSPB54D030", "vendor_rev": "B2", "serial_no": "LRM201780AT", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/45": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9519", "vendor_rev": "09", "serial_no": "MOC1828AFF0", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/46": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9519", "vendor_rev": "09", "serial_no": "MOC1828AFGH", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/47": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9519", "vendor_rev": "09", "serial_no": "MOC1847A3AU", "connector_type": "DAC_CONNECTOR"}}, "Ethernet1/48": {"physical_channels": {"channel": []}, "state": {"vendor": "CISCO-MOLEX", "vendor_part": "74752-9519", "vendor_rev": "09", "serial_no": "MOC1829A0G5", "connector_type": "DAC_CONNECTOR"}}}

0 commit comments

Comments
 (0)