Skip to content

Commit

Permalink
Merge pull request #1215 from ExaneServerTeam/feature/nxos_ssh_get_op…
Browse files Browse the repository at this point in the history
…tics

Initial version for nxos_ssh get_optics
  • Loading branch information
mirceaulinic committed Jul 16, 2020
2 parents d12fa31 + ac35ddf commit a2743ea
Show file tree
Hide file tree
Showing 3 changed files with 812 additions and 0 deletions.
113 changes: 113 additions & 0 deletions napalm/nxos_ssh/nxos_ssh.py
Expand Up @@ -429,6 +429,17 @@ def __init__(self, hostname, username, password, timeout=60, optional_args=None)
hostname, username, password, timeout=timeout, optional_args=optional_args
)
self.platform = "nxos_ssh"
self.connector_type_map = {
"1000base-LH": "LC_CONNECTOR",
"1000base-SX": "LC_CONNECTOR",
"1000base-T": "Unknown",
"10Gbase-LR": "LC_CONNECTOR",
"10Gbase-SR": "LC_CONNECTOR",
"SFP-H10GB-CU1M": "DAC_CONNECTOR",
"SFP-H10GB-CU1.45M": "DAC_CONNECTOR",
"SFP-H10GB-CU3M": "DAC_CONNECTOR",
"SFP-H10GB-CU3.45M": "DAC_CONNECTOR",
}

def open(self):
self.device = self._netmiko_open(
Expand Down Expand Up @@ -1528,3 +1539,105 @@ def get_vlans(self):
"interfaces": self._parse_vlan_ports(vlan["vlanshowplist-ifidx"]),
}
return vlans

def get_optics(self):
command = "show interface transceiver details"
output = self._send_command(command)

# Formatting data into return data structure
optics_detail = {}

# Extraction Regexps
port_ts_re = re.compile(r"^Ether.*?(?=\nEther|\Z)", re.M | re.DOTALL)
port_re = re.compile(r"^(Ether.*)[ ]*?$", re.M)
vendor_re = re.compile("name is (.*)$", re.M)
vendor_part_re = re.compile("part number is (.*)$", re.M)
vendor_rev_re = re.compile("revision is (.*)$", re.M)
serial_no_re = re.compile("serial number is (.*)$", re.M)
type_no_re = re.compile("type is (.*)$", re.M)
rx_instant_re = re.compile(r"Rx Power[ ]+(?:(\S+?)[ ]+dBm|(N.A))", re.M)
tx_instant_re = re.compile(r"Tx Power[ ]+(?:(\S+?)[ ]+dBm|(N.A))", re.M)
current_instant_re = re.compile(r"Current[ ]+(?:(\S+?)[ ]+mA|(N.A))", re.M)

port_ts_l = port_ts_re.findall(output)

for port_ts in port_ts_l:
port = port_re.search(port_ts).group(1)
# No transceiver is present in those case
if "transceiver is not present" in port_ts:
continue
if "transceiver is not applicable" in port_ts:
continue
port_detail = {"physical_channels": {"channel": []}}
# No metric present
vendor = vendor_re.search(port_ts).group(1)
vendor_part = vendor_part_re.search(port_ts).group(1)
vendor_rev = vendor_rev_re.search(port_ts).group(1)
serial_no = serial_no_re.search(port_ts).group(1)
type_s = type_no_re.search(port_ts).group(1)
state = {
"vendor": vendor.strip(),
"vendor_part": vendor_part.strip(),
"vendor_rev": vendor_rev.strip(),
"serial_no": serial_no.strip(),
"connector_type": self.connector_type_map.get(type_s, "Unknown"),
}
if "DOM is not supported" not in port_ts:
res = rx_instant_re.search(port_ts)
input_power = res.group(1) or res.group(2)
res = tx_instant_re.search(port_ts)
output_power = res.group(1) or res.group(2)
res = current_instant_re.search(port_ts)
current = res.group(1) or res.group(2)

# If interface is shutdown it returns "N/A" as output power
# or "N/A" as input power
# Converting that to -100.0 float
try:
float(output_power)
except ValueError:
output_power = -100.0
try:
float(input_power)
except ValueError:
input_power = -100.0
try:
float(current)
except ValueError:
current = -100.0

# Defaulting avg, min, max values to -100.0 since device does not
# return these values
optic_states = {
"index": 0,
"state": {
"input_power": {
"instant": (
float(input_power) if "input_power" else -100.0
),
"avg": -100.0,
"min": -100.0,
"max": -100.0,
},
"output_power": {
"instant": (
float(output_power) if "output_power" else -100.0
),
"avg": -100.0,
"min": -100.0,
"max": -100.0,
},
"laser_bias_current": {
"instant": (float(current) if "current" else -100.0),
"avg": 0.0,
"min": 0.0,
"max": 0.0,
},
},
}
port_detail["physical_channels"]["channel"].append(optic_states)

port_detail["state"] = state
optics_detail[port] = port_detail

return optics_detail
@@ -0,0 +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 comments on commit a2743ea

Please sign in to comment.