1 2 3 Previous Next


248 posts


In Vegas at Cisco Live we are introducing a new DevNet Learning Path called “Network Programmability Foundations” and I’m pretty excited to see it come together.  The idea behind the path came from many discussions with attendees within the DEVNET Zone at recent Cisco Lives in Melbourne, Berlin, Cancun and last year in Vegas.  Network Programmability is such a large topic, that it can be a bit overwhelming and difficult to figure out exactly how to jump in, and where to start.


"Network Programmability Foundations” was designed to offer a currated set of sessions and activities scheduled through the week within DEVNET Zone that provide a starting point covering both core programming and network programmability topics.  The topics covered in the classroom and workshop sessions are in the categories of


  • General Strategy
  • Coding and DevOps
  • Device Capabilities & APIs
  • Network Controllers


Cisco Live session registration will be opening soon, and within the catalog you’ll find “Network Programmability Foundations” as a Learning Path to help as you arrange your week.



Click HERE to check out the scheduler!  

Here’s a preview of what the track has to offer! 



DEVNET-1040: Python Programming for Network Architects and Engineers - Part 1

In this first installment of the three part coding series designed for Network Architects and Engineers you will learn core Python skills and look at libraries and templates helpful for working with network objects and devices.



The new industry standards for model driven programmability are all about YANG Data Models and the protocols of NETCONF and RESTCONF.  In this session we’ll demystify exactly what problems they solve, how these technologies relate to each other, and get you ready to get hands on in the workshops!


DEVNET-2561: DEVNET Workshop - Intro to NETCONF and YANG

Armed with an understanding of the protocols from DEVNET-1721, in this DEVNET Workshop you’ll get hands on experience using NETCONF along with YANG Data Models with routers and switches.

NOTE:  Also offered on Wednesday


DEVNET-2036: APIC-EM API Deep Dive

The APIC-EM Enterprise Network Controller is a foundation element of the Digital Network Architecture and offers a platform for network configuration, operation and troubleshooting through it’s many applications.  In this session you’ll learn all about the APIs it offers for your custom scripts and apps.


DEVNET-1021: Cisco Meraki Developers: Cloud as a Platform Overview

With Meraki, Cisco takes network programmability to the Cloud.  Learn about the capabilities of the platform to help you automate network deployments, locate devices in real-time, collect marketing data, and engage your customers.



DEVNET-1725: How to be a Network Engineer in a Programmable Age

Start Tuesday with a look at what it means to be a Network Engineer… We'll look back fondly on the early days of networking, when the it was simple and the biggest concerns we had the number of Spanning-Tree instances to run... You 'll laugh, you 'll groan, you might even get angry, but that 's okay.


DEVNET-1028: Cisco's Open Device Programmability Strategy - An Open Discussion

In this session learn about the focus and important Cisco has placed on Network Programmability across enterprise, data center and service provider.  You’ll hear about the latest advancements and capabilities around open and standard APIs, application hosting features, and Day 0 provisioning technologies.


DEVNET-1041: Python Programming for Network Architects and Engineers - Part 2

In the second part of the programming series you will build upon what you learned in Part I and to develop a set of OS and network based utilities that can be added to the Python Toolbox you started on Monday.


DEVNET-1694: Supercharge the Network with Python On IOS-XE

Python has become the language of choice for network automation, and in this session you’ll learn how with the latest release of IOS-XE you can know build and execute your Python scripts directly on routers and switches!.  Though focusing on IOS-XE, this feature also works on NX-OS and IOS-XR.


DEVNET-2101: DEVNET Workshop - NXOS in the Real World Using NX-API REST

In this hands on workshop you’ll have a chance to test drive the NX-API with some real-world examples of network programmability.

NOTE: Also offered on Thursday



DEVNET-1042: Python Programming for Network Architects and Engineers - Part 3

In the final installment of the coding series, this session builds upon the toolbox utilities created in the previous two sessions showing how to build additional Python based network programming tools. These include using the Python socket library to create a simple TCP based client/server message passing script.


DEVNET-1695: Application Hosting in IOS-XE

Learn how to leverage Guest Shell to install and host Linux Applications directly on your routers and switches in this session.  Though this session will leverage the latest IOS-XE software release, NX-OS also offers this capability and lessons learned here can be leveraged within the data center as well!



Get hands on in this workshop by working with the APIC-EM REST API to access the powerful network applications hosted on the enterprise network controller.

NOTE: Also offered on Monday


DEVNET-2556: DEVNET Workshop - Dive into Leveraging Python on IOS-XE

Put the new IOS-XE features to use in this workshop and fire-up Python directly on an IOS-XE device, explore the included Python libraries for interacting with the network element, and see how to integrate Python script execution into your operations workflows.

NOTE: Also offered on Monday


DEVNET-2557: DEVNET Workshop - Application Hosting in IOS-XE

Get ready to see how you can install and execute your favorite Linux utilities and software directly on your IOS-XE routers and switches in this session.  Don’t have any favorites?  That’s okay, you will when you leave this session!

NOTE: Also offered on Thursday



DEVNET-2000: Network Programmability with Cisco ACI

Application Centric Infrastructure (ACI) from Cisco offers a complete programmatic approach to software define your data center network.  Up level your network administration skills by learning the system programmatic API's, tools available to automate tasks in the environment.


DEVNET-1002: DEVNET Workshop - NetDevOps for the Network Dude - How to get started with API's, Ansible and Python

DevOps isn’t just for application developers or system admins.  Get hands on with the tools that can help you really up level your network automation practices.  Bathrobes and bowling shoes optional attire.

NOTE: Also offered on Tuesday


DEVNET-2044:  DEVNET Workshop - “Exploring” NETCONF / RESTCONF / YANG API

Attend this jam packed workshop for even more hands on with the key model drive programmability technologies of NETCONF/RESTCONF/YANG.

NOTE: Also offered on Tuesday


Ready, set, schedule! 


I know what you are thinking… holy buffer overload Batman… that’s quite a schedule… and yes it is.  But believe it or not, it’s only a selection of the great content we have in store for you within the DEVNET Zone covering network programmability topics.  If you have been dabbling in the topics for awhile now, we have more sessions on topics like network analytics, zero touch provisioning, YANG programming with ydk, network function virtualization, and Open Source projects like OpenDaylight.  Not to mention all the sessions on IOT, Security, Collaboration, etc, etc, etc…


