CLI ISIS LSDB Data Plugin
This module designed to process ISIS Link State Database (LSDB) of network devices CLI output and make diagram out of it.
Show commands output from devices parsed using TTP Templates into a dictionary structure.
After parsing, results processed further to form a dictionary of nodes and links keyed
by unique nodes and links identifiers, dictionary values are nodes dictionaries and for links
it is a list of dictionaries of links between pair of nodes. For nodes ISIS RID
used as a unique ID, for links it is sorted tuple of source
, target
and label
keys’ values. This structure helps to eliminate duplicates.
Next step is post processing, such as packing links between nodes or IP lookups.
Last step is to populate N2G drawing with new nodes and links using from_dict
method.
Features Supported
Support matrix
Platform Name |
ISIS LSDB |
---|---|
cisco_ios |
— |
cisco_xr |
YES |
cisco_nxos |
— |
huawei |
— |
Required Commands output
cisco_xr:
show isis database verbose
- mandatory output, used to parse ISIS LSDB content
Sample usage
Code to populate yEd diagram object with ISIS LSDB sourced nodes and links:
from N2G import yed_diagram as create_yed_diagram
from N2G import cli_isis_data
isis_lsdb_data = {"cisco_xr": ['''
RP/0/RP0/CPU0:ROUTER-X1#show isis database verbose
IS-IS 1234 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
ROUTER-X1.00-00 * 0x00000832 0x74bc 64943/* 0/0/0
Auth: Algorithm HMAC-MD5, Length: 17
Area Address: 49.1234
NLPID: 0xcc
Router ID: 10.211.1.1
Hostname: ROUTER-X1
Metric: 0 IP-Extended 10.211.1.1/32
Prefix Attribute Flags: X:1 R:0 N:0 E:0 A:0
Metric: 16777214 IS-Extended ROUTER-X2.00
Local Interface ID: 9, Remote Interface ID: 50
Interface IP Address: 10.123.0.17
Neighbor IP Address: 10.123.0.18
Affinity: 0x00000000
Physical BW: 10000000 kbits/sec
Reservable Global pool BW: 0 kbits/sec
Global Pool BW Unreserved:
[0]: 0 kbits/sec [1]: 0 kbits/sec
[2]: 0 kbits/sec [3]: 0 kbits/sec
[4]: 0 kbits/sec [5]: 0 kbits/sec
[6]: 0 kbits/sec [7]: 0 kbits/sec
Admin. Weight: 1000
Ext Admin Group: Length: 32
0x00000000 0x00000000
0x00000000 0x00000000
0x00000000 0x00000000
0x00000000 0x00000000
Physical BW: 10000000 kbits/sec
Metric: 802 IS-Extended ROUTER-X5.00
Local Interface ID: 7, Remote Interface ID: 53
Interface IP Address: 10.123.0.25
Neighbor IP Address: 10.123.0.26
Affinity: 0x00000000
Physical BW: 10000000 kbits/sec
Reservable Global pool BW: 0 kbits/sec
Global Pool BW Unreserved:
[0]: 0 kbits/sec [1]: 0 kbits/sec
[2]: 0 kbits/sec [3]: 0 kbits/sec
[4]: 0 kbits/sec [5]: 0 kbits/sec
[6]: 0 kbits/sec [7]: 0 kbits/sec
Admin. Weight: 802
Ext Admin Group: Length: 32
0x00000000 0x00000000
0x00000000 0x00000000
0x00000000 0x00000000
0x00000000 0x00000000
Physical BW: 10000000 kbits/sec
ROUTER-X2.00-00 0x00000826 0x4390 65258/65535 0/0/0
Auth: Algorithm HMAC-MD5, Length: 17
Area Address: 49.1234
NLPID: 0xcc
Router ID: 10.211.1.2
Hostname: ROUTER-X2
Metric: 0 IP-Extended 10.211.1.2/32
Prefix Attribute Flags: X:1 R:0 N:0 E:0 A:0
Metric: 301 IS-Extended ROUTER-X6.00
Local Interface ID: 48, Remote Interface ID: 53
Interface IP Address: 10.123.0.33
Neighbor IP Address: 10.123.0.34
Affinity: 0x00000000
Physical BW: 10000000 kbits/sec
Reservable Global pool BW: 0 kbits/sec
Global Pool BW Unreserved:
[0]: 0 kbits/sec [1]: 0 kbits/sec
[2]: 0 kbits/sec [3]: 0 kbits/sec
[4]: 0 kbits/sec [5]: 0 kbits/sec
[6]: 0 kbits/sec [7]: 0 kbits/sec
Admin. Weight: 301
Ext Admin Group: Length: 32
0x00000000 0x00000000
0x00000000 0x00000000
0x00000000 0x00000000
0x00000000 0x00000000
Physical BW: 10000000 kbits/sec
Metric: 16777214 IS-Extended ROUTER-X1.00
Local Interface ID: 50, Remote Interface ID: 9
Interface IP Address: 10.123.0.18
Neighbor IP Address: 10.123.0.17
Affinity: 0x00000000
Physical BW: 10000000 kbits/sec
Reservable Global pool BW: 0 kbits/sec
Global Pool BW Unreserved:
[0]: 0 kbits/sec [1]: 0 kbits/sec
[2]: 0 kbits/sec [3]: 0 kbits/sec
[4]: 0 kbits/sec [5]: 0 kbits/sec
[6]: 0 kbits/sec [7]: 0 kbits/sec
Admin. Weight: 1000
Ext Admin Group: Length: 32
0x00000000 0x00000000
0x00000000 0x00000000
0x00000000 0x00000000
0x00000000 0x00000000
Physical BW: 10000000 kbits/sec
Total Level-2 LSP count: 2 Local Level-2 LSP count: 1
RP/0/RP0/CPU0:ROUTER-X1#
''']
}
drawing = create_yed_diagram()
drawer = cli_isis_data(drawing)
drawer.work(isis_lsdb_data)
drawing.dump_file()
API Reference
- class N2G.plugins.data.cli_isis_data.cli_isis_data(drawing, ttp_vars: Optional[dict] = None, ip_lookup_data: Optional[dict] = None, add_connected: bool = False, ptp_filter: Optional[list] = None, add_data: bool = True, platforms: Optional[list] = None)
Main class to instantiate ISIS LSDB Data Plugin object.
- Parameters
drawing – (obj) N2G Diagram object
ttp_vars – (dict) Dictionary to use as vars attribute while instantiating TTP parser object
platforms – (list) - list of platform names to process e.g.
cisco_ios
,cisco_xr
etc, default is_all_
ip_lookup_data – (dict or str) IP Lookup dictionary or OS path to CSV file
add_connected – (bool) if True, will add connected subnets as nodes, default is False
ptp_filter – (list) list of glob patterns to filter point-to-point links based on link IP
add_data – (bool) if True (default) adds data information to nodes and links
ip_lookup_data
dictionary must be keyed by ISSI RID IP address, with values being dictionary which must containhostname
key with optional additional keys to use for N2G diagram module node, e.g.label
,top_label
,bottom_label
,interface``etc. If ``ip_lookup_data
is an OS path to CSV file, that file’s first column header must beip
, file must containhostname
column, other columns values set to N2G diagram module node attributes, e.g.label
,top_label
,bottom_label
,interface
etc.If lookup data contains
interface
key, it will be added to link label.Sample ip_lookup_data dictionary:
{ "1.1.1.1": { "hostname": "router-1", "bottom_label": "1 St address, City X", "interface": "Gi1" } }
Sample ip_lookup_data CSV file:
ip,hostname,bottom_label,interface 1.1.1.1,router-1,"1 St address, City X",Gi1
- work(data)
Method to parse text data and add nodes and links to N2G drawing.
- Parameters
data – (dict or str) dictionary keyed by platform name or OS path string to directories with text files
If data is dictionary, keys must correspond to “Platform” column in Features Supported section table, values are lists of text items to process.
Data dictionary sample:
data = { "cisco_ios" : ["h1", "h2"], "cisco_xr": ["h3", "h4"], "cisco_nxos": ["h5", "h6"], ...etc... }
Where
hX
device’s show commands output.If data is an OS path directory string, child directories’ names must correspond to Platform column in Features Supported section table. Each child directory should contain text files with show commands output for each device, names of files are arbitrary, but output should contain device prompt to extract device hostname.
Directories structure sample:
├───folder_with_data ├───cisco_ios │ switch1.txt │ switch2.txt └───cisco_nxos nxos_switch_1.txt nxos_switch_2.txt
To point N2G to above location
data
attribute string can be/var/data/n2g/folder_with_data/