You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/instructor-guide.md
+41-17Lines changed: 41 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,7 @@
3
3
**Audience:** Networking students with basic CLI experience and beginner-level Python
4
4
**Suggested duration:**~90 minutes
5
5
**Format:** Lecture + live demo + hands-on lab
6
-
**Prerequisites:** Python 3.9+ installed; access to an EOS switch or vEOS / Arista cEOS lab
6
+
**Prerequisites:** Python 3.9+, Docker, containerlab, and a cEOS-lab image imported as `ceosarm:<tag>`. Verify all of this on student machines *before* class — see `instructor-notes.md`.
7
7
8
8
---
9
9
@@ -14,7 +14,7 @@ After working through this guide, the student will be able to:
14
14
| # | Objective | Bloom level |
15
15
|---|-----------|-------------|
16
16
| 1 | Define API, REST, JSON-RPC, and explain how they differ | Understand |
17
-
| 2 |Enable and verify eAPI on an EOS switch| Apply |
17
+
| 2 |Read a switch startup config to identify what enables eAPI, and verify the lab device is reachable| Apply |
18
18
| 3 | Construct a JSON-RPC request payload for `runCmds`| Apply |
19
19
| 4 | Use the `requests` library to send authenticated HTTPS calls | Apply |
20
20
| 5 | Parse JSON responses and render them as readable tables | Analyze |
@@ -24,10 +24,10 @@ After working through this guide, the student will be able to:
24
24
25
25
## Materials needed
26
26
27
-
-Lab pod with at least one EOS / vEOS / cEOS switch reachable over the network
28
-
- Switch credentials with `privilege 15` (lab user, **not** production)
29
-
- Student workstation with Python 3.9+ and `pip`
30
-
- This repository, cloned locally
27
+
-Student workstations with Docker, containerlab, Python 3.9+, and the
28
+
cEOS-lab image already imported. Pre-class setup is non-trivial — see
29
+
the pre-class checklist in `instructor-notes.md`.
30
+
- This repository, cloned locally on each student's machine.
|`containerlab: command not found`| clab not installed | Reinstall per [containerlab.dev/install](https://containerlab.dev/install/)|
78
+
|`Error: image ceos:X.Y.Z not found`| cEOS image not imported |`docker import cEOSarm-lab-X.Y.Z.tar ceosarm:X.Y.Z`, or set `CEOS_IMAGE` to a tag that *is* present |
79
+
|`bind: address already in use` (port 8443 or 2222) | Another process holds the port | Stop the conflicting process, or edit `topo/topology.clab.yml` to publish a different host port and update `.env` to match |
80
+
| Lab deploys but `containerlab inspect` shows status `unhealthy`| cEOS startup not yet complete | Wait 30–60 seconds; cEOS is slow to boot. If still unhealthy, `docker logs clab-arista-eapi-python-eos1`|
81
+
|`ConnectionRefusedError` from the Python script | Lab not deployed, or wrong port in `.env`|`containerlab inspect -t topo/topology.clab.yml`; confirm `EAPI_PORT=8443`|
82
+
|`SSL: CERTIFICATE_VERIFY_FAILED`| cEOS self-signed cert + `verify=True`|`verify=False` in lab; document why this is unacceptable in production |
83
+
|`401 Unauthorized`| Wrong username/password in `.env`| Defaults are `admin / admin` — match the startup config |
67
84
|`KeyError: 'result'`| eAPI returned an error block | Check for `'error'` key first; print `error.message`|
68
-
|Empty interface list | User lacks privilege 15 | Re-create user with `privilege 15` or `role network-admin`|
85
+
|Student on macOS reports lab "looks deployed but I can't reach it" | Trying to use container IP instead of `localhost:8443`| Use `localhost:8443` — the topology publishes ports for cross-platform reach|
69
86
70
87
## Time-box guidance
71
88
@@ -77,8 +94,8 @@ grading guidance:
77
94
78
95
## Natural follow-on topics
79
96
80
-
These build directly on what students learn here. They sit naturally in the
81
-
NetOpsand GitOps tracks rather than Foundations:
97
+
These build directly on what students learn here. The first few belong in
98
+
NetOps; the deeper automation and AIOps items push into GitOps and AIOps:
82
99
83
100
- Configuration changes via eAPI (privileged `runCmds`, change control)
84
101
- Concurrency — hitting many switches in parallel with `concurrent.futures`
0 commit comments