Enhanced Python script for Meraki Switch with VLAN deletion or port monitoring


🧰 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:

renjithbs Avatar

Posted by

Leave a comment