Cisco DNA Center - Interfaces Speed (custom) Report

Ever wondered how to create a custom Cisco DNA Center report?
For example, "Get all Interfaces Ports Speed" report?


As part of this tutorial/repository, you will learn how to leverage the "Get All Interfaces" API call do build a custom/tailor-made report.

The generated data can be then uploaded/integrated with cross-solutions such as Spark, Qlik, SmartSheet, and others.

json

Objectives and Flow

json

Description

  1. Let us start with reviewing the available DNA Center "Interfaces" API calls in Cisco documentation (Hint: Search for "Get all interfaces" under the "Devices" submenu).

  2. From the Cisco documentation page, click on the "Get all interfaces" GET API call to get in-depth information about all the available data types.

    json

  3. Review the available data (i.e., response) of this API call. Do you see any value that may help?

    {
      "response": [
        {
          "adminStatus": "string",
          "className": "string",
          "description": "string",
          "deviceId": "string",
          "duplex": "string",
          "id": "string",
          "ifIndex": "string",
          "instanceTenantId": "string",
          "instanceUuid": "string",
          "interfaceType": "string",
          "ipv4Address": "string",
          "ipv4Mask": "string",
          "isisSupport": "string",
          "lastUpdated": "string",
          "macAddress": "string",
          "mappedPhysicalInterfaceId": "string",
          "mappedPhysicalInterfaceName": "string",
          "mediaType": "string",
          "nativeVlanId": "string",
          "ospfSupport": "string",
          "pid": "string",
          "portMode": "string",
          "portName": "string",
          "portType": "string",
          "serialNo": "string",
          "series": "string",
     =>   "speed": "string",  <=
          "status": "string",
          "vlanId": "string",
          "voiceVlan": "string"
        }
      ],
      "version": "string"
    }

"speed": "string"

Great Job, you have found it! 👍

  1. So what's the next step?
    Let us create a simple Python script that leverages the Cisco DNA Center "Get all interfaces" API call to build our custom report!

Installation

Repo Clone

  1. Open a Terminal window (Press CMD + Space, type "Terminal" and hit return).

  2. Clone the code to your workstation (Copy & Paste the commands below).

    cd /tmp
    git clone https://github.com/CiscoDevNet/dnac-InterfacePortSpeedReport.git
    cd dnac-InterfacePortSpeedReport

Lab Initialization

  1. From the terminal window, run ./setup.sh to initialize the lab environment. This will create a Python virtual environment, activate it, and install prerequisites.
Sample Setup Output
     Setting up the workstation environment for the lab.

     Creating Python 3 Virtual Environment
     Collecting requests (from -r requirements.txt (line 1))
       Using cached https://files.pythonhosted.org/packages/ff/17/5cbb026005115301a8fb2f9b0e3e8d32313142fe8b617070e7baad20554f/requests-2.20.1-py2.py3-none-any.whl
     Collecting pyOpenSSL (from -r requirements.txt (line 2))
       Using cached https://files.pythonhosted.org/packages/96/af/9d29e6bd40823061aea2e0574ccb2fcf72bfd6130ce53d32773ec375458c/pyOpenSSL-18.0.0-py2.py3-none-any.whl
     Collecting ndg-httpsclient (from -r requirements.txt (line 3))
       Using cached https://files.pythonhosted.org/packages/fb/67/c2f508c00ed2a6911541494504b7cac16fe0b0473912568df65fd1801132/ndg_httpsclient-0.5.1-py3-none-any.whl
     Collecting pyasn1 (from -r requirements.txt (line 4))
       Using cached https://files.pythonhosted.org/packages/d1/a1/7790cc85db38daa874f6a2e6308131b9953feb1367f2ae2d1123bb93a9f5/pyasn1-0.4.4-py2.py3-none-any.whl
     Collecting tabulate (from -r requirements.txt (line 5))
       Using cached https://files.pythonhosted.org/packages/12/c2/11d6845db5edf1295bc08b2f488cf5937806586afe42936c3f34c097ebdc/tabulate-0.8.2.tar.gz
     Collecting six (from -r requirements.txt (line 6))
       Using cached https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
     Collecting slackclient (from -r requirements.txt (line 7))
       Using cached https://files.pythonhosted.org/packages/0d/2f/1378e64a843a5a8a83d73caa59ac88c36c67e2b41ac0fab3422080ff13bd/slackclient-1.3.0-py2.py3-none-any.whl
     Collecting simple-crypt (from -r requirements.txt (line 8))
       Using cached https://files.pythonhosted.org/packages/60/66/5bf6feb073f715a61492f8a6d444ad3d884ada71af317ce7a9c80bebee60/simple-crypt-4.1.7.tar.gz
     Collecting idna<2.8,>=2.5 (from requests->-r requirements.txt (line 1))
       Using cached https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl
     Collecting urllib3<1.25,>=1.21.1 (from requests->-r requirements.txt (line 1))
       Using cached https://files.pythonhosted.org/packages/62/00/ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/urllib3-1.24.1-py2.py3-none-any.whl
     Collecting certifi>=2017.4.17 (from requests->-r requirements.txt (line 1))
       Using cached https://files.pythonhosted.org/packages/56/9d/1d02dd80bc4cd955f98980f28c5ee2200e1209292d5f9e9cc8d030d18655/certifi-2018.10.15-py2.py3-none-any.whl
     Collecting chardet<3.1.0,>=3.0.2 (from requests->-r requirements.txt (line 1))
       Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
     Collecting cryptography>=2.2.1 (from pyOpenSSL->-r requirements.txt (line 2))
       Using cached https://files.pythonhosted.org/packages/18/d5/7f725ac9ff162c93f67087414961b8256019527093d31e4c1fa9c377170a/cryptography-2.4.2-cp34-abi3-macosx_10_6_intel.whl
     Collecting websocket-client<1.0a0,>=0.35 (from slackclient->-r requirements.txt (line 7))
       Using cached https://files.pythonhosted.org/packages/26/2d/f749a5c82f6192d77ed061a38e02001afcba55fe8477336d26a950ab17ce/websocket_client-0.54.0-py2.py3-none-any.whl
     Collecting pycrypto (from simple-crypt->-r requirements.txt (line 8))
       Using cached https://files.pythonhosted.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz
     Collecting cffi!=1.11.3,>=1.7 (from cryptography>=2.2.1->pyOpenSSL->-r requirements.txt (line 2))
       Using cached https://files.pythonhosted.org/packages/8e/be/40b1bc2c3221acdefeb9dab6773d43cda7543ed0d8c8df8768f05af2d01e/cffi-1.11.5-cp36-cp36m-macosx_10_6_intel.whl
     Collecting asn1crypto>=0.21.0 (from cryptography>=2.2.1->pyOpenSSL->-r requirements.txt (line 2))
       Using cached https://files.pythonhosted.org/packages/ea/cd/35485615f45f30a510576f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl
     Collecting pycparser (from cffi!=1.11.3,>=1.7->cryptography>=2.2.1->pyOpenSSL->-r requirements.txt (line 2))
       Using cached https://files.pythonhosted.org/packages/68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a/pycparser-2.19.tar.gz
     Installing collected packages: idna, urllib3, certifi, chardet, requests, six, pycparser, cffi, asn1crypto, cryptography, pyOpenSSL, pyasn1, ndg-httpsclient, tabulate, websocket-client, slackclient, pycrypto, simple-crypt
       Running setup.py install for pycparser ... done
       Running setup.py install for tabulate ... done
       Running setup.py install for pycrypto ... done
       Running setup.py install for simple-crypt ... done
     Successfully installed asn1crypto-0.24.0 certifi-2018.10.15 cffi-1.11.5 chardet-3.0.4 cryptography-2.4.2 idna-2.7 ndg-httpsclient-0.5.1 pyOpenSSL-18.0.0 pyasn1-0.4.4 pycparser-2.19 pycrypto-2.6.1 requests-2.20.1 simple-crypt-4.1.7 six-1.11.0 slackclient-1.3.0 tabulate-0.8.2 urllib3-1.24.1 websocket-client-0.54.0
     You are using pip version 9.0.1, however version 18.1 is available.
     You should consider upgrading via the 'pip install --upgrade pip' command.

     Setup complete.  To begin the lab run:

      source start

Lab Startup

  1. Run source start to prepare the workstation and to activate the pre-created Python virtual environment.
Sample Start Output
 Preparing the Workstation to Run this lab

 Note: This command script should be run with 'source start'
 to prepare the active terminal session.

 Activating Python Virtual Environment
 Opening Incognito browser windows for lab
  1. To execute the script, copy and paste the following command in the terminal:

    python interface-SpeedReport.py

Configuration & Usage

  1. Enter the following information to generate the report based on Cisco DNA Canter DevNet Sandbox environment:
Prompt Input
IP Address sandboxdnac.cisco.com
Username devnetuser
Password Cisco123!

⚠️ In case of typos, please click on "control C" to stop the script execution. After that, copy and paste python interface-SpeedReport.py to restart this exercise.

⚠️ It is recommended to expand the Terminal window to 160x70 for optimal viewing.

An example of script execution:

json

Script Overview

  • Prompt the user for Cisco DNA Center login information
    json
  • Validate login information and get the Token key
    json
  • Get the interfaces speed information and parse the data in a table format
    json

Lab Decommission

  1. To end the Python virtual environment session, copy and paste the following command in the terminal:

    deactivate

Technologies & Frameworks Used

Cisco Products & Services:

  • Cisco DNA Center

Tools & Frameworks:

  • This code requires Python 3.x
  • tabulate module

Getting help & involved

Need help with the code? Got questions/concerns? Want to provide feedback?

Please contact Yossi Meloch

Authors & Maintainers

📧 Yossi Meloch

📧 Stanley Chan

Licensing info

This project is licensed to you under the terms of the Cisco Sample Code License

View code on GitHub

Code Exchange Community

Get help, share code, and collaborate with other developers in the Code Exchange community.View Community
Disclaimer:
Cisco provides Code Exchange for convenience and informational purposes only, with no support of any kind. This page contains information and links from third-party websites that are governed by their own separate terms. Reference to a project or contributor on this page does not imply any affiliation with or endorsement by Cisco.