Getting started with Network Automation using Python and Netmiko pt II


Let’s get started where we left off from part one.. With an upstream and downstream reading from the router, rather crudely extracted from a line of text output and placed into a pair of variables.

So, previously we were able to print the bandwidth values prepended by some text. This time we will wrap some text around these variables to create meaningful IOS commands ready for delivery to our device.

Let’s start where we generated screen output from last time :

print ("bandwidth",upstream) print ("bandwidth receive",downstream)

We can use this text and the variables to create a new string to build each command we’ll be sending to the router :

upstream_cli = "bandwidth " + upstream downstream_cli = "bandwidth receive " + downstream

Now we need to make some preparations to send these to the router by placing them into a list.

cli_commands = ['interface dialer 0', upstream_cli, downstream_cli]

We have created a list, which Netmiko will iterate over and deliver to the router in order. We get this done by passing the list to Netmiko’s send_config_set method. Remember that we already setup the ssh connection via net_connect to the router earlier in part 1, which should still be active.

Recall that Netmiko already knows we are configuring a Cisco device, so it helpfully adds the required ‘conf t’ as it delivers the commands for us.

net_connect.enable() # enter enable mode net_connect.send_config_set(cli_commands) # send the commands from our list net_connect.disconnect() # close the connection gracefully

And there we have it, our first automated configuration change is complete. If we log onto the router, a ‘show run int dial 0’ verifies that our commands have been successfully delivered.

interface Dialer0 bandwidth 760 bandwidth receive 4347

-snip-

For reference, here is the finished Python code :

from netmiko import ConnectHandler

router = { 'device_type': 'cisco_ios', 'ip': 'IP_ADDRESS', 'username': 'USERNAME', 'password': 'PASSWORD', 'port' : 22, # optional, defaults to 22 'secret': 'ENABLE PASSWORD', # optional, defaults to '' 'verbose': True, # optional, defaults to True }

net_connect = ConnectHandler(**router)

output = net_connect.send_command('show controllers vdsl 0') output = output.split('\n')

print ("parsing output..\n") for line in output: if '(kbps)' in line: speed = line print (line,'\n')

speed = speed.split(' ') downstream = str(speed[19]) upstream = str(speed[37])

upstream_cli = "bandwidth " + upstream downstream_cli = "bandwidth receive " + downstream cli_commands = ['interface dialer 0', upstream_cli, downstream_cli]

for line in cli_commands: print (line)

net_connect.enable() net_connect.send_config_set(cli_commands) net_connect.disconnect()

#Automation #NetworkAutomation #Cisco #Python #CLI #Code

Featured Posts
Recent Posts