And stay tuned for more details on other elements of the “Network Programmability Foundations” program.  We’re planning some special swag for participants, meet-ups and all around social networking before, after and during Cisco Live proper!  Let me know what you think in the comments!




I’ve been long waiting for the latest version of IOS-XE to ship, and on April 13th IOS-XE 16.5 “Everest” posted to https://cisco.com/go/software for the ISR, ASR, and CSR routing platforms (still to come are the Catalyst Switching lines).  The “Everest" release of IOS-XE is jam packed with new programmability features that I think everyone will agree are excellent additions as network programmability is becoming a mainstream topic for us all.  Some of the highlights of this release include


  • A modular approach to YANG Data Models for Cisco IOS-XE Features (ISR, CSR, ASR)
  • Support for Zero Touch Provisioning (ZTP) for Day 0 infrastructure setup (ISR)
  • New Application Hosting capabilities provided by a Linux Guest Shell (ISR)
  • Ability to develop and execute Python scripts On-Box (ISR)


Note: Not all IOS-XE platforms support all features in release 16.5.  Future software releases will extend features to other platforms. 


In future blog posts I’ll dive deeper into all of these features, but today we’re going to look at the new Python execution capabilities.


Python and GuestShell


The ability to execute Python code directly on an end device is a part of the Application Hosting capabilities provided by GuestShell.  We’ll go deeper into GuestShell on another day, but for now it is important to understand just some of the basics.  GuestShell is a containerized Linux runtime that can be enabled on your IOS-XE device.  On the ISR 4000 platforms, Guest Shell provides a CentOS 7 environment in which you can install and run applications, such as Python scripts.  From within Guest Shell you and your applications have access to the networks of the host platform, bootflash, and IOS CLI.  Guest Shell is isolated from the underlying host software to prevent interference of the core network functions of the device.


And I can’t go any further without mentioning that though a new feature to IOS-XE, Open NX-OS has offered Guest Shell and Python for awhile now.  In fact the feature within IOS-XE is modeled after how it works within NX-OS so much of what we’ll look at here applies to NX-OS as well!


Guest Shell Quick Start


Enough talk… let’s get into some config and code!  For this blog post I am using an ISR 4431 running 16.5.1b.  The router was recently upgraded to 16.5 and has little other configuration in place.  Before we can jump into doing something interesting with Python, we need to get Guest Shell up and running.


Step 1: Enable IOX

IOX is the manager that handles guest shell and other 3rd party applications in IOS-XE.


dev4431-1#conf t

Enter configuration commands, one per line.  End with CNTL/Z.




dev4431-1#show iox

Virtual Service Global State and Virtualization Limits:

Infrastructure version : 1.7

Total virtual services installed : 0

Total virtual services activated : 0

Machine types supported   : KVM, LXC

Machine types disabled    : none

Maximum VCPUs per virtual service : 2

Resource virtualization limits:

Name                         Quota     Committed     Available


system CPU (%)                  75             0            75

memory (MB)                    512             0           512

bootflash (MB)                1000             0          1000

IOx Infrastructure Summary:


IOx service (CAF)    : Running

IOx service (HA)     : Not Running

IOx service (IOxman) : Running

Libvirtd             : Running


It should take only a few minutes for IOX start up.  The HA service may not start on all platforms.


Step 2: Enable Guest Shell


From enable mode, you can now start the Guest Shell.  It will take a few minutes to finish the startup procedure.


dev4431-1#guestshell enable

Management Interface will be selected if configured

Please wait for completion

dev4431-1#show app-hosting list

App id                           State


guestshell                       RUNNING



Step 3: Setup Guest Shell for Network Access - DNS


To do anything of real interest, you need to tell Guest Shell what DNS servers to use.  We do this by setting them within “/etc/resolv.conf” just like a typical Linux OS.


! Log into Guest Shell from the router

dev4431-1#guestshell run bash

[guestshell@guestshell ~]$

# Use echo to add your DNS Server to the file.  Here I use Open DNS. 

[guestshell@guestshell ~]$ echo "nameserver" | sudo tee --append /etc/resolv.conf


[guestshell@guestshell ~]$ cat /etc/resolv.conf


# Test to see if things are working by using pip to install “requests”

[guestshell@guestshell ~]$ sudo -E pip install requests

Collecting requests

  Downloading requests-2.13.0-py2.py3-none-any.whl (584kB)

    100% |################################| 593kB 610kB/s

Installing collected packages: requests

Successfully installed requests-2.13.0


Note… if your environment requires Proxy Servers to access the internet, you will need to configure them within Guest Shell as well as DNS.



Alright, we are all set and ready for some Python Magic!


Quick Exploration of Python on IOS-XE


As Guest Shell is based on Cent OS 7, it comes with Python 2.7.5 pre-installed.


[guestshell@guestshell ~]$ python --version

Python 2.7.5


Along with Guest Shell, a few Python libraries are included for interacting with the underlying IOS platform.  Below I give a show how we can use them send commands to IOS and process the results.


[guestshell@guestshell ~]$ python

Python 2.7.5 (default, Jun 17 2014, 18:11:42)

