1. Objective

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)

2. Example CLI command

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
 

3. Command Set Definition (IOS_INTERFACE_INVENTORY)

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"
         }
      ]
   }
}

4. Running the Command Set

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.

5. Expected Results

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)

6. Architecture Flow

arch-flow.svg