An example of how to use TextFSM-Based Structured Processing
Create an opConfig Command Set for Cisco IOS devices (IOS_HOURLY) that:
· Runs IOS CLI commands (e.g. show interfaces)
· Uses TextFSM-based plugins: TextFsm, TextFsmTable, TextFsmInventory, AlertTextFsmMTU
· Produces structured parsed output
· Generates custom table data
· Updates inventory
· Creates user-based alerts (e.g. MTU)
This is an example output of the show interfaces command on a cisco router. This is for one of the 32 interfaces.
Ethernet2/0 is up, line protocol is up
Hardware is AmdP2, address is ca02.07c1.0038 (bia ca02.07c1.0038)
Description: pe1
Internet address is 10.248.2.58/31
MTU 1500 bytes, BW 10000 Kbit/sec, DLY 1000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
ARP type: ARPA, ARP Timeout 04:00:00
Last input never, output 00:00:01, output hang never
Last clearing of "show interface" counters never
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
0 packets input, 0 bytes, 0 no buffer
Received 0 broadcasts (0 IP multicasts)
0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 input packets with dribble condition detected
24855328 packets output, 2442241129 bytes, 0 underruns
0 output errors, 0 collisions, 1 interface resets
0 unknown protocol drops
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier
0 output buffer failures, 0 output buffers swapped out
|
Create the Command Set definition file /usr/local/omk/conf/command_sets.d/IOS_INTERFACE_INVENTORY.json
and adds the FSM plugins to Command Set.
use_processing_plugins : which plugins to run during process_configuration step,
custom_table_configuration : How many table configurations are needed and their title and columns (This only works if TextFsmTable is part of use_processing_plugins)
"use_processing_plugins" : [
"TextFsm","TextFsmTable","TextFsmInventory","AlertTextFsmMTU"
],
"custom_table_configuration" : [
{
"title" : "Custom Table Data 01",
"labels" :[ "INTERFACE","DESCRIPTION", "BANDWIDTH", "MTU","SPEED", "PROTOCOL_STATUS"]
},
{
"title" : "Custom Table Data 02",
"labels" :[ "INTERFACE","DESCRIPTION"]
}
], |
Example configuration:
When you have finished create the Command Set and manually editing it to add the TextFSM plugins, it should look like this:
{
"IOS_INTERFACE_INVENTORY" : {
"active" : "true",
"os_info" : {
"os" : "IOS"
},
"modified" : 1770074947,
"scheduling_info" : {
"run_local" : null,
"run_commands_on_separate_connection" : "false",
"attempt_timeout_recovery" : 1,
"parameters_required" : null
},
"parameters" : [],
"purging_policy" : {
"purge_older_than" : null,
"keep_last" : 0,
"autoprotect_first_revision" : null
},
"commands" : [
{
"command" : "show interfaces",
"compare_to_previous_revision" : null,
"use_collection_plugin" : "",
"tags" : [
"DAILY",
"detect-change",
"inventory",
"report-change"
],
"use_processing_plugins" : [
"TextFsm","TextFsmTable","TextFsmInventory","AlertTextFsmMTU"
],
"custom_table_configuration" : [
{
"title" : "Custom Table Data 01",
"labels" :[ "INTERFACE","DESCRIPTION", "BANDWIDTH", "MTU","SPEED", "PROTOCOL_STATUS"]
},
{
"title" : "Custom Table Data 02",
"labels" :[ "INTERFACE","DESCRIPTION"]
}
],
"report_level_min_changes" : null,
"privileged" : "false",
"multipage" : "true",
"active" : "true"
}
]
}
} |
Run using opconfig-cli:
/usr/local/omk/bin/opconfig-cli.pl act=run_command_sets nodes=omk-core2 names="IOS_INTERFACE_INVENTORY" debug=9 |
or
Create a Virtual Operator Job to run Command Set on selected nodes.
Structured parsed output from show interfaces
Note that the data has been extracted from the show interfaces command output and placed into structured and named fields in JSON format.
{"OVERRUN": "0","ENCAPSULATION": "ARPA","PROTOCOL_STATUS": "up","BIA": "ca02.07c1.0038","QUEUE_FLUSHES": "0","LAST_OUTPUT": "00:00:01","VLAN_ID_OUTER": "","LAST_OUTPUT_HANG": "never","QUEUE_MAX": "75","MEDIA_TYPE": "","FRAME": "0","ABORT": "0","LAST_INPUT": "never","SPEED": "","DELAY": "1000 usec","DUPLEX": "","QUEUE_DROPS": "0","INPUT_RATE": "0","IP_ADDRESS": "10.248.2.58","QUEUE_STRATEGY": "fifo","OUTPUT_PPS": "0","BANDWIDTH": "10000 Kbit","MAC_ADDRESS": "ca02.07c1.0038",
"MTU": "1500",
"OUTPUT_ERRORS": "0","CRC": "0","VLAN_ID": "","OUTPUT_PACKETS": "24855328","LINK_STATUS": "up","QUEUE_OUTPUT_DROPS": "0","PREFIX_LENGTH": "31","HARDWARE_TYPE": "AmdP2","OUTPUT_RATE": "0","VLAN_ID_INNER": "","DESCRIPTION": "pe1","RUNTS": "0","QUEUE_SIZE": "0","INPUT_PPS": "0","INPUT_PACKETS": "0",
"INTERFACE": "Ethernet2/0",
"INPUT_ERRORS": "0","GIANTS": "0"}, |
· Custom tables visible in opConfig UI
INTERFACE | DESCRIPTION | BANDWIDTH | MTU | SPEED | PROTOCOL_STATUS |
FastEthernet0/0 | rr1 | 10000 Kbit | 1530 | 10Mb/s | up |
FastEthernet0/1 | rr2 | 100000 Kbit | 1500 | 100Mb/s | down |
Ethernet1/0 | rr2 | 10000 Kbit | 1500 |
| down |
Ethernet1/1 | rr2 | 10000 Kbit | 1500 |
| up |
Ethernet1/2 | p1 | 10000 Kbit | 1500 |
| up |
Ethernet1/3 | p3 | 10000 Kbit | 1500 |
| up |
Ethernet1/4 | p4 | 10000 Kbit | 1500 |
| up |
Ethernet1/5 | p5 | 10000 Kbit | 1500 |
| up |
Ethernet1/6 | p6 | 10000 Kbit | 1500 |
| up |
Ethernet1/7 | pe1 | 10000 Kbit | 1500 |
| down |
Ethernet2/0 | pe1 | 10000 Kbit | 1500 |
| up |
· Inventory updates for interfaces
{
"_id" : ObjectId("65a5b8eb43c6b8c138bda392"),
"data" : {
"template_data" : {
"INPUT_RATE" : NumberInt(0),
"DUPLEX" : "",
"QUEUE_DROPS" : NumberInt(0),
"DELAY" : "1000 usec",
"ABORT" : NumberInt(0),
"LAST_INPUT" : "never",
"SPEED" : "",
"LAST_OUTPUT_HANG" : "never",
"QUEUE_MAX" : NumberInt(75),
"FRAME" : NumberInt(0),
"MEDIA_TYPE" : "",
"VLAN_ID_OUTER" : "",
"BIA" : "ca02.07c1.0038",
"LAST_OUTPUT" : "00:00:01",
"QUEUE_FLUSHES" : NumberInt(0),
"ENCAPSULATION" : "ARPA",
"OVERRUN" : NumberInt(0),
"PROTOCOL_STATUS" : "up",
"INPUT_ERRORS" : NumberInt(0),
"INTERFACE" : "Ethernet2/0",
"GIANTS" : NumberInt(0),
"INPUT_PACKETS" : NumberInt(0),
"QUEUE_SIZE" : NumberInt(0),
"RUNTS" : NumberInt(0),
"INPUT_PPS" : NumberInt(0),
"HARDWARE_TYPE" : "AmdP2",
"OUTPUT_RATE" : NumberInt(0),
"DESCRIPTION" : "pe1",
"VLAN_ID_INNER" : "",
"CRC" : NumberInt(0),
"OUTPUT_PACKETS" : NumberInt(24855328),
"VLAN_ID" : "",
"LINK_STATUS" : "up",
"PREFIX_LENGTH" : NumberInt(31),
"QUEUE_OUTPUT_DROPS" : NumberInt(0),
"OUTPUT_ERRORS" : NumberInt(0),
"MTU" : NumberInt(1500),
"IP_ADDRESS" : "10.248.2.58",
"QUEUE_STRATEGY" : "fifo",
"OUTPUT_PPS" : NumberInt(0),
"BANDWIDTH" : "10000 Kbit",
"MAC_ADDRESS" : "ca02.07c1.0038"
}
}
} |
· Alerts created in opEvents for MTU conditions
Alert | Node | Element | State | Details |
Incorrect MTU | omk-core2 | Ethernet2/5 | Warning | MTU alert for interface: Ethernet2/5 (MTU: 1500) |
Incorrect MTU | omk-core2 | Ethernet2/3 | Warning | MTU alert for interface: Ethernet2/3 (MTU: 1500) |
Incorrect MTU | omk-core2 | Ethernet1/6 | Warning | MTU alert for interface: Ethernet1/6 (MTU: 1500) |
Incorrect MTU | omk-core2 | Loopback3 | Normal | MTU alert for interface: Loopback3 (MTU: 1514) |
Incorrect MTU | omk-core2 | Ethernet1/1 | Warning | MTU alert for interface: Ethernet1/1 (MTU: 1500) |