What Python for Network Engineers Means and Why It Matters in 2026
Python for network engineers is the practice of using Python programming to automate network configuration, monitor infrastructure health, interact with vendor APIs, and orchestrate multi-device workflows that would otherwise require manual CLI commands on hundreds of routers and switches. In 2026, Python has become the de facto scripting language for network automation because it combines human-readable syntax with powerful libraries like Netmiko, NAPALM, Nornir, and Paramiko that abstract vendor-specific CLI differences. Network engineers who learn Python reduce configuration errors by 70-80%, cut deployment time from days to minutes, and qualify for roles at Cisco India, Akamai, Aryaka, and HCL that pay ₹6-12 LPA for freshers with automation skills versus ₹3.5-5 LPA for CLI-only profiles.
The shift from manual CLI to Python-driven automation is not optional anymore. Cisco's DevNet certification track, launched in 2020, now sits alongside CCNA and CCNP as a core career path. Enterprises managing SD-WAN fabrics, multi-cloud connectivity, and zero-trust network access (ZTNA) deployments cannot scale without automation. In our HSR Layout lab, we tested a Python script using Netmiko to push OSPF configurations to 50 Cisco routers; the task completed in 4 minutes versus an estimated 6 hours of manual CLI work with inevitable typos. This efficiency gain is why 45,000+ placements from Networkers Home now include Python automation as a mandatory skill for roles at Barracuda, Movate, Wipro, TCS, and Infosys network operations centers.
Python also unlocks API-driven workflows. Modern network controllers like Cisco DNA Center, Meraki Dashboard, and Arista CloudVision expose RESTful APIs that return JSON data. A network engineer who understands Python can query these APIs to pull interface statistics, push VLANs across 200 switches, or trigger automated incident tickets in ServiceNow when a WAN link flaps. This API fluency is the bridge between traditional networking and DevOps, making Python-skilled engineers indispensable in hybrid IT teams.
How Python Automation Works in Network Engineering Workflows
Python automation in networking relies on three core mechanisms: SSH-based CLI automation, API interaction via HTTP libraries, and data parsing with regular expressions or structured formats like JSON and YAML. The most common workflow starts with a Python script that reads a CSV or YAML file containing device hostnames, IP addresses, and configuration parameters. The script then uses a library like Netmiko to establish SSH sessions to each device, send CLI commands, capture output, and log results to a file or database.
Under the hood, Netmiko wraps Paramiko (a low-level SSH library) and adds vendor-specific intelligence. When you call net_connect.send_config_set(['interface GigabitEthernet0/1', 'description UPLINK_TO_CORE', 'no shutdown']), Netmiko automatically enters configuration mode, sends each command, waits for the prompt, and exits configuration mode. This abstraction eliminates the need to manually handle expect-style prompt matching that plagued older Expect scripts. For Cisco IOS, IOS-XE, NX-OS, and ASA, Netmiko knows the correct enable password prompts, configuration mode syntax, and commit commands.
API-driven automation follows a different pattern. A Python script uses the requests library to send HTTP GET, POST, PUT, or DELETE requests to a controller's API endpoint. For example, to retrieve all access points from a Cisco Meraki dashboard, the script sends a GET request to https://api.meraki.com/api/v1/organizations/{orgId}/devices with an API key in the header. The controller responds with a JSON payload containing device serial numbers, models, and status. The script parses this JSON using Python's built-in json module, filters devices by status, and generates a compliance report. This approach scales to thousands of devices because the controller handles the heavy lifting; the Python script only orchestrates the workflow.
Data parsing is the third pillar. Network devices return unstructured CLI output (plain text with varying whitespace). Python libraries like TextFSM and Genie convert this text into structured dictionaries. A TextFSM template defines regex patterns to extract fields like interface name, IP address, and status from show ip interface brief output. Once parsed into a dictionary, the script can filter interfaces, compare configurations, or trigger alerts. In our CCNA automation course in Bangalore, students build a script that parses show version output from 20 routers, identifies devices running outdated IOS versions, and generates a patching priority list—a task that mirrors real NOC workflows at Cisco India and Akamai.
Python vs Ansible, Bash, and Vendor-Specific Tools for Network Automation
Network engineers often ask whether to learn Python, Ansible, Bash scripting, or vendor-specific tools like Cisco's Embedded Event Manager (EEM). Each has a role, but Python offers the widest applicability and deepest control. Ansible is an agentless automation platform that uses YAML playbooks to configure devices. It excels at idempotent configuration management (ensuring devices match a desired state) and integrates well with CI/CD pipelines. However, Ansible's networking modules are wrappers around Python libraries like Netmiko and NAPALM. When an Ansible playbook fails due to a vendor quirk, troubleshooting requires Python knowledge. Python gives you the flexibility to handle edge cases, custom parsing, and multi-step logic that Ansible playbooks cannot express cleanly.
Bash scripting is powerful for Linux-based network appliances and orchestrating CLI tools, but it lacks native libraries for SSH, API interaction, and JSON parsing. A Bash script that SSHs into a router using sshpass and pipes output through grep and awk is fragile and hard to maintain. Python's subprocess module can call Bash commands when needed, but Python's error handling, data structures, and third-party libraries make it superior for complex workflows. Vendor-specific tools like Cisco EEM or Juniper's event scripts are embedded on the device and trigger actions based on syslog events. They are useful for local automation (e.g., auto-recovery of a flapping interface) but cannot orchestrate multi-device workflows or integrate with external systems like ticketing platforms.
| Tool | Best Use Case | Learning Curve | Multi-Vendor Support | API Integration |
|---|---|---|---|---|
| Python | Custom automation, API workflows, data parsing, complex logic | Moderate (2-3 months for networking tasks) | Excellent (Netmiko supports 50+ platforms) | Native via requests, urllib3 |
| Ansible | Idempotent config management, CI/CD integration, team collaboration | Low (YAML is declarative) | Good (uses Python libraries under the hood) | Via modules, less flexible than raw Python |
| Bash | Linux appliance scripting, quick CLI glue, cron jobs | Low for basics, high for robust error handling | Poor (requires external tools like sshpass) |
Requires curl or wget, no native JSON parsing |
| Vendor EEM/Scripts | On-device event response, local auto-remediation | Low (vendor-specific syntax) | None (locked to one vendor) | None |
In practice, Python and Ansible complement each other. Python handles custom logic, API orchestration, and data transformation. Ansible handles declarative configuration pushes and integrates with GitOps workflows. At Aryaka and Akamai India, network engineers use Python to collect telemetry from APIs, analyze trends, and generate configuration snippets, then feed those snippets into Ansible playbooks for deployment. This hybrid approach is what we teach in our CCNA automation course in Bangalore, where students automate a 30-device SD-WAN lab using both Python scripts and Ansible playbooks.
Essential Python Libraries Every Network Engineer Must Know
The Python ecosystem for networking revolves around six core libraries, each solving a specific automation challenge. Netmiko is the workhorse for SSH-based CLI automation. It supports over 50 platforms including Cisco IOS, NX-OS, ASA, Arista EOS, Juniper Junos, HP Comware, and Palo Alto PAN-OS. A typical Netmiko script imports the ConnectHandler class, defines a device dictionary with hostname, username, password, and device type, then calls methods like send_command() for show commands or send_config_set() for configuration changes. Netmiko handles enable mode, configuration mode, and commit commands automatically, reducing a 50-line Paramiko script to 10 lines.
NAPALM (Network Automation and Programmability Abstraction Layer with Multivendor support) provides a unified API across vendors. Instead of writing vendor-specific CLI commands, you call methods like get_interfaces(), get_bgp_neighbors(), or load_merge_candidate(). NAPALM translates these calls into the appropriate CLI commands for Cisco, Juniper, Arista, or other supported platforms. This abstraction is critical for multi-vendor environments. A script that retrieves interface statistics using NAPALM works unchanged whether the device is a Cisco Catalyst or a Juniper EX switch. NAPALM also supports configuration rollback, a feature missing in raw Netmiko workflows.
Paramiko is the low-level SSH library that Netmiko wraps. Most network engineers never call Paramiko directly, but understanding it helps debug connection issues. Paramiko handles SSH key exchange, authentication, and channel management. When Netmiko fails with a cryptic SSH error, the root cause is often a Paramiko compatibility issue with older IOS versions that only support weak ciphers. In our HSR Layout lab, we encountered this with Cisco 2960 switches running IOS 12.2; the fix required adding disabled_algorithms={'pubkeys': ['rsa-sha2-256', 'rsa-sha2-512']} to the Paramiko transport, a detail only visible by reading Paramiko's source code.
Requests is the de facto library for HTTP API interaction. It simplifies GET, POST, PUT, and DELETE requests with automatic JSON encoding/decoding, session management, and SSL verification. A typical API workflow imports requests, defines headers with an API token, sends a GET request to an endpoint, checks the status code, and parses the JSON response. For example, querying Cisco DNA Center's network health API requires a POST to /dna/system/api/v1/auth/token to obtain a token, then a GET to /dna/intent/api/v1/network-health with that token in the X-Auth-Token header. Requests handles cookies, redirects, and retries, making it far more robust than raw urllib calls.
TextFSM and Genie parse unstructured CLI output into structured data. TextFSM uses regex-based templates to extract fields from text. The ntc-templates repository on GitHub provides 200+ pre-built templates for common Cisco, Juniper, and Arista commands. A script that parses show ip route output loads the appropriate TextFSM template, passes the CLI text, and receives a list of dictionaries with keys like network, mask, next_hop, and protocol. Genie, part of Cisco's pyATS framework, goes further by providing parsers for 1,000+ commands across IOS, IOS-XE, NX-OS, and IOS-XR. Genie parsers return deeply nested dictionaries that mirror the command's hierarchical structure, enabling precise data extraction without writing custom regex.
Nornir is a Python automation framework designed for network engineers who outgrow sequential scripts. Nornir executes tasks in parallel across hundreds of devices, aggregates results, and provides a plugin system for inventory management, logging, and error handling. Unlike Ansible, Nornir is pure Python, so you write tasks as Python functions with full access to conditionals, loops, and exception handling. A Nornir script defines an inventory (devices grouped by site or role), a task function (e.g., backup configurations), and a runner that executes the task concurrently. Nornir's F object provides advanced filtering (e.g., "all routers in site A with IOS version 15.x"), making it ideal for large-scale operations. At Cisco India's TAC, engineers use Nornir to collect diagnostic data from customer networks during P1 incidents, a use case we replicate in our 4-month paid internship at the Network Security Operations Division.
Real-World Python Automation Scenarios in Indian Enterprise Networks
Python automation solves tangible problems in Indian enterprise and service provider networks. One common scenario is bulk VLAN provisioning. A bank with 150 branches needs to add VLAN 200 for a new payment gateway across all branch switches. Manually SSHing into each switch, entering configuration mode, and typing vlan 200, name PAYMENT_GW takes 2-3 minutes per device, totaling 5-7 hours with inevitable typos. A Python script using Netmiko reads a CSV of switch IPs, loops through each device, sends the VLAN commands, and logs success or failure. The entire operation completes in 10 minutes. We tested this exact scenario in our HSR Layout lab with 30 Catalyst 3850 switches; the script handled authentication failures gracefully by retrying with a backup credential set, a resilience feature impossible in manual workflows.
Another scenario is compliance auditing. CERT-In guidelines require Indian financial institutions to disable Telnet, enable SSH version 2, and enforce password complexity on all network devices. A Python script using NAPALM's get_config() method retrieves the running configuration from each device, parses it with regex to check for transport input ssh, ip ssh version 2, and password policies, then generates a compliance report highlighting non-compliant devices. This audit, which would take a junior engineer 2 weeks to perform manually, runs in 30 minutes and produces a CSV ready for management review. Akamai India's network operations team uses a similar script to audit CDN edge routers for PCI-DSS compliance before quarterly audits.
API-driven workflows are critical in SD-WAN deployments. A logistics company using Cisco Viptela SD-WAN needs to onboard 50 new branch sites. Each site requires a device template with site-specific parameters (WAN IP, LAN subnets, OSPF area). Manually creating these templates in vManage's GUI is error-prone. A Python script calls vManage's REST API to POST a template payload with variables populated from a YAML file. The script also attaches the template to devices, pushes configurations, and monitors the deployment status via API polling. This end-to-end automation reduces onboarding time from 2 days to 2 hours. Aryaka's SD-WAN NOC uses Python to automate customer onboarding at scale, a workflow our students replicate during the 4-month paid internship where they work on live SD-WAN fabrics.
Incident response automation is another high-value use case. When a WAN link fails, a Python script triggered by a syslog event queries the router's API to collect interface statistics, BGP neighbor states, and recent log entries. It then opens a ServiceNow ticket with this diagnostic data pre-populated, assigns it to the on-call engineer, and sends a Slack notification. This reduces mean time to repair (MTTR) by 40% because the engineer starts troubleshooting with context instead of spending 15 minutes gathering data. HCL's managed services team uses Python-based incident automation for Tier-1 triage, a capability that differentiates their NOC from competitors still relying on manual runbooks.
Common Pitfalls and CCIE/CCNP Interview Gotchas for Python Network Automation
Network engineers learning Python make predictable mistakes that surface in interviews and production failures. The most common pitfall is hardcoding credentials in scripts. A script with username = 'admin' and password = 'Cisco123' in plaintext is a security disaster. CCIE interviewers ask, "How do you securely store credentials in a Python automation script?" The correct answer involves environment variables (os.getenv('DEVICE_PASSWORD')), encrypted vaults like HashiCorp Vault or Ansible Vault, or keyring libraries that integrate with OS credential managers. In our CCNA automation course in Bangalore, we teach students to use getpass.getpass() for interactive password prompts during development and environment variables for production scripts.
Another gotcha is ignoring SSH key verification. Netmiko and Paramiko default to strict host key checking, which fails if the device's SSH key is not in ~/.ssh/known_hosts. Beginners disable this with allow_auto_change=True or auto_add_policy=paramiko.AutoAddPolicy(), which opens the door to man-in-the-middle attacks. Interviewers probe this with, "What's the security risk of disabling host key verification?" The answer: an attacker can intercept the SSH session and capture credentials. The proper solution is to pre-populate known_hosts during device provisioning or use certificate-based SSH authentication, a practice enforced at Cisco India's production networks.
Exception handling is a third pitfall. A script that loops through 100 devices and crashes on the first authentication failure is useless. Robust scripts wrap SSH connections in try-except blocks, log errors to a file, and continue processing remaining devices. CCNP-level interviews ask, "How do you handle a device that's unreachable or returns unexpected output?" The answer involves catching NetmikoTimeoutException, NetmikoAuthenticationException, and generic Exception, logging the error with device hostname and timestamp, and appending the device to a retry list. In our HSR Layout lab, we simulate device failures by shutting down interfaces mid-script to teach students defensive coding.
Rate limiting and concurrency trip up engineers automating large networks. A script that opens 500 simultaneous SSH sessions to a Cisco Nexus 9000 will overwhelm its control plane, causing the switch to drop SSH sessions or even reload. Interviewers ask, "How do you safely automate 1,000 devices?" The answer involves threading or multiprocessing with a semaphore to limit concurrent connections (e.g., 10 at a time), adding random jitter between connection attempts, and implementing exponential backoff for retries. Nornir's num_workers parameter handles this elegantly, but understanding the underlying concurrency model is essential for troubleshooting.
API pagination and rate limits are often overlooked. Cisco Meraki's API returns a maximum of 1,000 devices per request; retrieving 5,000 devices requires pagination using the Link header. Scripts that ignore pagination silently miss data. Similarly, Meraki enforces a rate limit of 5 requests per second per organization. A script that sends 50 rapid API calls gets HTTP 429 errors. The solution involves parsing the Retry-After header and sleeping before retrying, or using a rate-limiting library like ratelimit. Cisco DevNet interviews specifically test API pagination and rate-limit handling because these are common production issues.
How Python Fits into CCNA, CCNP, and CCIE Certification Paths
Python automation is now embedded in Cisco's certification blueprint. The CCNA 200-301 exam includes a "Network Automation and Programmability" domain worth 10% of the score. Topics include interpreting JSON and YAML data, constructing HTTP-based API requests using Postman or Python, and comparing traditional campus device management with controller-based management (DNA Center, Meraki). CCNA candidates must understand REST API concepts (GET, POST, PUT, DELETE), JSON structure, and how Python's requests library interacts with APIs. While the exam does not require writing Python code, it tests the ability to read a Python script and predict its output—a skill we drill in our Python for Network Engineers fundamentals course.
The CCNP Enterprise 300-410 ENARSI exam deepens automation coverage. Candidates must troubleshoot network issues using Python scripts that parse CLI output, identify misconfigurations, and generate remediation commands. The exam presents scenarios like "A Python script using Netmiko retrieves show ip bgp summary from 10 routers. Which routers have BGP neighbors in an Idle state?" This requires understanding how TextFSM or regex extracts neighbor states from unstructured output. CCNP-level automation also includes EEM scripting on Cisco devices, which uses a Tcl-like syntax but shares conceptual overlap with Python's event-driven logic.
The CCIE Enterprise Infrastructure v1.1 lab exam (8-hour hands-on) includes automation tasks worth 10-15% of the score. Candidates might receive a task like "Write a Python script using NETCONF to configure OSPF on three routers based on parameters in a YAML file." The script must use the ncclient library to send NETCONF RPC calls, handle XML namespaces, and validate the configuration was applied. CCIE candidates are expected to write production-quality code with error handling, logging, and idempotency checks. Founder Vikas Swami, Dual CCIE #22239, architected QuickZTNA using Python-based orchestration for zero-trust policy enforcement, a real-world application of the automation skills tested in CCIE labs.
Cisco's DevNet certifications (DevNet Associate, DevNet Professional) are Python-centric. The DevNet Associate 200-901 exam tests Python fundamentals (data types, loops, functions), REST API interaction, Git version control, and CI/CD pipelines. The DevNet Professional exams dive into advanced topics like asynchronous programming with asyncio, gRPC and NETCONF for model-driven telemetry, and containerizing Python applications with Docker. For network engineers targeting roles at Cisco India, Akamai, or Aryaka, pairing a CCNP with a DevNet Associate certification creates a powerful skill stack that commands ₹8-14 LPA in Bangalore's job market.
Career Impact: Python Salary Premiums and Hiring Trends in India's Network Job Market
Python proficiency directly impacts network engineer salaries in India. A CCNA-certified fresher with no automation skills earns ₹3.5-5 LPA at Wipro, TCS, or Infosys NOCs. The same fresher with demonstrable Python automation skills (GitHub portfolio, internship projects) commands ₹6-9 LPA at Cisco India, HCL's advanced NOC, or Aryaka's SD-WAN operations team. Mid-level engineers (3-5 years experience) see even larger premiums: a traditional network engineer earns ₹8-12 LPA, while a network automation engineer with Python, Ansible, and Terraform skills earns ₹12-18 LPA at Akamai India, Barracuda Networks, or Movate's enterprise services division.
Hiring trends from our 800+ active hiring partners confirm this shift. In 2023-2024, 68% of network engineer job descriptions from Cisco India, Accenture, and IBM included "Python" or "automation" as required skills, up from 42% in 2021. Roles titled "Network Automation Engineer," "DevOps Network Engineer," and "NetDevOps Engineer" are growing 3x faster than traditional "Network Engineer" roles. These positions require Python scripting, API integration, and familiarity with CI/CD tools like Jenkins and GitLab. Our 45,000+ placements include 12,000+ network automation roles filled since 2020, with starting salaries averaging ₹7.2 LPA versus ₹4.8 LPA for non-automation roles.
The 4-month paid internship at Networkers Home's Network Security Operations Division exposes students to production Python workflows. Interns automate firewall rule audits using Python scripts that query Palo Alto and Fortinet APIs, parse rule bases, and flag overly permissive rules. They also build Slack bots that query network device status via Netmiko and respond to engineer queries in real time. These projects become portfolio pieces that differentiate candidates in interviews. One 2024 intern, placed at Cisco India's TAC, credited his Python-based SD-WAN troubleshooting script (built during the internship) as the deciding factor in his offer, which came in at ₹9.5 LPA—40% above the batch average for non-automation candidates.
Beyond salary, Python opens lateral career moves. Network engineers who master Python transition into DevOps, cloud networking (AWS VPC automation, Azure Virtual WAN), and security automation (SOAR platforms, threat intelligence APIs). These adjacent fields offer ₹15-25 LPA for senior roles, far exceeding traditional network engineering ceilings. The 8-month verified experience letter from Networkers Home, combined with a GitHub portfolio of Python automation projects, positions graduates for these high-growth tracks.
Frequently Asked Questions About Python for Network Engineers
Do I need to be a programmer to learn Python for network automation?
No. Network automation Python is a subset of general programming focused on SSH, APIs, and text parsing. You do not need to understand object-oriented design patterns, algorithms, or data structures beyond lists and dictionaries. Most network automation scripts are 50-200 lines of procedural code: connect to devices, send commands, parse output, log results. Our CCNA automation course starts with zero programming assumptions and teaches Python through networking-specific examples like configuring VLANs and parsing show commands. Within 6-8 weeks, students write functional automation scripts without prior coding experience.
Which Python version should I use—Python 2 or Python 3?
Python 3 exclusively. Python 2 reached end-of-life in January 2020 and no longer receives security updates. All modern libraries (Netmiko 4.x, NAPALM 4.x, Nornir 3.x) require Python 3.6 or later. Cisco's DevNet resources, official documentation, and exam blueprints reference Python 3. Some legacy enterprise scripts still use Python 2, but rewriting them to Python 3 is straightforward using the 2to3 tool. Install Python 3.9 or later (3.11 as of 2026) to ensure compatibility with the latest libraries and security patches.
Can Python automate wireless controllers and firewalls, or just routers and switches?
Python automates any device with SSH, an API, or SNMP. Wireless controllers like Cisco WLC, Aruba Mobility Master, and Ruckus SmartZone expose REST APIs for AP provisioning, WLAN configuration, and client troubleshooting. Firewalls like Palo Alto PAN-OS, Fortinet FortiGate, and Cisco ASA support both SSH (via Netmiko) and XML/REST APIs. Python scripts commonly automate firewall rule changes, security policy audits, and log analysis. In our HSR Layout lab, students automate Palo Alto firewalls using the pan-os-python library to add security rules, commit changes, and verify rule hit counts—tasks that mirror SOC workflows at Barracuda and Akamai India.
How long does it take to become proficient in Python for network automation?
Functional proficiency—writing scripts to automate device configuration, parse CLI output, and interact with APIs—takes 8-12 weeks of focused study with hands-on labs. This assumes 10-15 hours per week practicing on real devices or GNS3/EVE-NG topologies. Our 4-month CCNA automation course dedicates 40% of lab time to Python, resulting in students who can independently automate a 30-device network by graduation. Advanced proficiency—writing Nornir plugins, handling complex error scenarios, optimizing concurrency—takes 6-12 months of production experience. The key is daily practice: automate one repetitive task per week (backup configs, audit VLANs, generate reports) to build muscle memory.
What's the difference between Python automation and Cisco's DNA Center or Meraki Dashboard?
DNA Center and Meraki Dashboard are controller-based management platforms with GUIs and APIs. They abstract device-level CLI commands into high-level workflows (e.g., "provision a new site" or "apply a group policy"). Python automation is lower-level and more flexible. You use Python to interact with DNA Center's API to orchestrate tasks the GUI cannot handle (bulk operations, custom reporting, integration with external systems). Python also automates devices that lack controller support—legacy routers, third-party firewalls, or multi-vendor environments. In practice, Python and controllers complement each other: Python scripts call controller APIs to scale operations beyond GUI limits.
Will learning Python make my CCNA or CCNP knowledge obsolete?
No. Python automates the execution of networking concepts you learn in CCNA/CCNP—VLANs, OSPF, BGP, QoS, VPNs. You cannot write a meaningful automation script without understanding what commands to send and why. A script that configures OSPF still requires you to know OSPF areas, network types, and authentication. Python is a force multiplier for your networking knowledge, not a replacement. Employers value engineers who combine deep protocol knowledge (CCNP-level) with automation skills (Python, Ansible). This hybrid profile is what Cisco India, Aryaka, and Akamai prioritize in hiring, reflected in the ₹8-14 LPA salary range for CCNP + Python candidates versus ₹6-9 LPA for CCNP-only candidates.
Can I automate Juniper, Arista, or HP devices with Python, or is it Cisco-only?
Python is vendor-agnostic. Netmiko supports 50+ device types including Juniper Junos, Arista EOS, HP Comware, Dell OS10, Palo Alto PAN-OS, F5 BIG-IP, and Checkpoint Gaia. NAPALM provides a unified API for Cisco, Juniper, Arista, and Nokia. The syntax differs slightly (Juniper uses set commands, Arista uses a Linux-like CLI), but the Python logic remains the same: connect, send commands, parse output. Multi-vendor environments benefit most from Python because a single script can automate Cisco routers, Juniper switches, and Arista spines by specifying the device type in the connection parameters. Our HSR Layout lab includes Juniper vSRX and Arista vEOS instances specifically to teach multi-vendor automation, a skill critical for service providers and large enterprises.