Create the pyATS Easypy job file that will serve as the test orchestration script, coordinating the execution of all test cases and managing test parameters.
touch ~/workspace/ndlab/nac/tests/pyats_easypy.py
code-server -r ~/workspace/ndlab/nac/tests/pyats_easypy.py
Implement the Easypy job file with argument parsing to accept the data model directory and a main function that executes the pyats_aetest.py script with the required parameters.
import os
import argparse
from pyats.easypy import run
# script path from this location
SCRIPT_PATH = os.path.dirname(__file__)
def main():
'''job file entrypoint'''
parser = argparse.ArgumentParser()
parser.add_argument('--data_model_dir', type=str, default=None)
args, _ = parser.parse_known_args()
# run script
run(testscript=os.path.join(SCRIPT_PATH, 'pyats_aetest.py'), data_model_dir=args.data_model_dir)
Execute the complete test suite using the pyats run job command, passing the testbed file, data model directory, and output archive settings to run all configured AEtest test cases.
pyats run job pyats_easypy.py --testbed-file testbed.yml --data_model_dir ../host_vars/msd-fabric-group/ --archive-dir=${PWD}/results --no-archive-subdir --no-mail
2026-02-07T15:08:49: %EASYPY-INFO: +------------------------------------------------------------------------------+ 2026-02-07T15:08:49: %EASYPY-INFO: | Easypy Report | 2026-02-07T15:08:49: %EASYPY-INFO: +------------------------------------------------------------------------------+ 2026-02-07T15:08:49: %EASYPY-INFO: pyATS Instance : /home/pod30/.pyenv/versions/3.11.14/envs/ndlab 2026-02-07T15:08:49: %EASYPY-INFO: Python Version : cpython-3.11.14 (64bit) 2026-02-07T15:08:49: %EASYPY-INFO: CLI Arguments : /home/pod30/.pyenv/versions/ndlab/bin/pyats run job pyats_easypy.py --testbed-file testbed.yml --data_model_dir ../host_vars/msd-fabric-group/ --archive-dir=/home/pod30/workspace/ndlab/nac/tests/results --no-archive-subdir --no-mail 2026-02-07T15:08:49: %EASYPY-INFO: User : pod30 2026-02-07T15:08:49: %EASYPY-INFO: Host Server : ubuntu-code-server-template 2026-02-07T15:08:49: %EASYPY-INFO: Host OS Version : Ubuntu 22.04 jammy (x86_64) 2026-02-07T15:08:49: %EASYPY-INFO: 2026-02-07T15:08:49: %EASYPY-INFO: Job Information 2026-02-07T15:08:49: %EASYPY-INFO: Name : pyats_easypy 2026-02-07T15:08:49: %EASYPY-INFO: Result : PASSED 2026-02-07T15:08:49: %EASYPY-INFO: Start time : 2026-02-07 15:08:26.036801+00:00 2026-02-07T15:08:49: %EASYPY-INFO: Stop time : 2026-02-07 15:08:48.561145+00:00 2026-02-07T15:08:49: %EASYPY-INFO: Elapsed time : 0:00:23 2026-02-07T15:08:49: %EASYPY-INFO: Archive : /home/pod30/workspace/ndlab/nac/tests/results/pyats_easypy_2026Feb07_15_08_15_531738.zip 2026-02-07T15:08:49: %EASYPY-INFO: 2026-02-07T15:08:49: %EASYPY-INFO: Total Tasks : 1 2026-02-07T15:08:49: %EASYPY-INFO: 2026-02-07T15:08:49: %EASYPY-INFO: Overall Stats 2026-02-07T15:08:49: %EASYPY-INFO: Passed : 4 2026-02-07T15:08:49: %EASYPY-INFO: Passx : 0 2026-02-07T15:08:49: %EASYPY-INFO: Failed : 0 2026-02-07T15:08:49: %EASYPY-INFO: Aborted : 0 2026-02-07T15:08:49: %EASYPY-INFO: Blocked : 0 2026-02-07T15:08:49: %EASYPY-INFO: Skipped : 0 2026-02-07T15:08:49: %EASYPY-INFO: Errored : 0 2026-02-07T15:08:49: %EASYPY-INFO: 2026-02-07T15:08:49: %EASYPY-INFO: TOTAL : 4 2026-02-07T15:08:49: %EASYPY-INFO: 2026-02-07T15:08:49: %EASYPY-INFO: Success Rate : 100.00 % 2026-02-07T15:08:49: %EASYPY-INFO: 2026-02-07T15:08:49: %EASYPY-INFO: Section Stats 2026-02-07T15:08:49: %EASYPY-INFO: Passed : 9 2026-02-07T15:08:49: %EASYPY-INFO: Passx : 0 2026-02-07T15:08:49: %EASYPY-INFO: Failed : 0 2026-02-07T15:08:49: %EASYPY-INFO: Aborted : 0 2026-02-07T15:08:49: %EASYPY-INFO: Blocked : 0 2026-02-07T15:08:49: %EASYPY-INFO: Skipped : 0 2026-02-07T15:08:49: %EASYPY-INFO: Errored : 0 2026-02-07T15:08:49: %EASYPY-INFO: 2026-02-07T15:08:49: %EASYPY-INFO: TOTAL : 9 2026-02-07T15:08:49: %EASYPY-INFO: 2026-02-07T15:08:49: %EASYPY-INFO: Section Success Rate : 100.00 % 2026-02-07T15:08:49: %EASYPY-INFO: 2026-02-07T15:08:49: %EASYPY-INFO: +------------------------------------------------------------------------------+ 2026-02-07T15:08:49: %EASYPY-INFO: | Task Result Summary | 2026-02-07T15:08:49: %EASYPY-INFO: +------------------------------------------------------------------------------+ 2026-02-07T15:08:49: %EASYPY-INFO: Task-1: pyats_aetest PASSED 2026-02-07T15:08:49: %EASYPY-INFO: Task-1: pyats_aetest.common_setup PASSED 2026-02-07T15:08:49: %EASYPY-INFO: Task-1: pyats_aetest.VerifyBgwBgpL2vpnEvpnNeighbors PASSED 2026-02-07T15:08:49: %EASYPY-INFO: Task-1: pyats_aetest.VerifyNveVnis PASSED 2026-02-07T15:08:49: %EASYPY-INFO: Task-1: pyats_aetest.common_cleanup PASSED 2026-02-07T15:08:49: %EASYPY-INFO: 2026-02-07T15:08:49: %EASYPY-INFO: +------------------------------------------------------------------------------+ 2026-02-07T15:08:49: %EASYPY-INFO: | Task Result Details | 2026-02-07T15:08:49: %EASYPY-INFO: +------------------------------------------------------------------------------+ 2026-02-07T15:08:49: %EASYPY-INFO: Task-1: pyats_aetest PASSED 2026-02-07T15:08:49: %EASYPY-INFO: |-- common_setup PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | |-- load_data_model_files PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | |-- connect PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | |-- check_connection PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | | `-- STEP 1: Test connection status for Device msd-fabric-group PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | `-- get_nd_inventory PASSED 2026-02-07T15:08:49: %EASYPY-INFO: |-- VerifyBgwBgpL2vpnEvpnNeighbors PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | |-- setup PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | `-- test PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | |-- STEP 1: Verify BGP EVPN neighbors for BGW site1-bgw1 PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | `-- STEP 2: Verify BGP EVPN neighbors for BGW site2-bgw-s1 PASSED 2026-02-07T15:08:49: %EASYPY-INFO: |-- VerifyNveVnis PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | |-- setup PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | `-- test PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | |-- STEP 1: Verify NVE VNIs for site1-bgw1 PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | |-- STEP 2: Verify NVE VNIs for site1-bl1 PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | |-- STEP 3: Verify NVE VNIs for site1-l1 PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | |-- STEP 4: Verify NVE VNIs for site1-l2 PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | |-- STEP 5: Verify NVE VNIs for site2-bgw-s1 PASSED 2026-02-07T15:08:49: %EASYPY-INFO: | `-- STEP 6: Verify NVE VNIs for site2-l1 PASSED 2026-02-07T15:08:49: %EASYPY-INFO: `-- common_cleanup PASSED 2026-02-07T15:08:49: %EASYPY-INFO: `-- disconnect PASSED 2026-02-07T15:08:49: %EASYPY-INFO: Done!
Clean up the VSCode workspace by closing all open editor tabs to prepare for the next section of the lab.
Continue to the next section to pull everything together, NaC and pyATS, to set up a NetDevOps pipeline and onboard a new overlay.