Having an issue with trying to update the stickyMacAllowList value. Doesn't matter if I leave it blank to try and remove the current mac address or if I add a valid mac (xx:xx:xx:xx:xx:xx) I keep getting the following error:
400 Bad Request, {'errors': ["'stickyMacAllowList' must be an array"]}
Below is my full code. Thanks in advance.
import meraki
import os
import time
import pprint
from colorama import init as colorama_init
from colorama import Fore, Back
from colorama import Style
import inquirer
from inquirer.themes import GreenPassion
import progressbar
def get_meraki_api_key():
api_key = os.getenv('MERAKI_API_KEY')
if not api_key:
raise ValueError("No API key found. Please set the MERAKI_API_KEY enviroment variable.")
return api_key
# Select Device
sw_sn = 'my sn'
port = input ('\n' + 'What port would you like to update? (1,2...48): ')
print (Fore.BLUE,Style.BRIGHT +'\n' + 'Below is the current information for that port: ' + '\n')
API_KEY = get_meraki_api_key()
dashboard = meraki.DashboardAPI(API_KEY, suppress_logging=True)
serial = (sw_sn)
port_id = (port)
response = dashboard.switch.getDeviceSwitchPort(serial, port_id)
fields = ['portId', 'name', 'enabled', 'poeEnabled', 'type', 'vlan', 'voiceVlan', 'allowedVlans', 'accessPolicyType','isolationEnabled', 'rstpEnabled', 'stpGuard', 'linkNegotiation']
for field in fields:
print (f"{field}: {response[field]}")
# Update settings
def update_values():
print (Fore.YELLOW,Style.BRIGHT +'\n' + 'Please enter the updated values, which are Case-Sensitive: ' + '\n')
v_allowed = ""
mac_allowed = ""
sticky_mac_allowed = ""
mac_allowed_limit = ""
v_vlan = ""
port_name = input ('\n' + 'Port Name: ')
enable = input ('Enable Port [True or False]: ')
port_type = input ('Port Type [trunk or access]: ')
d_vlan = input ('Data VLAN: ')
if port_type == ('access'):
v_vlan = input ('Voice VLAN: ')
if port_type == ('trunk'):
v_allowed = input ('Allowed VLANs [1,3 or 1-3 or All]: ')
rstp_enabled = input ('RSTP Enable [True or False]: ')
stp_guard = input ('STP Guard [disabled, root guard, bpdu guard, loop guard]: ')
if port_type == ('access'):
access_policy = input ('Access Policy [MAC allow list, Open, Sticky MAC allow list]: ')
if access_policy == ('MAC allow list'):
mac_allowed = input ('MAC Address [xx:xx:xx:xx:xx:xx, xx:xx:xx:xx:xx:xx): ')
if access_policy == ('Sticky MAC allow list'):
sticky_mac_allowed = input ('MAC Address [xx:xx:xx:xx:xx:xx, xx:xx:xx:xx:xx:xx]: ')
#mac_allowed_limit = input ('How many MAC Address Allowed: ') Commented until above fixed
poe_enabled = input ('PoE Enabled [True or False]: ')
response_update = {}
if port_name:
response_update["name"] = port_name
if enable:
response_update["enabled"] = enable
if port_type:
response_update["type"] = port_type
if d_vlan != '':
response_update["vlan"] = d_vlan
if v_vlan != '':
response_update["voiceVlan"] = v_vlan
if v_allowed == '0':
response_update["allowedVlans"] = v_allowed
if rstp_enabled:
response_update["rstpEnabled"] = rstp_enabled
if stp_guard:
response_update["stpGuard"] = stp_guard
if access_policy:
response_update["accessPolicyType"] = access_policy
if mac_allowed:
response_update["macAllowList"] = mac_allowed
if sticky_mac_allowed:
response_update["stickyMacAllowList"] = sticky_mac_allowed
if mac_allowed_limit != '':
response_update["stickyMacAllowListLimit"]
if poe_enabled:
response_update["poeEnabled"] = poe_enabled
fields = response_update
print (Fore.WHITE,Style.BRIGHT + '\n' + 'Here are the values you entered')
for field in fields:
print (f"{field}: {response_update[field]}")
validate = input ('\n' + 'Are all values correct [Y or N]: ')
if validate in {'Y', 'y'}:
response = dashboard.switch.updateDeviceSwitchPort(serial, port_id,**response_update,)
response = dashboard.switch.getDeviceSwitchPort(serial, port_id)
fields = response_update
print (Fore.GREEN,Style.BRIGHT + '\n' + 'Here are the New Settings: ' + '\n')
for field in fields:
print (f"{field}: {response_update[field]}")
input ('\n' + 'Press Enter to return to Main Menu: ')
main_menu()
elif validate in {'N', 'n'}:
input (Fore.MAGENTA + Style.BRIGHT + '\n' + 'Darn, Ok lets try this again, press Enter: ')
#clearconsole()
print (Fore.BLUE,Style.BRIGHT +'\n' + 'Current Values:' + '\n')
response = dashboard.switch.getDeviceSwitchPort(serial, port_id)
fields = ['portId', 'name', 'enabled', 'poeEnabled', 'type', 'vlan', 'voiceVlan', 'allowedVlans', 'isolationEnabled', 'rstpEnabled', 'stpGuard', 'linkNegotiation']
for field in fields:
print (f"{field}: {response[field]}")
update_values()
else:
print ('you need to select Y,y,N or n')
update_values()