#!/usr/bin/env python3 """Add the final 2 missing links""" import requests import os GNS3_SERVER = os.getenv("GNS3_SERVER", "http://localhost:3080") GNS3_API = f"{GNS3_SERVER}/v2" PROJECT_NAME = os.getenv("GNS3_PROJECT_NAME", "overgrowth") def get_project_id(name): resp = requests.get(f"{GNS3_API}/projects") projects = resp.json() project = next((p for p in projects if p['name'] == name), None) return project['project_id'] if project else None def get_nodes(project_id): resp = requests.get(f"{GNS3_API}/projects/{project_id}/nodes") all_nodes = resp.json() return {n['name']: n for n in all_nodes} def create_link(project_id, node1_id, adapter1, port1, node2_id, adapter2, port2, desc=""): data = { "nodes": [ {"node_id": node1_id, "adapter_number": adapter1, "port_number": port1}, {"node_id": node2_id, "adapter_number": adapter2, "port_number": port2} ] } resp = requests.post(f"{GNS3_API}/projects/{project_id}/links", json=data) if resp.status_code in [200, 201]: print(f" ✓ {desc}") return True else: print(f" ✗ {desc} - {resp.status_code}: {resp.text[:150]}") return False project_id = get_project_id(PROJECT_NAME) nodes = get_nodes(project_id) print("Adding final 2 links...\n") # PC2 -> SW1 (find available port on SW1) pc2 = nodes.get('PC2-Sales') sw1 = nodes.get('SW1-Access2') if pc2 and sw1: # Try different ports on SW1 (0 and 2 are used, try 1, 3, 4, 5...) for port_num in [1, 3, 4, 5, 6, 7]: if create_link(project_id, pc2['node_id'], 0, 0, sw1['node_id'], port_num, 0, f"PC2-Sales → SW1 e{port_num}"): break # PC3 -> SW2 (find available port on SW2) pc3 = nodes.get('PC3-Engineering') sw2 = nodes.get('SW2-Core2') if pc3 and sw2: # Try different ports on SW2 (1, 2, 3, 4 are used, try 0, 5, 6, 7...) for port_num in [0, 5, 6, 7, 8, 9]: if create_link(project_id, pc3['node_id'], 0, 0, sw2['node_id'], port_num, 0, f"PC3-Engineering → SW2 e{port_num}"): break print("\n✅ Done! Run verify_ccna_status.py to confirm.")