Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
stylenone

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)

...

·       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.

Code Block
breakoutModewide
breakoutWidth760
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 under: /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)

Code Block
breakoutModewide
breakoutWidth760
languagejson


"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:

Code Block
breakoutModewide
breakoutWidth760
{
   "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"

...


         }

...


      ]

...


   }

...

3. Plugin Roles

TextFsm

·       Parses raw CLI output using NTC templates

·       Produces structured JSON data

TextFsmTable

·       Generates structured table output using command-set parameter: custom_table_configuration

TextFsmInventory

·       Updates node inventory data

AlertTextFsmMTU

·       Evaluates MTU values

...


}

4. Running the Command

...

Set

Run using opconfig-cli:

Code Block
breakoutModewide
breakoutWidth760
/usr/local/omk/bin/opconfig-cli.pl act=run_command_sets nodes=omk-core2 names="IOS_INTERFACE_INVENTORY" debug=9


Or or
Create a VO Virtual Operator Job to run command-set 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.

Code Block
breakoutModewide
breakoutWidth760
{"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

Code Block
breakoutModewide
breakoutWidth760
{
    "_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

...