- โ
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.