Skip to content
Advertisement

Python – Output hostname and config

I have a script that runs through a list of hostnames/IPs and outputs to a csv “hostname, output”, in the same cell.

I need that the Hostname stays in cell A1, and the Output stays on Cell B1 (and so on – A2 B2 etc)

Can you help me?

The code is this:

import netmiko
import csv
import datetime
import csv
import threading
from datetime import datetime

nodenum=1
f=open('routers.csv', 'r') #Hostname file
c=f.read()
file_as_list = c.splitlines()


with open('Output.csv','w') as f: #Output file
    write = csv.writer(f)
    write.writerow(['Hostname', 'Cellular'])

    logf = open("error.csv", "a") #Failed Connection file
    loga = csv.writer(logf)
    loga.writerow(["Hostname"])

    for i in file_as_list :
        print ("Node", nodenum, "...Checking IP Address...", i)
        try:
            Connection = netmiko.ConnectHandler(ip=i, device_type="cisco_ios" , username="x", password="y", verbose=False)
        except:
            try:
                print("Cannot connect via SSH. Trying Telnet")
                Connection = netmiko.ConnectHandler(ip=i, device_type="cisco_ios_telnet" , username="x", password="y", verbose=False)
                
            except:
                    print("SSH and Telnet Failed")
                    print("")
                    now = str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
                    loga.writerow([i])
                    nodenum = nodenum+1
                    continue
          
        hostname = (Connection.send_command("show run | include hostname"))
        cellular = (Connection.send_command("sh ip int brief"))
        Connection.disconnect

        
            
        write.writerow([hostname,cellular])
        nodenum = nodenum +1
        
    logf.close()    
    f.close()

Advertisement

Answer

I need that the Hostname stays in cell A1, and the Output stays on Cell B1 (and so on – A2 B2 etc)

routers.csv file

Router
192.168.1.1
192.168.1.2
192.168.1.3

I think this is what you need

import csv

from netmiko import ConnectHandler

with open("routers.csv", "r", newline="") as csvfile:
    spamreader = csv.reader(csvfile, delimiter="n")
    next(spamreader)  # skip header line in csv file
    routers = [router[0] for router in spamreader]

with open("output.csv", "w", newline="n") as f:  # Output file
    writer = csv.writer(f)
    writer.writerow(["Hostname", "Output"])

    for nodenum, router in enumerate(routers, start=1):
        print(f"Node: {nodenum}. Checking IP Address {router}...")
        try:
            with ConnectHandler(
                device_type="cisco_ios_telnet",
                ip=router,
                username="x",
                password="y",
            ) as conn:
                hostname = conn.find_prompt()[:-1]  # get hostname
                # the command you want to get
                intf_brief = conn.send_command("show ip interface brief")

            writer.writerow([hostname, intf_brief])
        except:
            print(f"Failed to connect to {router}")
            with open("error.csv", "w", newline="n") as errlog:
                loga = csv.writer(errlog)
                loga.writerow(["Router IP"])
                loga.writerow([router])

EDIT:

Updated Python script to read csv file using csv.reader()

output.csv file

Hostname,Output
R1,"Interface              IP-Address      OK? Method Status                Protocol
GigabitEthernet1       10.10.10.48     YES NVRAM  up                    up      
GigabitEthernet2       unassigned      YES NVRAM  administratively down down    
GigabitEthernet3       unassigned      YES NVRAM  administratively down down    "
R2,"Interface              IP-Address      OK? Method Status                Protocol
GigabitEthernet1       10.10.10.48     YES other  up                    up      
GigabitEthernet2       10.255.255.1    YES other  up                    up          
GigabitEthernet3       unassigned      YES NVRAM  down                  down    
    "
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement