A minimalist, infrastructure-as-code solution for Day 1 Provisioning. This project provides a Dockerized ZTP (Zero Touch Provisioning) server that automatically detects and configures multi-vendor network devices in a GNS3
Most ZTP solutions are bloated with APIs and complex inventory generators. This project strips away the noise to focus on the Pure Infrastructure Chain Reaction:
- Identify: Detect vendor types via DHCP Option 60 (VCI).
- Assign: Provide a unique IP address from a controlled pool.
- Deliver: Serve the correct configuration file via TFTP
| Service | Protocol | Role | Vendor Usage |
|---|---|---|---|
| Kea DHCP | UDP/67 |
The "Brain." Matches Vendor Classes and assigns boot instructions. | All |
| TFTP-HPA | UDP/69 |
The "Truck." Transfers standard configuration files. | Cisco, Juniper |
.
├── Dockerfile # Minimal Ubuntu-based ZTP image
├── kea-dhcp4.conf # Smart DHCP logic (Option 60/67/150)
├── startup.sh # Silent provisioner entrypoint
└── startup-configs/ # The "Day 0" Source of Truth
├── cisco.cfg # Basic IOS-XE config (SSH, User, IP)
├── juniper.conf # Basic Junos config (NETCONF, SSH)
└── arista_eos.conf # Arista Python ZTP script
docker build -t ztp-server .Ensure your GNS3 nodes are connected to a bridge (e.g., br0) that the Docker container can reach.
docker run -d --name ztp-server --net=host ztp-serverWatch the "Concierge" hand out keys in real-time:
docker logs -f ztp-serverSince there is no complex API, debugging is done by watching the standard protocol logs:
- DHCP Leases:
tail -f /var/lib/kea/kea-leases4.csv - TFTP Requests: Check container logs for
in.tftpdactivity. - Nginx Access: Check
/var/log/nginx/access.logto see Arista fetching its script.