Napalm Network Automation Basics
Napalm Network Automation Basics#
Getting Started#
Install the prerequisites
- Python
- Virtualbox
- Vagrant
Install napalm
pip install napalm
Getting Facts from a device#
Import napalm
import napalm
Get the network driver
driver = napalm.get_network_driver("junos")
You would want to get this from cmdb rather
Use the driver like a function to get a handle on a specific device
device = driver(hostname="vqfx1", username="antidote", password="antidotepassword")
Initiate the connection with:
device.open()
Get facts of the device:
device.get_facts()
Get Interfaces on a device#
interfaces = device.get_interfaces()
print the interfaces
print(interfaces)
You can loop through this response to see which interfaces are up or down:
for if_name, if_properties in interfaces.items():
    if if_properties['is_up']:
        print("Interface %s is UP" % if_name)
    else:
        print("Interface %s is DOWN" % if_name)
Get layer 3 information with:
layer3 = device.get_interfaces_ip()
See a full list of functions supported by napalm
Command Line Utility#
You can create an alias for brevity
alias napalm="napalm --user=antidote --password=antidotepassword --vendor=junos"
Then you can run all napalm functions directly from the cli
napalm vqfx1 call get_interfaces
Use bash utilities to pipe response and find a specific interface
napalm vqfx1 call get_interfaces | jq .em4
Execute a ping (reacability test):
napalm vqfx1 call ping --method-kwargs="destination='10.0.0.15'"
Commiting configurations#
    import napalm
    vqfx1_config = """
    <configuration>
        <interfaces>
            <interface>
                <name>em0</name>
                <unit>
                    <name>0</name>
                    <description>This is em0, and it connects to something.</description>
                </unit>
            </interface>
        </interfaces>
    </configuration>
    """
    driver = napalm.get_network_driver("junos")
    device = driver(hostname="vqfx1", username="antidote", password="antidotepassword")
    device.open()
    # Load device config
    device.load_merge_candidate(config=vqfx1_config)
    # Compare the device config
    print(device.compare_config())
    # Discard the config
    # device.commit_config()
    # Commit config
    device.commit_config()
    # Roll back an update
    device.rollback()