#!/usr/bin/env python3 """Add the missing WAN links - connect stores to HQ""" 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") return {n['name']: n for n in resp.json()} 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}") return False project_id = get_project_id(PROJECT_NAME) nodes = get_nodes(project_id) print("šŸ”— Adding WAN links (HQ ↔ Stores)...\n") # Instead of using cloud, connect HQ directly to stores (simulates WAN) hq = nodes.get('SW-HQ-Core') west = nodes.get('SW-West') east = nodes.get('SW-East') # HQ → Store-West (WAN link) if hq and west: create_link(project_id, hq['node_id'], 14, 0, west['node_id'], 14, 0, "HQ-Core e14 ↔ SW-West e14 (WAN: HQ-to-Downtown)") # HQ → Store-East (WAN link) if hq and east: create_link(project_id, hq['node_id'], 13, 0, east['node_id'], 14, 0, "HQ-Core e13 ↔ SW-East e14 (WAN: HQ-to-Suburb)") print("\nāœ… WAN topology complete!") print(" All stores now connected to HQ for:") print(" • Real-time sales data sync") print(" • Inventory management") print(" • Remote monitoring")