HomeGuidesAPI Reference
GuidesAPI ReferenceGitHubAirheads Developer CommunityLog In
Guides

NAPALM with StackStorm

With StackStorm's event-driven automation, users can make calls NAPALM calls based off of conditions from events detected on the network. NAPALM is usable in StackStorm using the NAPALM Integration Pack.
This allows for StackStorm uses to leverate NAPALM within StackStorm in the form of sensors, actions, and more.

📘

Installation and configuration for StackStorm for AOS-CX can be found here.
Installation and configuration of the NAPALM Integration Pack can be found in their GitHub repo here.

Supported Actions with AOS-CX NAPALM Drivers

The actions that the StackStorm Integration Pack is a subset of the NAPALM AOS-CX Driver methods. Note that some have different function call names.

  • get_arp_table
  • get_bgp_neighbors
  • get_bgp_neighbors_detail
  • get_config
  • get_facts
  • get_interfaces
  • get_lldp_neighbors
  • get_mac_address_table
  • get_ntp
  • get_route_to
  • get_snmp_information

Supported Sensors with AOS-CX NAPALM Drivers

The pack currently implements one sensor, largely for illustrative purposes.

  • napalm.NapalmLLDPSensor: This detects any changes in the number of active LLDP neighbors

Example Workflow

This example workflow uses a webhook trigger to run an action chain when an interface goes down, posting to a Slack channel through a webhook. For more information about using StackStorm with a Slack Webhook, check out the StackStorm workflow with Ansible here.

---
  version: '1.1'

  napalm.interface_down_workflow:

    input:
      - hostname
      - message
      - interface
      - slackwebhook

    type: direct

    task-defaults:
      on-error:
        - notify_on_error

    tasks:

      show_interface:
        action: "napalm.get_interfaces"
        input:
          hostname: <% $.hostname %>
          interface: <% $.interface %>
          htmlout: true
        on-success: "show_interface_counters"

      show_interface_counters:
        action: "napalm.get_interfaces"
        input:
          hostname: <% $.hostname %>
          interface: <% $.interface %>
          htmlout: true
          counters: true
        on-success: "send_slack_notif_task"

      send_slack_notif_task:
        action: core.local cmd='curl -X POST "Content-type:application/json" --data "{\"text\":\"<% ctx().message %>\"}" <% $.slackwebhook %>'