In this post, I will give small sample about python scripting code for Arista devices. As you know, network engineering has been evolving to learn automation with network equipments. Many companies has started to drop CLI in devices and using automation tools to operate their devices. So this tend network engineers to learn scripting languages. Because of many aspects, Python is more suitable for network engineers.

Current project that I am involving now, we need to count all used ports in our datacenter for each month in order to give a “usage report” to our managers. This datacenter is so large and to count those ports in each month is so exhausting via CLI to each devices. So I wrote simple code to connect each devices and check up down status,speed of them and type of them. I share this post to help beginner engineers for automation and show them what they can simply do with python in Arista.

In this code, I used “pyeapi”. Pyeapi is a module that Arista has created and involve many submodules and methods for arista commands. Pyeapi provides connection to Arista switches with API interfaces. So you can send related commands, get related information from devices. REST-API is really good for getting and sending commands to Arista. For example, when you send a command ” show interfaces status” , you can get JSON output sttructure and process this data as you want for your script.

When you run below script, you will get total sum copper 1gi,10gi and fiber 1gi and 10gi connected ports number separately from 100 switches in Arista.

import pprint
import pyeapi
import re
import traceback
switches =[]
i=101
while i<201:
fourh_octet=i
IP= "10.129.34."+str(fourh_octet)
i = i+1
switches.append(IP)
genelbakir1gi=0
genelbakir10gi=0
genelfiber1gi=0
genelfiber10gi=0
try:
for i in switches:
    try:
        node = pyeapi.connect(transport="https", host=i, username="xxxxx", password="xxxxx", port=None)
        print i
        a=1
        version=node.execute((["show version"]))
        parse=re.split(r'-',version['result'][0]['modelName'])
        parsing=re.split('0',parse[1])
        print parsing[1]
        copperorfiber= parsing[1]
        sum1gi=0
        sum10gi=0
        while 0<a<49:
            showinterface= node.execute(["show interfaces ethernet"+' '+str(a) ])
            for m in showinterface['result'][0]['interfaces']:
                if showinterface['result'][0]['interfaces'][m]['interfaceStatus']=='connected':
                    print m
                    speed=showinterface['result'][0]['interfaces'][m]['bandwidth']/1000000000
                    print speed
                    if speed==10:
                        sum10gi=sum10gi+1
                    elif speed==1:
                        sum1gi=sum1gi+1
                else:
                    continue
            a=a+1
        print sum1gi
        print sum10gi
        if copperorfiber == 'TR':
            genelbakir1gi=genelbakir1gi+sum1gi
            genelbakir10gi = genelbakir10gi + sum10gi
        elif copperorfiber == 'SR':
            genelfiber1gi=genelfiber1gi+sum1gi
            genelfiber10gi = genelfiber10gi + sum10gi
    except Exception as e:
        print "connection problem>>" + str(e)
        print(traceback.format_exc())

print "toplam connnected bakir 1gi sayisi:"+' '+str(genelbakir1gi)
print "toplam connnected bakir 10gi sayisi:"+' '+str(genelbakir10gi)
print "toplam connnected fiber 1gi sayisi:"+' '+str(genelfiber1gi)
print "toplam connnected fiber 10gi sayisi:"+' '+str(genelfiber10gi)

except Exception as e:
     print 'Error:Any problem exists in your code >> '+str(e)
     print(traceback.format_exc())

OUTPUT:
toplam connnected bakir 1gi sayisi: 108
toplam connnected bakir 10gi sayisi: 0
toplam connnected fiber 1gi sayisi: 0
toplam connnected fiber 10gi sayisi: 217

Remember that you can write this output a file or excel and send mail to your manager directly. We used this script in a service provider for monthly-port report to managers. It is still working.

By Mahmut Aydin

CCIE R&S #63405

Leave a Reply

Your email address will not be published.