python-3.xnapalm

Use for loop with dictionary


I'm using Napalm to change the hostname of many network devices. Since the config will be different for each device, I need the script to assign the proper config to each device based on it's IP address. This seems like a dictionary would work best.

devicelist = {'10.255.32.1': 'device1.cfg', '10.255.32.5': 'device2.cfg'}

I need help calling the key value in the script below for each IP address. I have highlighted the line of code where this is required.

from napalm import get_network_driver
devicelist = ['10.255.32.1',
           '10.255.32.5'
           ]

for ip_address in devicelist:
    print ("Connecting to " + str(ip_address))
    driver = get_network_driver('ios')
    iosv = driver(ip_address, 'admin', 'password')
    iosv.open()
    **iosv.load_merge_candidate(filename='device1.cfg')**
    diffs = iosv.compare_config()
    if len(diffs) > 0:
        print(diffs)
        iosv.commit_config()
    else:
        print('No changes required.')
        iosv.discard_config()

    iosv.close()

Solution

  • You are asking for a simple access by key on your dictionary, combined with a for loop over the dictionary which is automatically a for loop over the keys. Minimal example:

    devicelist = {'10.255.32.1': 'device1.cfg', '10.255.32.5': 'device2.cfg'}
    
    for ipAdress in devicelist:
        print("This IP : {} maps to this name: {}".format(ipAdress, devicelist[ipAdress]))
    

    Output:

    This IP : 10.255.32.1 maps to this name: device1.cfg
    This IP : 10.255.32.5 maps to this name: device2.cfg