- ✅ VLAN creation
- ❌ VLAN deletion
- 🔧 Switch port config
- 👀 Port monitoring (get port status like usage, errors)
🧰 Full Python Script – Meraki Switch Automation
import requests
# Config
API_KEY = "YOUR_MERAKI_API_KEY"
ORG_ID = "YOUR_ORG_ID"
NETWORK_ID = "YOUR_TEMPLATE_BOUND_NETWORK_ID"
DEVICE_SERIAL = "YOUR_SWITCH_SERIAL" # Example: Q2XX-XXXX-XXXX
BASE_URL = "https://api.meraki.com/api/v1"
HEADERS = {
"X-Cisco-Meraki-API-Key": API_KEY,
"Content-Type": "application/json"
}
# --- VLAN FUNCTIONS ---
# ✅ Create VLAN
def create_vlan(vlan_id, name, subnet, appliance_ip):
url = f"{BASE_URL}/networks/{NETWORK_ID}/vlans"
payload = {
"id": vlan_id,
"name": name,
"subnet": subnet,
"applianceIp": appliance_ip
}
response = requests.post(url, headers=HEADERS, json=payload)
print(f"[CREATE VLAN {vlan_id}] Status: {response.status_code} - {response.text}")
# ❌ Delete VLAN
def delete_vlan(vlan_id):
url = f"{BASE_URL}/networks/{NETWORK_ID}/vlans/{vlan_id}"
response = requests.delete(url, headers=HEADERS)
print(f"[DELETE VLAN {vlan_id}] Status: {response.status_code} - {response.text}")
# --- PORT FUNCTIONS ---
# 🔧 Configure Switch Port
def configure_switch_port(port_number, port_name="Trunk Port", allowed_vlans="1,10,20"):
url = f"{BASE_URL}/devices/{DEVICE_SERIAL}/switch/ports/{port_number}"
payload = {
"name": port_name,
"type": "trunk",
"vlan": 1,
"allowedVlans": allowed_vlans,
"poeEnabled": True,
"rstpEnabled": True,
"stpGuard": "disabled"
}
response = requests.put(url, headers=HEADERS, json=payload)
print(f"[CONFIGURE PORT {port_number}] Status: {response.status_code} - {response.text}")
# 👀 Get Port Status
def get_port_status():
url = f"{BASE_URL}/devices/{DEVICE_SERIAL}/switch/ports"
response = requests.get(url, headers=HEADERS)
if response.status_code == 200:
ports = response.json()
for port in ports:
print(f"Port {port['portId']}: {port.get('enabled', 'N/A')} | "
f"Type: {port.get('type')} | VLAN: {port.get('vlan')} | "
f"Usage: {port.get('usageInKb', 'N/A')} Kbps")
else:
print(f"[GET PORT STATUS] Error: {response.status_code} - {response.text}")
# --- EXECUTION ---
# VLAN Management
create_vlan(10, "Staff", "192.168.10.0/24", "192.168.10.1")
create_vlan(20, "IoT", "192.168.20.0/24", "192.168.20.1")
# delete_vlan(20) # Uncomment to delete VLAN 20
# Port Configurations
configure_switch_port(1)
configure_switch_port(2, port_name="Uplink to Router")
# Port Monitoring
get_port_status()
✅ Output Example:
[CREATE VLAN 10] Status: 201 - {"id":"10",...}
[CONFIGURE PORT 1] Status: 200 - { ... }
Port 1: True | Type: trunk | VLAN: 1 | Usage: 120 Kbps
🛡️ Recommendations:
- Use environment variables or config files for sensitive info (API keys).
- Add retry logic or logging for production scripts.
- Use the Meraki Python SDK (
meraki package) if you prefer an abstracted interface.
Leave a comment