Skip to main content
  1. Posts/

Basic Python Concepts for Network Engineers

·772 words·4 mins· ·
thedood
Python Fundamentals networking python automation eos cheatsheet
Author
The Dood
The Networkdood
Table of Contents
Basic Python with EOS - This article is part of a series.

Introduction
#

Python has become the de facto language for network automation, and with good reason. Its readable syntax, extensive libraries, and powerful capabilities make it ideal for managing network infrastructure, including Arista’s EOS (Extensible Operating System). This article introduces essential Python concepts specifically tailored for network engineers looking to enhance their automation capabilities.

Why Python Matters for Network Automation
#

For network engineers, Python offers several key advantages:

  • Readability: Python’s clean syntax resembles pseudocode, making it accessible even to those new to programming
  • Extensive Libraries: Purpose-built libraries like Netmiko, pyeapi, and Nornir streamline network automation tasks
  • Vendor Support: Major vendors including Arista actively support Python interfaces to their platforms
  • Community: Large community of network engineers sharing code, tools, and knowledge

Setting Up Your Python Environment
#

Before diving into coding, you’ll need a proper environment:

Python Installation
#

  • Download and install Python (3.8 or newer recommended) from python.org
  • Ensure pip (Python’s package manager) is installed
  • VS Code, it’s Notepadd++ but plus plus better!

Network Engineer’s Basic Toolkit
#

# Install essential libraries for network automation
pip install pyeapi requests netmiko pyyaml

PyEAPI
#

Python library for Arista EOS API

Requests
#

Requests library for HTTP requests

Netmiko
#

Multi-vendor library for SSH connections

PyYAML
#

YAML parser for configuration files

Python Syntax Fundamentals with Network Examples
#

Variables and Data Types
#

# String - for hostnames, interface names, etc.
hostname = "thedoodswitch"

# Integers - for VLAN IDs, port numbers, etc.
vlan_id = 100
port_number = 22

# Floating point - for utilization percentages, etc.
interface_utilization = 67.5

# Boolean - for interface status, feature enablement
interface_up = True
ospf_enabled = False

Working with Strings
#

# String operations for network data
hostname = "thedoodswitch.networkdood.com"
location = "DOOD-DC1"

# String methods
print(hostname.split(".")[0])  # Output: thedoodswitch
print(location.startswith("DOOD"))  # Output: True
print(f"Device {hostname} is located at {location}")  # f-strings for formatting

Lists and Dictionaries
#

# List of VLANs
vlans = [10, 20, 30, 40, 50]
print(f"First VLAN: {vlans[0]}")  # Access by index

# List of interfaces
interfaces = ["Ethernet1", "Ethernet2", "Management1", "Loopback0"]
print(f"Management interface: {interfaces[2]}")

# Dictionary for device information
device = {
    "hostname": "thedoodswitch",
    "model": "DCS-7280SR-48C6",
    "mgmt_ip": "10.0.0.1",
    "version": "4.28.1F",
    "location": "DOOD-DC1"
}
print(f"Device IP: {device['mgmt_ip']}")

Control Structures
#

Conditional Statements
#

# Check interface status
interface_status = "up"
interface_errors = 0

if interface_status == "up" and interface_errors == 0:
    print("Interface is healthy")
elif interface_status == "up" and interface_errors > 0:
    print("Interface is up but has errors")
else:
    print("Interface is down")

# Check device model for feature compatibility
model = "DCS-7280SR"
if "7280" in model:
    print("Device supports advanced routing features")

Loops
#

# For loop to check multiple interfaces
interfaces = ["Ethernet1", "Ethernet2", "Ethernet3", "Ethernet4"]
for interface in interfaces:
    print(f"Checking configuration on {interface}")

# While loop for a retry mechanism
max_retries = 5
retry_count = 0
connected = False

while not connected and retry_count < max_retries:
    print(f"Attempting to connect (attempt {retry_count + 1})")
    # Connection logic would go here
    connected = True  # Assuming success for this example
    retry_count += 1

Functions for Network Tasks
#

def check_vlan_exists(switch_config, vlan_id):
    """
    Check if a VLAN exists in the switch configuration
    
    Args:
        switch_config (str): The switch configuration text
        vlan_id (int): The VLAN ID to check for
        
    Returns:
        bool: True if VLAN exists, False otherwise
    """
    vlan_line = f"vlan {vlan_id}"
    return vlan_line in switch_config

# Example usage
config = """
vlan 10
   name Finance
vlan 20
   name Engineering
vlan 30
   name Marketing
"""

print(check_vlan_exists(config, 20))  # True
print(check_vlan_exists(config, 50))  # False

Error Handling
#

# Try/except to handle connection issues
import requests

def get_device_info(ip_address):
    try:
        response = requests.get(f"https://{ip_address}/api/v1/device", 
                               verify=False, timeout=5)
        return response.json()
    except requests.exceptions.ConnectionError:
        print(f"Cannot connect to {ip_address}")
        return None
    except requests.exceptions.Timeout:
        print(f"Connection to {ip_address} timed out")
        return None
    except Exception as e:
        print(f"Unexpected error: {str(e)}")
        return None

Working with Files
#

# Reading a configuration file
def read_config_file(filename):
    try:
        with open(filename, 'r') as file:
            return file.read()
    except FileNotFoundError:
        print(f"Config file {filename} not found")
        return ""

# Writing a backup configuration
def backup_config(device_name, config):
    from datetime import datetime
    timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
    filename = f"{device_name}-{timestamp}.conf"
    
    with open(filename, 'w') as file:
        file.write(config)
    
    print(f"Backup saved to {filename}")
    return filename

Next Steps
#

Now that you’ve learned the basic Python concepts relevant to network engineering, you’re ready to start applying them to Arista EOS devices. In the next article, we’ll cover setting up Python environments specifically for EOS interaction, including the necessary libraries and connection methods.

Stay tuned for Part 2: “Setting Up Python Environments for EOS Interaction”!

Resources for Further Learning
#

Basic Python with EOS - This article is part of a series.