- In the previous video in this series,
which I've linked here and below,
I showed you how to interpret JSON data.
I showed you a JSON object as well as a JSON array.
I also showed you how to use JSON on a Nexus device.
So, we could use a command such as show interface Vlan100
and pipe that to JSON or pipe that to JSON pretty.
In this video what we're going to do is use Python on-box,
so, Python running on the Nexus device,
and I'm gonna show you how you can use CLI commands
within Python running on the Nexus device.
So, in this video we start in slowly,
I wanna introduce some Python concepts to you,
I wanna show you how you can run Python directly
on a Nexus device and run show commands
and other commands directly within Python running
on the Nexus device.
In the next video I'm gonna create a Python script
that runs locally within Ubuntu on my Mac
and then I'm gonna SSH to the Nexus device
and run commands on the Nexus device
and extract the data from the Nexus device using Python.
So, this is a step by step process.
We've looked a little bit at JSON,
now we're going to run a Python script on-box
and then in the next video,
I'll show you how to use Python locally on my laptop.
Now, please do me a favor.
If you're enjoying the CC and P course
consider subscribing to my YouTube channel,
consider liking this video
and clicking on the bell to get notifications.
That really does help me with the YouTube robots.
Okay, let's get started.
(techno music)
Okay, so I'm going to copy this bit of Python code.
Go back to the Nexus box.
At the moment I'm not running Python.
I can run standard Cisco IOS commands
such as show IP interface brief.
Or show version.
So, these are standard commands.
Show run, et cetera.
But what I'm gonna do now is run Python.
This is on-box Python.
I'm running Python directly on this Nexus box.
And I'm gonna teach you a bit of Python now.
The first statement we're gonna use is
from cli import *.
So, from cli import * or import everything.
To be able to use CLI commands from within Python,
running on this Nexus box we need to import CLI.
We need to type that command to allow us
to basically run any CLI command.
This is called a variable, cmd1.
You can call this anything you wanted to.
The command that we're going to run
is show IP interface brief JSON pretty.
So, we're basically using the command
that I've previously demonstrated.
So, I'll quit out of Python just to show you that again.
Show IP interface brief.
JSON pretty.
That's me typing the command manually
and here's our output once again.
JSON array.
But I'm going to run Python on-box.
The version of Python here is 2.7.11.
Now for the real world you really wanna learn Python 3,
if you're new to Python.
But, here's a real world example of why sometimes
it's well worth knowing about Python 2.7
because you'll still encounter it.
Devices like this Nexus are running Python 2.7,
not Python 3.
So, once again I need to type from cli import everything
and then I'm going to paste this statement that says
this command is gonna be stored in this variable.
So, if I type cmd1, that's the command that's stored
in this variable.
So, here I'm going to store the output of that command
in another variable.
Basically the output variable stores the output
of this command, which I'm running using the CLI function.
So, if I look at output1 now, there's the output.
There's the information stored in that variable.
But, it's not very easy to read.
So, I'm gonna type print(output1)
and there you go.
There's the output of that show command
in JSON formatting running within Python.
Now, if you're new to Python you might say,
but, David, I could just type the command manually.
Sure you could.
But I'm showing you this step by step.
In a moment I'm going to show you how to run a Python script
from my local computer that SSHs into this device
and runs one or two commands and then extracts information
from that device and shows it on my local computer.
So, rather than me having to manually SSH or log in
to the device, type a command, see the output
and then interpret it, I can get a Python script
to automatically do that.
In this example I'm doing it for one device,
but remember, I could do this with a hundred devices
or 500 devices.
Automation and network programmability make a lot of sense
when you have many devices.
Not necessarily always when you only have one device.
But you need to work in building blocks.
So, basically, this little script of four lines
and I could've made it short if I wanted to,
but I don't wanna make it complex,
I wanna make it easy to read.
Short script of four lines has given me the output
of show IP interface brief using JSON pretty format.
What we can do now is extract specific information
from the table interface dictionary
and the row interface dictionary.
This is what's called a dictionary.
We can query this information.
So, as an example, I could query
the IP address of a specific interface if I wanted to.
So, let's do that by updating our script.
So, this information is the same,
but what I'm gonna do now is load that information using
this command so that Python knows that this information
is in JSON format.
At the moment it's currently a string.
So, if I use the type command and look at output one
it's a string and we can't query that data format
as easily as JSON, so it's gonna make much more sense
to change this into a dictionary using JSON formatting
so that we can query the information much more easily.
Remember the captcha.
Captcha is a way to stop machines.
It's easier for humans but not easy for machines.
Here we wanna put it in a format that machines understand.
And again, if you know Python you could do
this more simply than I am.
It's complaining about my script and that's because
I forgot this command.
Previously I had this as output1
and I actually changed the script.
So, that's bad.
So, let's do that again.
So, to make sure that you're not confused
I'll simply start this from the beginning again.
So, I'll quit out of Python
and let's start again.
So, Python 2.7.
These commands you've already seen.
So, let's copy those commands
and I'll paste them into Python which is running
on that Nexus device.
This statement runs this command using the CLI function
and stores it in json_data rather than in output one.
Which is the name I used previously.
So, that json_data now contains the information
but the problem with that is it's a string.
So, notice type string.
So, what I wanna do is I wanna load
that data using json.loads.
So, I'm loading this information using
this function and I'm storing it in this variable.
Now, json_final has that information.
I actually wanted to use type here
so that we can see what type this is.
What you can see is it's now a dictionary.
Dictionaries in Python use key value pairs.
So, I can query, very easily, within the dictionary
for specific piece of information rather
than trying to parse or go through a string
and look for specific characters and then find the answer.
That's very difficult to do for a machine.
Very easy for us as humans.
But, once again, it's the idea of show version
is just text, easy for a human to read that,
not for a machine.
If I put that into JSON format, it's much easier
to find information.
So, as an example, what I can do now is print
the prefix of the first interface.
So, going up through this information,
not easy to read here, but notice the first interface
is Vlan100, first IP address is this.
So, if I paste that command in,
we've just retrieved the IP address or prefix
of the first interface.
Again, that's not very easy but don't lose sight
of the fact that I'm going to show you a script
in a moment that automates all of this.
Just trying to show you step by step.
So, again, just to make sure that you understand
the script we are importing CLI so
we can use CLI commands within Python.
We're importing JSON so that we can use this command
which allows us to take the string data
and basically convert it to a dictionary
so we have JSON formatting.
This is the command that we ran on the switch,
show IP interface brief JSON pretty.
And then I've now queried that data
which is stored in what's called a dictionary.
A dictionary in Python is an unordered key value pair.
So, I can simply look for a value in the dictionary
and easily retrieve a piece of information.
So, again, I've retrieved the IP address
of the first interface starting at zero.
Now, if want the IP address of the second interface
I could change that to one.
Third interface.
Fourth interface.
Now, I'm doing that manually.
That's not the idea with automation.
The idea with automation is to automate this.
But I'm bolding or iterating is the term we use
in programming, I'm iterating the process,
improving what I'm doing and hopefully teaching
you along the way.
But notice how cool this is.
We're running Python on a Cisco Nexus device.
So, I simply started Python on the Nexus device.
Once again, I'll exit out of Python.
I simply typed Python to start Python on the Nexus device
and now I'm running Python scripts directly
on the Nexus device.
I'm gonna show you some other videos
in this course showing you how to do
sort of Linux based commands
and Python on XE.
This is Nexus, IOS XE also supports Python
so you can run Python directly on an IOS XE device.
Classic or monolithic IOS doesn't support Python
but you can still use Linux commands on classic IOS.
Notice where the world is going,
notice how it's important for you to learn Python,
network automation, Linux, these kind of new skills
is where the industry's moving.
(techno music)