[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> from cli import *


>>> ios_version = cli("show version")

>>> print(ios_version)


Cisco IOS XE Software, Version 16.05.01b

>>> ip_interfaces = cli("show ip int bri")

>>> print(ip_interfaces)

Interface              IP-Address      OK? Method Status                Protocol

GigabitEthernet0/0/0     YES DHCP   up                    up

GigabitEthernet0/0/1   unassigned      YES NVRAM  down                  down

GigabitEthernet0/0/2   unassigned      YES NVRAM  down                  down

GigabitEthernet0/0/3   unassigned      YES NVRAM  down                  down

GigabitEthernet0    YES DHCP   up                    up

VirtualPortGroup0    YES manual up                    up

>>> # Now I’ll configure the description on an interface

>>> conf_snippet = '''interface GigabitEthernet0/0/2

...                     desc Configured by Python'''

>>> config_result = configure(conf_snippet)

>>> config_result

[ConfigResult(success=True, command='interface GigabitEthernet0/0/2', line=1, output='', notes=None), ConfigResult(success=True, command='   desc Configured by Python', line=2, output='', notes=None)]

>>> # The clip function runs a command and prints the results

>>> clip("show run int GigabitEthernet0/0/2")

Building configuration...

Current configuration : 132 bytes


interface GigabitEthernet0/0/2

description Configured by Python

no ip address


media-type rj45

negotiation auto


>>> exit()


If you prefer Python 3, you can install it like you would on any Cent OS 7 device.


[guestshell@guestshell ~]$sudo -E yum -y install https://centos7.iuscommunity.org/ius-release.rpm

[guestshell@guestshell ~]$sudo -E yum -y install python35u-3.5.3

[guestshell@guestshell ~]$python3.5 --version

Python 3.5.3


Let’s do something interesting


Okay, running live Python commands on a router is interesting, but not very powerful all by itself.  Let’s take a look at how we can combine this new feature with EEM for new and interesting options.  With the addition of Python and Guest Shell, you can now have EEM execute a Python Script as an action.  This provides the power of Python, with the event driven actions of EEM… Awesome!   For this example we’ll take a step into “Chat Ops” and our Router send a Spark message every time the configuration is changed.


Step 1:  Create a Spark Bot Account for our Router


In order to send a message with Spark, our router will need an account to use.  Rather than create a full account for every device, I’ll just create a Bot under my own Spark Account for this router.  From https://developer.ciscospark.com, I create a new bot account.  I grab the Authentication Token because I’ll need that for my script.




Step 2:  The Python Code


For this demo, I created a very simple Python Script that can be used to send a message to someone.  Here is the script.


from ciscosparkapi import CiscoSparkAPI

if __name__=='__main__':
    # Use ArgParse to retrieve command line parameters.
    from argparse import ArgumentParser
    parser = ArgumentParser("Spark Check In")
    # Retrieve the Spark Token and Destination Email
        "-t", "--token", help="Spark Authentication Token", required=True
    # Retrieve the Spark Token and Destination Email
        "-e", "--email", help="Email to Send to", required=True
    args = parser.parse_args()
    token = args.token
    email = args.email
    message = "**Alert:** Config Changed"
    api = CiscoSparkAPI(access_token=token)
    api.messages.create(toPersonEmail=email, markdown=message)


I am using the very handy CiscoSparkAPI Python module to send the message, so we’ll need to pip install that first.


[guestshell@guestshell ~]$ sudo -E pip install ciscosparkapi

Now I create  “scripts” folder in the bootflash to store this and other future scripts.


[guestshell@guestshell ~]$ mkdir /bootflash/scripts

Because this directory is on bootflash, I could create the script from my local machine and upload it using any available method to get it onto the box.  For now, I’m just going to use “vi” from within Guest Shell to create the script.


[guestshell@guestshell ~]$ cat /bootflash/scripts/spark_checkin.py


from ciscosparkapi import CiscoSparkAPI

if __name__=='__main__':

    # Use ArgParse to retrieve command line parameters.

    from argparse import ArgumentParser

    parser = ArgumentParser("Spark Check In")

    # Retrieve the Spark Token and Destination Email


        "-t", "--token", help="Spark Authentication Token", required=True


    # Retrieve the Spark Token and Destination Email


        "-e", "--email", help="Email to Send to", required=True


    args = parser.parse_args()

    token = args.token

    email = args.email

    message = "**Alert:** Config Changed"

    api = CiscoSparkAPI(access_token=token)

    api.messages.create(toPersonEmail=email, markdown=message)

Before I tie it into EEM, let’s test it real quick to make sure it works.  The script uses the common “argparse” module for Python to take in command line arguments for the token, email to send to, and message to send.


[guestshell@guestshell ~]$ python /bootflash/scripts/spark_checkin.py -t OTJjNGM1MGItZjUUyZjM0Y2ViYzc5Mjg3MGUzNTQtYTM0 -e hapresto@cisco.com

And I do indeed get the message in Spark!




Step 3: Connecting to EEM


First I drop out of guest shell and get back into IOS.


[guestshell@guestshell ~]$ exit




Next I configure the EEM Applet to use the script.


dev4431-1#config t

dev4431-1(config)#event manager applet GUESTSHELL-CONFIG-CHANGE-TO-SPARK

dev4431-1(config-applet)#event syslog pattern "%SYS-5-CONFIG_I: Configured from"

dev4431-1(config-applet)#action 0.0 cli command "en"

dev4431-1(config-applet)#action 1.0 cli command "guestshell run python /bootflash/scripts/spark_checkin.py -t OTJjNGM1MGItZjUUyZjM0Y2ViYzc5Mjg3MGUzNTQtYTM0 -e hapresto@cisco.com"




Now each time I make a configuration change, I receive the notification in Cisco Spark.  This is a very basic implementation of the “Chat Ops” idea, but highlights how quick and easy this type of thing can be leveraged with very little time, or programming skill needed.


With the power of Python, I could use ncclient and NETCONF to leverage the model drive programmability options under the hood as an alternative to the CLI options we looked at earlier this post.


Summing Up!


Wow... I hope you found this article enjoyable and got you thinking about how you might leverage this new capability of IOS-XE.  If you’d like to test out the spark_checkin.py code a little closer you can find it, along with many other Python samples posted in on GitHub in the https://github.com/CiscoDevNet/python_code_samples_network repository.


If this kind of thing has you interested, be sure to join us at Cisco Live 2017 in Vegas.  We've several sessions in DEVNET discussing the new programmability features of IOS-XE and all our platforms.  A few suggestions to take a look at include:


DEVNET-1694 - Supercharge the Network with Python On IOS-XE

DEVNET-2556 - DevNet Workshop - Dive into Leveraging Python on IOS-XE

DEVNET-1695 - Application Hosting in IOS-XE

DEVNET-2557 - DevNet Workshop - Hand On - Application Hosting in IOS-XE

DEVNET-2589 - DevNet Workshop - Hands-On - Solving Problems with Application Hosting and Guestshell

DEVNET-2102 - DevNet Workshop - Network Programmability with NXOS Using Guest Shell


Also, we've got new Learning Labs and Sandboxes planned to provide more great hands on options and info for you at anytime.


What will you use this new feature for?  Leave a note in the comments, or tweet me @hfpreston

The need for Device Independent Solutions

Controlling and monitoring your Contact Center via a simple and device free interface has been a big challenge for supervisors and system administrators. The Agents themselves would like to achieve tasks that can be done from any device.

The Cisco Contact Centers have rich REST API that are available for any developer to use for create the solutions that are desired. But it has always been a challenge to create solutions that are device independent. Browser based applications are one alternative, but they are a constant challenge to port to various browsers and their versions.


With the introduction of Cisco Spark Messaging, we now have an alternative that is truly device independent. Cisco Spark is an always-on secure way to communicate within an organization. It has a single consistent interface across mobile devices and desktops, and can be used to control and manage your appliances in any on-premises contact center





The architecture to deliver the mobile experience for a Cisco on-premises contact center is based on using the Spark Messaging platform on the devices talking to the Contact Center APIs via a Node.JS application in the middle. The Node.JS can be setup in the DMZ so that the on-premises systems do not have to be exposed to the external internet.

Spark Contact Center.jpg

The Node.JS software can be installed and run on most operating systems and is easy to setup and manage. The javascript files that run in the Node.JS environment are simple text and can be edited using any text editor.





You can get more information about Node.JS here https://nodejs.org/en/

The Node.JS software can be installed and run on most operating systems and is easy to setup and manage. The javascript files that run in the Node.JS environment are simple text and can be edited using any text editor.

A Node.JS community provides JavaScript libraries in the form of Node Packages to ease deployment and development of scripts. For this step we would need the Node package for Cisco Spark to be able to leverage the Spark APIs.

Install the Cisco Spark JavaScript SDK via the NPM

The Cisco Spark API can be easily deployed using a Node Package. For details of how to get access to this and deploy, see here:




Create a New Room

The Spark Messaging platform is based on the concept of rooms that are the way to communicate with a person or an application. The rooms can be controlled by the System administrators and provide a safe and secure way to control the flow of information.

For this step in the process, we will create a Spark room that will be the point of communication.

Easiest way is to use the API https://api.ciscospark.com/v1/rooms to create a new room.

The Spark developer forum allows the creation of rooms directly from their website here:https://developer.ciscospark.com/endpoint-rooms-post.html


or create using the following HTTP commands





      "title": "AnilMediaSenseTest" <Use your Own>


Response 200 /success


      "id": "… Room ID…",
      "title": "AnilMediaSenseTest",
      "type": "group",
      "isLocked": false,
      "lastActivity": "2016-11-28T05:24:34.806Z",
      "creatorId": "…Creator ID…",
      "created": "2016-11-28T05:24:34.739Z"




Create a New JavaScript


I named mine as BasicSparkWriteMessage.js. The code is also available in GitHub at:



// First define all the required packages

var spark = require('ciscospark');


//Get all the rooms

// Max 1000 rooms in the array

  1. spark.rooms.list({max: 1000})



    console.log ('DEBUG: Rooms Found: ', rooms.length );

        for (var i = 0 ; i < rooms.items.length ; i++)


       // Going through the rooms one by one

       console.log ('DEBUG: Room: ', rooms.items[i].title);


       // Check if you found the room you are looking for

                if ( rooms.items[i].title === 'AnilMediaSenseTest' )


           // Room found

           console.log ('DEBUG: Found Room ' );


                        // Now write a message out to this room

           return spark.messages.create(


              text: 'I am running now!',

                                roomId: rooms.items[i].id







    console.log ('DEBUG: Message Sent');


// Catch any errors



    console.log ('ERROR: ', reason);





Execute the Script

The script can be run from the command line. It needs your token information to run. The Token is available from the spark developer portal here: https://developer.ciscospark.com/#

Use the following command to run the script:


CISCOSPARK_ACCESS_TOKEN=<Your Token> node BasicSparkWriteMessage.js


The ouput of the script on my computer looks like this

spark-store: constructing boundedStorage

spark-store: retrieving Credentials:authorization

storage: getting binding for `Credentials`

memory-store-adapter: returning binding

spark-store: retrieving Device:@

storage: getting binding for `Device`

memory-store-adapter: returning binding

storage: made binding for `Credentials`

storage: made binding for `Device`

plugin-storage(Device): waiting to init key `@`

plugin-storage(Device): initing `@`

spark-store: retrieving Device:@

storage: getting binding for `Device`

storage: found binding for `Device`

memory-store-adapter: reading `authorization`

memory-store-adapter: reading `@`

plugin-storage(Credentials): waiting to init key `authorization`

plugin-storage(Credentials): initing `authorization`

spark-store: retrieving Credentials:authorization

one flight: attempted to invoke _getBinding while previous invocation still in flight

memory-store-adapter: reading `@`

memory-store-adapter: reading `authorization`

storage(Credentials): no data for `authorization`, continuing

storage(Device): no data for `@`, continuing

plugin-storage(Device): no data for `@`, continuing

plugin-storage(Credentials): no data for `authorization`, continuing

DEBUG: Rooms Found:  191

DEBUG: Room:  AnilMediaSenseTest

DEBUG: Found Room

plugin-storage(Device): waiting to init key `@`

plugin-storage(Device): already inited `@`

plugin-storage(Credentials): waiting to init key `authorization`

plugin-storage(Credentials): already inited `authorization`

DEBUG: Message Sent



Congratulations, you have created your first Node.JS script that was able to connect to the Cisco Spark Messaging system and send a message to a room that you identified.

This is the first step in the process. Once you have the basic ability to send messages down, now we can move on to the more complex steps of communicating information between the Spark rooms and the on-premises systems.



Node.JS install and documentation: https://nodejs.org/en/

Cisco Spark Node Manager download: https://www.npmjs.com/package/ciscospark

Cisco Spark Developer resources: https://developer.ciscospark.com/#

Source Code for Node.JS Scripts : https://github.com/anilve/CiscoOnPremRESTAccess


Updates from DevNet Create!

Posted by jkratky Apr 3, 2017

Codeproject-03(1).jpgWhile we are quickly working to fine-tune every detail to bring you #DevNetCreate, here's what you need to know!


What is DevNet Create?

  • IoT and Cloud Developer Conference
  • May 23-24 in San Francisco
  • 2 days full of amazing content
  • 2 session tracks: IoT & User Experience, Cloud & DevOps
  • 80 tech talks, hands-on learning, mini-hacks
  • Hosted by Cisco DevNet - while we are hosting the event, it's not a Cisco-specific show. The conference is meant for those in the industry that want to dig into the blurred lines between infrastructure and applications.

Who Are Our Key Speakers?


Want to Join Us?

  • Submit Your Session: Last Week for Call for Speakers!
    Call for Papers has been extended until April 07, 2017 23:59 PDT. We are looking for your session abstract submissions for DevNet Create.
  • Register Today! Early Bird rates apply until April 13th. Hurry, tickets are going quick and this event will sell out - don't miss out!


See you there!

JiveServlet.pngHave you heard about DevNet Create? We are launching a hands-on, inaugural industry conference for IoT, cloud, enterprise developers, and DevOps engineers. The conference is focused on bringing industry experts together and while it's hosted by Cisco DevNet, this event is not Cisco-only. In fact, it's quite the opposite - our focus is to bring together experts from all industries!


Join the brightest of the IoT, cloud and enterprise developers to bring clarity to the blurred lines between infrastructure and applications. Through two session tracks (IoT & User Experience and Cloud & DevOps), networking, keynotes, workshops, mini-hacks and learning labs, the conference offers top notch content combined with hands-on learning, to break down the barriers between infrastructure and applications and help developers learn, code and connect and inspire.

DevNet Create Conference Details

When: May 23-24th

Where: Bespoke at Westfield San Francisco Centre
Get the latest updates: @DevNetCreate #DevNetCreate


What You Need to Know Now


Excited? We are! So save the date - we hope to see you there!

Check out the latest CUBEConversation with Jeff Frick (theCUBE) and Susie Wee (VP & CTO of DevNet, Cisco Systems) to insight about DevNet and #DevNetCreate, where we started, where we are going and why in the latest episode.



Hacking for the NYC Ports!

Posted by tmero Mar 2, 2017

You know what’s so great about hackathons? It’s always solving a problem in this world and making it a better place to live in.

NYC Ports and Logistics is a 48 hour hackathon located in, of course, the beautiful city of New York City that took place on January 20th, 2017 - January 22nd, 2017! The hackathon started off the day prior to the event where hackers were able to socialize and network with other hackers. Since a majority of them just met each other, it was important for them to find teammates with different skillsets to create a new application. Austin Hyland (my colleague) and I had a great time talking to different teams slowly forming and making sure they were all well formed.


There were over 125 participants (developers, business people, designers, domain experts, lawyers) building prototypes, rapid fire market validation and business model invention. (Information from the devpost website).

There were many sponsors, including Microsoft Azure, SendGrid, and Cisco DevNet. Of course, let’s not forget the wonderful venue sponsor Galvenize and Blender Workspace!


[image: Learn, Code, Inspire DevNet stickers using one of our phone lenses we gave out]

Cisco DevNet was very excited to have a booth and help out hackers using our APIs. (Tropo API and Cisco Spark API). We gave out a prize for expensive Meraki routers to the team who had the best use case of our APIs. The grand prize for the entire event was a $5000 cash prize!

The winner we chose was "LCL Enterprises". The app was about using hardware to keep track of LCL packages. They wanted to add the ability to send customers automated messages. For this hackathon they added coded examples of individualized messages when packages were shipped and broadcast messages when cargo arrived. Then they used HTTP to send variable data to the code and fire up the text messages. This piece was automated in the back end which was in Ruby on rails.


This was a great event, especially because it was ran by the organizer Daren McKelvey who was very organized and worked very hard to make sure it was a successful event. As a sponsor, one thing that stood out with Daren compared to other organizers is that he went out of his way to make sure each sponsor was content and had all the information they needed.

We hope to be there again next year!

...great session at CiscoLive Berlin on Python Network programming yesterday!  I promised to post the Python snippit that launches a browser that points to the DevNet Python repository that I've been building - including the Ubuntu VM that I used and all the code content that we covered yesterday (remember, the username and password for everything is vagrant, vagrant;).


Anyway, here is the link to the repository followed by the code snippit - you can either run it as its own script or 'feed' the statements into the Python shell one at a time to watch it in action.  Please let me know if you have any questions or comments - hope this helps!




Here is the link to the repository:


# https://cisco.box.com/v/DevNet1040GettingStarted

# Ubuntu VM username and passwords are vagrant, vagrant


                                     ###     Here is the code snippit to launch a browser   ###



just cut and paste the lines that come after the '###' into a file with a .py extension (you don't need to include the '#' symbols), then invoke from a command line - eg.  if you call the script 'name_of_my_program.py then


python name_of_my_program.py 




just start the Python IDLE shell and feed each line of code into the interpreter to watch it in action.....





import webbrowser                                                                          # webbrowser is a built-in python method


main_page = 'https://cisco.box.com/v/DevNet1040GettingStarted'      # just assign this string to the variable called main_page


webbrowser.open(main_page)                                                          # THIS is the statement that fires up the browser to your page





The DevNet Zone at Cisco Live is perhaps best known for its hands-on learning labs, workshops, and coding classes.  But it would be a mistake to overlook the expert panel sessions. 


Next week at #CLEUS in Berlin, the DevNet Zone will host six panel discussions that bring expert insight into some of today’s hot topics for developers – from network programmability to Cloud Collaboration, Native Cloud Computing, and the Internet of Things.


What follows is a short description about each panel.  Check your Cisco Live schedule, and fit in 45 minutes of insight and inspiration.


Network Programmability and Using DNA to Automate, Simplify and Secure Your Network

Session ID:  DEVNET-1036 Tuesday, Feb 21, 12:00 p.m. - 12:45 p.m.

Cisco business and other top industry leaders discuss how the Cisco Digital Network Architecture (DNA) automates, analyzes, simplifies and secures the digital Network.  They will discuss the APIs and how developers leverage them to automate the network and serve customers in engaging new ways.  DNA is an open and extensible, software-driven architecture that accelerates and simplifies your enterprise network operations


Robert Grasby,  Senior Business Development Manager, Cisco

Colin Lowenberg,  API Product Management, Cisco

Mark Montanez,  Distinguished Consulting Engineer, Cisco — Distinguished Speaker

Adam Radford,  Distinguished Systems Engineer, Cisco, Australia and New Zealand,Cisco — (Distinguished Speaker

Susie Wee,  VP & CTO, Networked Experiences, Cisco


Cloud Native Experts with CNCF TOC

Session ID: DEVNET-1033 Tuesday, Feb 21, 2:00 p.m. - 2:45 p.m.

This panel will talk about the Cloud Native Computing Foundation (CNCF) Technical Oversight Committee (TOC) first year retrospective and what is planned for the second year. Technical Oversight Committee (TOC) is the CNCF "technical supreme court" and is expected to facilitate driving neutral consensus for: defining and maintaining the technical vision for the Cloud Native Computing Foundation, approving new projects within the scope for CNCF set by the Governing Board, and create a conceptual architecture for the projects, aligning projects, removing or archiving projects, accepting feedback from end user committee and map to projects, aligning interfaces to components under management (code reference implementations before standardizing), and defining common practices to be implemented across CNCF projects.


Chris Aniszczyk, Executive Director, Cloud Native Computing Foundation

Jonathan Boulle, Site Lead, CoreOS

Luke Marsden, Head of Developer Experience, Weaveworks

Ken Owens, CTO, Cisco


The Power of Cloud Collaboration APIs - How Accelerating Features and Cisco Incubation Programs are Expanding Developer Opportunities

Session ID: DEVNET-1037 Tuesday, Feb 21, 4:00 p.m. - 4:45 p.m.

Cisco is rapidly driving change in the cloud collaboration space by accelerating release of innovative features and building developer empowerment programs.  What are the immediate solution markets Cisco and its strategic partners see being opened up by the latest features?  What is the medium and long term vision of pervasive collaboration integrated into any application on any platform?  What tools, training, incubation programs and marketing opportunities are being offered to help make developers successful?  Join us as our Cisco collaboration luminaries and partners share their thoughts and experiences on the direction of cloud collaboration platforms, use cases, market opportunities, roadmap, and more.


Sara Axelrod, COO, Local Measure

Casey Bleeker, Business Development Manager, Cisco — Distinguished Speaker

Brian Dreyer, Director, Product Management, VBrick

Jason Goecke, Senior Director & GM of Tropo BU, Cisco

Snorre Kjesbu, VP/GM TelePresence Systems Business Unit, Cisco

Rick Tywoniak, Senior Director, DevNet, Cisco


Rebuilding the DevNet Developer Platform as a Cloud Application

Session ID: DEVNET-2440 Tuesday, Feb 21, 3:00 p.m. - 3:45 p.m.

On this panel we will share with you the journey of rebuilding Cisco’s developer platform to meet the growing needs of today’s developer community. From making the right technology and architecture choices to building the right team, organization and processes, we will discuss it all. What are the implications of public versus private versus hybrid cloud hosting especially on aspects such as data privacy? What is involved in making the move towards DevOps and automation from tools, process and organization point of view? How important are cloud native concepts such as microservices and containers and how can they help? How can we define an MVP that balances platform stability and new features without slowing the launch and adoption of the new platform? What role can open source software play in accelerating the transformation?    


Fabio Giannetti, Principal Engineer, Cisco

Nermeen Ismail, Principal Engineer, Cisco  (Distinguished Speaker)

Ken Owens, CTO, Cisco

Hank Preston, Developer Evangelist, Cisco   (Distinguished Speaker)

Susie Wee, VP & CTO, Networked Experiences, Cisco

Edwin Zhang, Director of software development, Cisco


A Discussion of Cisco IoT Integrations and Solutions

Session IDDEVNET-1038 Tuesday, Feb 21, 11:00 a.m. - 11:45 a.m

Join us for a panel discussion on the Internet of Things from the Cisco product teams themselves.  Hear about the challenges of integration, how Cisco products work with each other, Cisco partnerships in IoT, and what the future might hold.  There will be an opportunity to ask your own questions of the panel so please attend for what will be a unique and informative session.


John Apostolopoulos, VP.CTO, Cisco

Shaun Cooley, CTO - IoT & Industries, Cisco

Lionel Hunt, Manager Technical Marketing, Cisco

Maciej Kranz, Vice President, Corporate Strategic Innovation Group, Cisco

Srikrishnan Subramanian, Director of Engineering, Cisco Inc

Susie Wee, VP & CTO, Networked Experiences, Cisco


Open Source, Does it Pass the Sniff Test?

Session ID: DEVNET-1034 Tuesday, Feb 21, 5:00 p.m. - 5:45 p.m.

The tech industry has witnessed a boom in open source projects and foundations the past several years, particularly in cloud computing and networking (e.g. OpenStack, OpenDaylight, OPNFV, FD.io). How does one decide if open source is the right choice for their application or platform, which project(s) best meet their needs, and how to engage successfully with the open source community. Join our distinguished panel as they share experience and insights that can help you navigate the open source landscape.

This session takes place in the DevNet Zone.

John Apostolopoulos,  VP.CTO, Cisco
Bernd Himmelsbach,  VP Cloud infrastructure Engineering & Automation, SAP SE
Ken Owens,  CTO, Cisco
Christopher Price,  Open Source Strategist, Ericsson
David Ward, SVP, Chief Architect, & CTO Engineering, Cisco
Jan Wildeboer,  EMEA Evangelist, Red Hat


We are now less than a week away from Cisco Live Berlin and I’m eagerly looking forward to sharing what’s happening in OpenStack around containers and hearing from our customers and partners on where they are on their cloud journey. Enterprises and Service Providers (Telcos) are coming to terms with where and how to use containers with enterprises leading the way here. Over the past year I’ve had a number of discussions with customers who are making their transformative journey from an appliance based private cloud world to a more agile hybrid cloud model. Container enquiries are growing as customers look to deploy their workloads in a hybrid cloud environment. 


OpenStack continues to grow share of mind among enterprises and Telcos as the big 3 cloud providers continue to innovate at a breathtaking pace. Amazon’s recent reinvent conference was a prime example where Amazon once again announced a tremendous number of feature releases on AWS. Only OpenStack remains, from a true open source standpoint with a similar (if not better velocity of feature) expansion driving more and more customers to adopt OpenStack as an alternative for private clouds. As they prepare for a hybrid cloud model for their business models, IT is beginning to embrace technologies that can support rapid/easy deployment of applications/services. According to 451 Research Dec 2016 report (Containers Rise to the Challenges of Hybrid IT), IT are rapidly embracing a hybrid environment where workloads need to be deployed across various cloud infrastructures. Container are helping solve the problem of portability and deployment across these diverse cloud infrastructure.


One of the biggest issues with workload migration across multi-cloud has been the speed at which workloads running inside VM’s can be deployed. Containers being lightweight dramatically reduce the time to startup and restart, allowing IT/operators to quickly respond to changing load scenarios. Using containers also helps better (efficiently) utilize compute resources in a DC/pod allowing operators to quickly standup and shutdown workloads on select portions of the DC. Customers (e.g. financial sector) are beginning to address security concerns of containers (break outs, user space) by running them individually (e.g. docker) or in pods/clusters (e.g. Kubernetes) within VM’s. Others (as the 451 Research finding points out) are looking to run containers separately from VM’s in production.


A large majority of applications remain legacy based (e.g. Telco Virtual Network Functions). Such applications are complex and are heavily dependent on versions of the underlying OS and kernel. These dependencies result in them being run within VM’s as they can then run isolated from the underlying OS. However application developers are beginning to write cloud-aware applications from scratch that scale horizontally over abstracted hardware. Such cloudy applications are perfect for running in a distributed/redundant fashion inside containers.



OpenStack with its diversity of projects addressing different container requirements is well positioned to provide a choice of solutions for customers who are deploying /planning to deploy their applications/services on a private cloud. Come hear about what some of these projects are and how you can leverage them. Learn about who is deploying what OpenStack container projects and how at Cisco Live Berlin, Upcoming Container Based Services in OpenStack - DEVNET-1102  on 22.02.17 (Wednesday) 14:00 - Hall 2.2, The Hub, DevNet Classroom 2.


“Live as if you were to die tomorrow. Learn as if you were to live forever.” - Mahatma Gandhi


As humans we are always evolving with each experience and learning. In our modern world, this evolution also means how we are changing the way we learn, play, and build with new technologies. In my last blog, one word that I wanted to leave you with was ‘relevant’. As you are planning for your #CLEUR sessions, here are two innovation workshops to keep your skill set relevant for the dynamically evolving world. These sessions will present industry trends around IoT, digitization and how they are driving innovation by developers, makers, and builders.

DEVNET-1055 : Women in Tech-Intro to IoT

Introduction to IoT workshop takes a simple approach to learning by using Arduino electronic prototyping kits to built a simple IoT application example.  In the second part of this session, you will learn to build an application for a real industry IoT scenario using DevIoT. DevIoT is a Cisco DevNet application designed to help you quickly prototype and IoT application. Arduino kits will be provided for the workshop. Please download following on your laptop for this workshop.

1. Arduino IDE

2. Device drivers

3. SparkFun Skicode

DEVNET-1066: DevNet Innovations Showcase

This session brings to you key innovation trends in the industry and how technology innovation is driven by developer ecosystems. We will walk you through Cisco DevNet Creations platform that you can use to highlight the innovations you are working on and also to see what other developers are building to get inspired.

Hope to see you all at #CLEUR! Follow us on twitter to stay updated with all the DevNet Zone activity at Cisco Live Berlin.

Shubha Govil (@Shubhagovil) | Twitter

Cisco DevNet (@CiscoDevNet) | Twitter

It seems everyone is talking about the modern network engineer and the transition we all will have to undergo.  I am here to say it should not be scary or intimidating. It should be a fun opportunity to learn and think differently about networking.

Think about how many hours you’ve spent on repetitive tasks or commands you wished were there.


Now is our time to leverage API’s like NETCONF and RESTCONF to get the information we want in a format that’s easily manipulated.

  • Now is our time to let the machines:
    • shut/no shut
    • bounce dot1x after someone came back from working from home so long his machine cert expired
    • reapply port-security for the manager that continues to rearrange her office and forget that it matters where she plugs in.
    • kick of ip-sla to get a more descriptive answer than “slow” for an application performance
    • find all the devices affected by a field notice
  • Feel like you are giving the same message on troubleshooting IPSEC to your junior engineers? 
  • Want to get alerted when the configuration drifts from the gold config on your network?


Maybe your use cases are different from the ones I remember, but I’d love to help demonstrate how Network Programmability can save your sanity (and I can’t wait to hear your ideas).

Beyond the initial solutions to repetitive tasks and notifications, there is the concept of abstraction and simplification called Infrastructure as Code.  We can leverage Ansible and Puppet to deploy your validated solutions and/or simplified network services any number of times with a simple execution and instantiating variables on a set of templates.

I am very excited to get to meet many of you in the coming weeks at Cisco Live in Berlin and Melbourne. I will be delivering sessions on NetDevOps (DevNet-1002), Network Programmability with Python (DevNet-2449), SDN (TECSDN-2602 and TECSDN3602), and Programmability in DNA (TECCRS-2700) in Berlin and NetDevOps (DevNet-1002) and Programmability in DNA (TECCRS-2700) in Melbourne.  I will also be lurking around the DevNet Zone ready to pounce on anyone willing to listen


I hope to see you there and as always feel free to reach out to me on twitter @sdn_dude.

Python Cryptography Background for CiscoLive DevNet Sessions 1040, 1041 and 1042



Greetings DevNet 1040,1041 and 1042 session participants!


  I wanted to provide some additional background on cryptography that you can take a look at before, (or even after our sessions) at CiscoLive.


I’ve added a folder called "Part IV DevNet Sessions/Crypto Background” to the existing Python background material.  You can find it here:




There are seven videos with code examples, (almost 2.5 hours of content) focused on cryptography.  I’ve also updated the 'getting_started_contents.xlsx' spreadsheet in the main folder with a ‘crypto tab’ that explains what's out there.


   We will be demonstrating some examples of encryption using the Python ‘pycrypto’ module.  Pycrypto is one of the most popular crypto modules available and one of the more frequent PyPi repository downloads.


The code that we will base our examples on was taken from an excellent example tutorial called “Python  Encryption Tutorial with Pycrypto’ by Sentdex.  I've included the source (crypto.py) in the CiscoLive code example folders but it can also be found here:




There’s also a good youtube video that explains the code available here:




  The purpose of the videos and code samples that we’ve uploaded is to break down/decompose most of the program elements into it's  constituent parts.  The content is intended to provide some additional background information on concepts like:


     - Installing pycrypto in Windows environments

     - Demonstration of ‘compiling’ a python program (turning a .pyc file into a windows .exe file)

     - Base64 encoding

     - Python lambdas

     - How the AES algorithm works  - I.e. the various AES block modes of operation, implications of key size selection, making sense out

       of the programs block PADDING scheme, etc.,etc


   If your comfortable with the original code and video that was provided by Sentdex (both are excellent btw;), then please don’t bother with the content.


  If, on the other hand, you’d like to get a little more detail (perhaps from a different perspective) about how the code works or are interested in understanding some additional background about the AES cipher (and various design choices to consider when using it), then please, help yourself!


  If your not sure where to begin, then start out watching the last video module 7 called ‘Putting it all together’.  This just dissects the crypto.py program code step by step. Each element of the program has a video/code example that drills down from there.


  I’m looking forward to our DevNet sessions at CiscoLive and again, if I can help with any of the content, (before or after the sessions),or if you’d like to provide some guidance, feedback or personal insights of your own please feel free to comment below!





They are everywhere these days... they might be called "Micro-Services", "Cloud Native" or maybe "Modern Applications".  If you aren't an application developer, or if you are an application developer but you haven't had the need or interest to use these new architectures and concepts yet you may find yourself wondering what they heck the big deal is.  This confusion is most apparent when discussions around the necessity for a "cloud" to support these new applications.  I've been in many discussions with infrastructure teams and engineers who don't understand what the big deal is, why their application teams are telling them that their normal infrastructure and processes don't work anymore, and why they have abandoned the data center for "the cloud".




Like anything else, this confusion is most readily cleared up through understanding.  I wasn't immune to this confusion... it wasn't that long ago that I thought just a bit of automation around traditional infrastructure was enough.  But overtime I realized there really is something new and different about a modern application.


To help myself learn more about these applications, and later to help others understand, I started building a "Micro-Service" application, using as many of the new technologies, architectures and methods as possible.  The results of that effort was MyHero.




I've used the development of MyHero, and it's architecture, as the foundation for a technical presentation I call "Deconstructing Micro-Service Application Architecture and Design" (though I'm open to a catchier title if anyone has suggestions :-).  I'll be presenting the session at Cisco Live Berlin as BRKCLD-1009 and more information and registration can be found here -> http://cs.co/90028PkV0.



During the session I cover:

  • The difference between Client/Server and Micro-Service Architectures
  • Minimum Viable Product (MVP)
  • Development Topics like repositories, containers, caching, queuing, object storage
  • Continuous Development Process
  • And the Infrastructure Stack needed to support Micro-Service Applications


But never fear that you'll be subject to the dreaded "Death by PowerPoint".  This session is a chock full of Live Demos that the audience is encouraged to participate in.  Yes, that's correct Live Interactive Demos... I am certainly praying hard to the demo gods for this session.


I hope to see you there!




PS... Thanks to Roger for such amazing cartoons.  Checkout his other work at dcgubbins.com


Get Started with CICD

Posted by hapresto Feb 4, 2017

Continuous Development, or CICD, is a major buzz word and goal for most organizations these days, but how do you get started?  Or do you wonder if CICD even matters to you?  Though CICD is most often used by software development teams practicing the art of "DevOps" while building "agile" "cloud native" applications, it is my belief that CICD has a place throughout IT.  And yes, that even means for traditional infrastructure teams.




Like any new technology, CICD is often viewed as "magic" by those of us who haven't yet learned the underpinnings.  But once the mystique is removed, CICD (or more accurately CICD tools and practices) is just another tool in our tool belt as IT professionals.




About a year ago, I was able to dedicate a decent chuck of time to dive into and understand CICD, and it changed the way I did a lot of my work.  Initially it was just around different application development projects I was working on, but more and more I'm finding ways to use the skills in other ways as well.  Tapping into my interest in sharing knowledge with other people, I put together a hands-on lab that walks even the most novice person through CICD and how to quickly get up and running using CICD pipelines to Build, Deliver and Deploy in a Continuous fashion.



The original lab has been delivered by myself and several others at Cisco and gets excellent reviews every time.  After seeing that it was a useful class, I decided to bring it to DevNet Zone at Cisco Live starting in Berlin February 2017.  I've worked hard to update the lab to fit into the hands-on workshop format we use in DevNet Zone, and I can't wait to run it with our customers and partners in just a couple weeks.  If you will be in Berlin, be sure to register for "DEVNET-2203: Building a DevOps CICD Pipeline from Scratch" at this link -> http://cs.co/90068JTjo.  If you can't make it to Berlin, you can look for the lab at future Cisco Live's as well. 

I'm also planning on making a version of the lab available as a self-service lab up on DevNet Learning Labs, so keep an eye open for that soon!

See everyone in Berlin



Look around... go ahead, look around... You'll likely find yourself surrounded by Bots.  I'm not sure if we've reached "Peak Bot" yet, but they are certainly on the rise.




Chat Bot's aren't new... I remember "back in the day" having annoying Bots crash AIM and ICQ discussions I was having.  Most of the time when that would happen it was annoying and someone was trying to be malicious... Today, Chat Bots are being developed as useful personal assistants, next generation customer services, and of course for entertaining and humorous activities (I'm looking at you Chuck Norris Bot :-)




Cisco Spark is the enterprise collaboration platform of the future, and of course, it has Bots.  Built from the ground up to be a platform for developers to find new ways to integrate rich collaboration into applications, its no surprise that one of the first uses of the APIs it offered was to create bots.  "ChatOps" is joining "DevOps" as new methods of operating and working with technical platforms.  By letting engineers interact with infrastructure systems, building management systems, security systems, or just about anything through the same messaging platform they use all day long, efficiency productivity is on the rise. 




But you aren't a developer, how do you get started building your own bots?  Well, you my friend are in luck!  In DevNet Zone at Cisco Live Berlin 2017 I'm launching a new hands on lab designed to help anyone get started with Spark Bots.    In fact, we'll look at how you can have a new Bot up and running in only 5 minutes!  (or maybe 10... :-)  By using a SparkBot Boilerplate project I've built, all of the intricacies of the building the bot structure, integrating with Spark, and how to bring the bot "alive" in the cloud are taken care of for you, and you can focus on adding new features and capabilities to your new bot.




So if you'll be at CLEUR, be sure to come checkout "DEVNET-2320: Bots are taking over the world - Learn How to Join the Army".  You can find details on the session and register here -> http://cs.co/90058zpyd.  Not coming to Berlin, but still want to learn?  Never fear, the session should be available at future Cisco Lives as well.  Don't want to wait for Cisco Live?  I don't blame you at all.  I will bring the hands on workshop to DevNet Learning Labs in the very near future as well. 

Long Live the Bot! 

See you in Berlin!  And even if you can't make the workshop, be sure to find me.  I'll be around DevNet Zone all week! 

Hank Preston


Filter Blog

By date:
By tag: