From 3e2391e7f8de564395dcfe4d20f9568964239d47 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 23 Sep 2026 14:21:02 +0000 Subject: [PATCH] Auto-generated library v4.5.0b3 for API v1.74.0-beta.3. --- docs/generation-report.md | 6 ++ meraki/__init__.py | 2 +- meraki/_version.py | 2 +- meraki/aio/api/appliance.py | 6 +- meraki/aio/api/networks.py | 8 +- meraki/aio/api/organizations.py | 10 +- meraki/aio/api/switch.py | 16 +++ meraki/aio/api/wireless.py | 170 ++++++++++++++++++++++++++++++ meraki/api/appliance.py | 6 +- meraki/api/batch/appliance.py | 2 +- meraki/api/batch/networks.py | 4 +- meraki/api/batch/organizations.py | 8 +- meraki/api/batch/switch.py | 16 +++ meraki/api/batch/wireless.py | 52 +++++++++ meraki/api/networks.py | 8 +- meraki/api/organizations.py | 10 +- meraki/api/switch.py | 16 +++ meraki/api/wireless.py | 170 ++++++++++++++++++++++++++++++ pyproject.toml | 2 +- uv.lock | 2 +- 20 files changed, 483 insertions(+), 33 deletions(-) diff --git a/docs/generation-report.md b/docs/generation-report.md index 79af6d5..04a4ebd 100644 --- a/docs/generation-report.md +++ b/docs/generation-report.md @@ -1,5 +1,11 @@ # Generation Report +## 2026-09-23 | Library v4.5.0b3 | API 1.74.0-beta.3 + + +No Python keyword parameter conflicts detected. + + ## 2026-09-16 | Library v4.5.0b2 | API 1.74.0-beta.2 diff --git a/meraki/__init__.py b/meraki/__init__.py index ce757f6..64bd41d 100644 --- a/meraki/__init__.py +++ b/meraki/__init__.py @@ -52,7 +52,7 @@ from meraki.exceptions import APIError, APIKeyError, APIResponseError, AsyncAPIError from meraki.rest_session import RestSession -__api_version__ = "1.74.0-beta.2" +__api_version__ = "1.74.0-beta.3" __all__ = [ "APIError", diff --git a/meraki/_version.py b/meraki/_version.py index 6e49aee..a161ce3 100644 --- a/meraki/_version.py +++ b/meraki/_version.py @@ -1 +1 @@ -__version__ = "4.5.0b2" +__version__ = "4.5.0b3" diff --git a/meraki/aio/api/appliance.py b/meraki/aio/api/appliance.py index 8b0b97c..9281d2a 100644 --- a/meraki/aio/api/appliance.py +++ b/meraki/aio/api/appliance.py @@ -2442,7 +2442,7 @@ def deleteNetworkApplianceTrafficShapingCustomPerformanceClass(self, networkId: def updateNetworkApplianceTrafficShapingRules(self, networkId: str, **kwargs): """ - **Update the traffic shaping settings rules for an MX network** + **Update the traffic shaping settings rules for a Security Appliance or Secure Router network** https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-traffic-shaping-rules - networkId (string): Network ID @@ -2480,7 +2480,7 @@ def updateNetworkApplianceTrafficShapingRules(self, networkId: str, **kwargs): def getNetworkApplianceTrafficShapingRules(self, networkId: str): """ - **Display the traffic shaping settings rules for an MX network** + **Display the traffic shaping settings rules for a Security Appliance or Secure Router network** https://developer.cisco.com/meraki/api-v1/#!get-network-appliance-traffic-shaping-rules - networkId (string): Network ID @@ -5704,7 +5704,7 @@ def getOrganizationApplianceUmbrellaPoliciesByNetwork( def getOrganizationApplianceUplinkStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the uplink status of every Meraki MX appliance, Z series appliance, and Secure Router in the organization** + **List the uplink status of every Meraki MX and Z series appliances in the organization** https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-uplink-statuses - organizationId (string): Organization ID diff --git a/meraki/aio/api/networks.py b/meraki/aio/api/networks.py index 2fcb5e8..7089a9a 100644 --- a/meraki/aio/api/networks.py +++ b/meraki/aio/api/networks.py @@ -3326,7 +3326,7 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v - vlanNames (array): An array of named VLANs - vlanGroups (array): An array of VLAN groups - iname (string): IName of the profile - - allowedVlans (string): The VLANs allowed on the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. + - activeVlans (string): The active VLANs for the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. """ kwargs.update(locals()) @@ -3340,7 +3340,7 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v body_params = [ "name", - "allowedVlans", + "activeVlans", "vlanNames", "vlanGroups", "iname", @@ -3476,7 +3476,7 @@ def updateNetworkVlanProfile(self, networkId: str, iname: str, name: str, vlanNa - name (string): Name of the profile, string length must be from 1 to 255 characters - vlanNames (array): An array of named VLANs - vlanGroups (array): An array of VLAN groups - - allowedVlans (string): The VLANs allowed on the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. + - activeVlans (string): The active VLANs for the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. """ kwargs.update(locals()) @@ -3491,7 +3491,7 @@ def updateNetworkVlanProfile(self, networkId: str, iname: str, name: str, vlanNa body_params = [ "name", - "allowedVlans", + "activeVlans", "vlanNames", "vlanGroups", ] diff --git a/meraki/aio/api/organizations.py b/meraki/aio/api/organizations.py index 0a99631..df3b2bc 100644 --- a/meraki/aio/api/organizations.py +++ b/meraki/aio/api/organizations.py @@ -4523,7 +4523,7 @@ def importOrganizationCertificates(self, organizationId: str, managedBy: str, co https://developer.cisco.com/meraki/api-v1/#!import-organization-certificates - organizationId (string): Organization ID - - managedBy (string): Certificate managed by type [system_manager, mr, mx, encrypted_syslog, grpc_dial_out] + - managedBy (string): Certificate managed by type [system_manager, mr, encrypted_syslog, grpc_dial_out] - contents (string): Certificate content in valid PEM format - description (string): Certificate description """ @@ -4531,7 +4531,7 @@ def importOrganizationCertificates(self, organizationId: str, managedBy: str, co kwargs = locals() if "managedBy" in kwargs: - options = ["encrypted_syslog", "grpc_dial_out", "mr", "mx", "system_manager"] + options = ["encrypted_syslog", "grpc_dial_out", "mr", "system_manager"] assert kwargs["managedBy"] in options, ( f'''"managedBy" cannot be "{kwargs["managedBy"]}", & must be set to one of: {options}''' ) @@ -11894,6 +11894,7 @@ def getOrganizationNetworksGroups(self, organizationId: str, total_pages=1, dire - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages - direction (string): direction to paginate, either "next" (default) or "prev" page - groupIds (array): Optional parameter to filter network groups by ID + - search (string): Optional parameter to filter network groups by a case-insensitive partial group name match - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 100. - startingAfter (string): A token used by the server to indicate the start of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. - endingBefore (string): A token used by the server to indicate the end of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. @@ -11910,6 +11911,7 @@ def getOrganizationNetworksGroups(self, organizationId: str, total_pages=1, dire query_params = [ "groupIds", + "search", "perPage", "startingAfter", "endingBefore", @@ -14486,7 +14488,7 @@ def updateOrganizationSnmp(self, organizationId: str, **kwargs): - organizationId (string): Organization ID - v2cEnabled (boolean): Boolean indicating whether SNMP version 2c is enabled for the organization. - v3Enabled (boolean): Boolean indicating whether SNMP version 3 is enabled for the organization. - - v3AuthMode (string): The SNMP version 3 authentication mode. Can be either 'MD5' or 'SHA'. + - v3AuthMode (string): The SNMP version 3 authentication mode. Can be one of 'SHA', 'MD5', 'SHA256', 'SHA384', or 'SHA512'. MD5 is not supported in the Cisco Meraki US Government Region. - v3AuthPass (string): The SNMP version 3 authentication password. Must be at least 8 characters if specified. - v3PrivMode (string): The SNMP version 3 privacy mode. Can be either 'DES' or 'AES128'. - v3PrivPass (string): The SNMP version 3 privacy password. Must be at least 8 characters if specified. @@ -14496,7 +14498,7 @@ def updateOrganizationSnmp(self, organizationId: str, **kwargs): kwargs.update(locals()) if "v3AuthMode" in kwargs: - options = ["MD5", "SHA"] + options = ["MD5", "SHA", "SHA256", "SHA384", "SHA512"] assert kwargs["v3AuthMode"] in options, ( f'''"v3AuthMode" cannot be "{kwargs["v3AuthMode"]}", & must be set to one of: {options}''' ) diff --git a/meraki/aio/api/switch.py b/meraki/aio/api/switch.py index 87a5106..e17bf86 100644 --- a/meraki/aio/api/switch.py +++ b/meraki/aio/api/switch.py @@ -374,6 +374,7 @@ def createDeviceSwitchRoutingInterface(self, serial: str, name: str, **kwargs): - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher - loopback (object): The loopback settings of the interface. + - bidirectionalForwardingDetection (object): BFD configuration for the L3 interface. """ kwargs.update(locals()) @@ -415,6 +416,7 @@ def createDeviceSwitchRoutingInterface(self, serial: str, name: str, **kwargs): "ipv6", "vrf", "loopback", + "bidirectionalForwardingDetection", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -471,6 +473,7 @@ def updateDeviceSwitchRoutingInterface(self, serial: str, interfaceId: str, **kw - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher - loopback (object): The loopback settings of the interface. + - bidirectionalForwardingDetection (object): BFD configuration for the L3 interface. """ kwargs.update(locals()) @@ -509,6 +512,7 @@ def updateDeviceSwitchRoutingInterface(self, serial: str, interfaceId: str, **kw "ipv6", "vrf", "loopback", + "bidirectionalForwardingDetection", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -581,6 +585,8 @@ def updateDeviceSwitchRoutingInterfaceDhcp(self, serial: str, interfaceId: str, - dhcpOptions (array): Array of DHCP options consisting of code, type and value for the DHCP server running on the switch interface - reservedIpRanges (array): Array of DHCP reserved IP assignments for the DHCP server running on the switch interface - fixedIpAssignments (array): Array of DHCP fixed IP assignments for the DHCP server running on the switch interface + - dhcpDefaultRouterIps (string): The DHCP default router IPs for the DHCP server running on the switch interface + - dhcpDomainName (string): The DHCP domain name for the DHCP server running on the switch interface """ kwargs.update(locals()) @@ -621,6 +627,8 @@ def updateDeviceSwitchRoutingInterfaceDhcp(self, serial: str, interfaceId: str, "dhcpOptions", "reservedIpRanges", "fixedIpAssignments", + "dhcpDefaultRouterIps", + "dhcpDomainName", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2875,6 +2883,7 @@ def createNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher - loopback (object): The loopback settings of the interface. + - bidirectionalForwardingDetection (object): BFD configuration for the L3 interface. """ kwargs.update(locals()) @@ -2917,6 +2926,7 @@ def createNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId "ipv6", "vrf", "loopback", + "bidirectionalForwardingDetection", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2978,6 +2988,7 @@ def updateNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher - loopback (object): The loopback settings of the interface. + - bidirectionalForwardingDetection (object): BFD configuration for the L3 interface. """ kwargs.update(locals()) @@ -3017,6 +3028,7 @@ def updateNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId "ipv6", "vrf", "loopback", + "bidirectionalForwardingDetection", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3097,6 +3109,8 @@ def updateNetworkSwitchStackRoutingInterfaceDhcp(self, networkId: str, switchSta switch stack interface - reservedIpRanges (array): Array of DHCP reserved IP assignments for the DHCP server running on the switch stack interface - fixedIpAssignments (array): Array of DHCP fixed IP assignments for the DHCP server running on the switch stack interface + - dhcpDefaultRouterIps (string): The DHCP default router IPs for the DHCP server running on the switch stack interface + - dhcpDomainName (string): The DHCP domain name for the DHCP server running on the switch stack interface """ kwargs.update(locals()) @@ -3138,6 +3152,8 @@ def updateNetworkSwitchStackRoutingInterfaceDhcp(self, networkId: str, switchSta "dhcpOptions", "reservedIpRanges", "fixedIpAssignments", + "dhcpDefaultRouterIps", + "dhcpDomainName", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} diff --git a/meraki/aio/api/wireless.py b/meraki/aio/api/wireless.py index c1d7622..fd3ce1a 100644 --- a/meraki/aio/api/wireless.py +++ b/meraki/aio/api/wireless.py @@ -1619,6 +1619,39 @@ def getNetworkWirelessDevicesHealthScores(self, networkId: str): return self._session.get(metadata, resource) + def batchNetworkWirelessDevicesIotRolesUpdate(self, networkId: str, items: list, **kwargs): + """ + **Batch update IoT roles for a list of devices in a network** + https://developer.cisco.com/meraki/api-v1/#!batch-network-wireless-devices-iot-roles-update + + - networkId (string): Network ID + - items (array): List of device IoT role assignments to update (max 100) + """ + + kwargs = locals() + + metadata = { + "tags": ["wireless", "configure", "devices", "iot", "roles"], + "operation": "batchNetworkWirelessDevicesIotRolesUpdate", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/devices/iot/roles/batchUpdate" + + body_params = [ + "items", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"batchNetworkWirelessDevicesIotRolesUpdate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + def getNetworkWirelessDevicesLatencyStats(self, networkId: str, **kwargs): """ **Aggregated latency info for this network, grouped by node** @@ -1699,6 +1732,7 @@ def updateNetworkWirelessElectronicShelfLabel(self, networkId: str, **kwargs): - hostname (string): Desired ESL hostname of the network - enabled (boolean): Turn ESL features on and off for this network - mode (string): Electronic shelf label mode of the network. Valid options are 'Bluetooth', 'high frequency' + - sepioo (object): sepioo IIoT settings """ kwargs.update(locals()) @@ -1718,6 +1752,7 @@ def updateNetworkWirelessElectronicShelfLabel(self, networkId: str, **kwargs): "hostname", "enabled", "mode", + "sepioo", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2003,6 +2038,37 @@ def getNetworkWirelessFailedConnections(self, networkId: str, **kwargs): return self._session.get(metadata, resource, params) + def updateNetworkWirelessIotRoles(self, networkId: str, roles: dict, **kwargs): + """ + **Update the IoT roles for a wireless network** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-iot-roles + + - networkId (string): Network ID + - roles (object): IoT roles configuration + """ + + kwargs = locals() + + metadata = { + "tags": ["wireless", "configure", "iot", "roles"], + "operation": "updateNetworkWirelessIotRoles", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/iot/roles" + + body_params = [ + "roles", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning(f"updateNetworkWirelessIotRoles: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkWirelessLatencyHistory(self, networkId: str, **kwargs): """ **Return average wireless latency over time for a network, device, or network client** @@ -8305,6 +8371,61 @@ def getOrganizationWirelessDevicesEthernetStatuses(self, organizationId: str, to return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessDevicesIotRoles(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the IoT role for each device in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-iot-roles + + - organizationId (string): Organization ID + - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages + - direction (string): direction to paginate, either "next" (default) or "prev" page + - networkIds (array): Optional parameter to filter by one or more network IDs + - serials (array): Optional parameter to filter by one or more device serials + - roles (array): Optional parameter to filter by one or more IoT roles. Use 'none' to filter for devices with no assigned role. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100000. Default is 100. + - startingAfter (string): A token used by the server to indicate the start of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - endingBefore (string): A token used by the server to indicate the end of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "iot", "roles"], + "operation": "getOrganizationWirelessDevicesIotRoles", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/iot/roles" + + query_params = [ + "networkIds", + "serials", + "roles", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "roles", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) + + if self._session._validate_kwargs: + all_params = query_params + array_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"getOrganizationWirelessDevicesIotRoles: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessDevicesLatencyByClient(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Get latency summaries for all wireless devices in an organization.** @@ -9581,6 +9702,55 @@ def getOrganizationWirelessDevicesWirelessControllersByDevice( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessIotRolesByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the IoT role configurations for networks in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-iot-roles-by-network + + - organizationId (string): Organization ID + - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages + - direction (string): direction to paginate, either "next" (default) or "prev" page + - networkIds (array): Optional parameter to filter by one or more network IDs + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100000. Default is 100. + - startingAfter (string): A token used by the server to indicate the start of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - endingBefore (string): A token used by the server to indicate the end of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "iot", "roles", "byNetwork"], + "operation": "getOrganizationWirelessIotRolesByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/iot/roles/byNetwork" + + query_params = [ + "networkIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) + + if self._session._validate_kwargs: + all_params = query_params + array_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"getOrganizationWirelessIotRolesByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessLocationScanningByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Return scanning API settings** diff --git a/meraki/api/appliance.py b/meraki/api/appliance.py index a04b469..591eb40 100644 --- a/meraki/api/appliance.py +++ b/meraki/api/appliance.py @@ -2442,7 +2442,7 @@ def deleteNetworkApplianceTrafficShapingCustomPerformanceClass(self, networkId: def updateNetworkApplianceTrafficShapingRules(self, networkId: str, **kwargs): """ - **Update the traffic shaping settings rules for an MX network** + **Update the traffic shaping settings rules for a Security Appliance or Secure Router network** https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-traffic-shaping-rules - networkId (string): Network ID @@ -2480,7 +2480,7 @@ def updateNetworkApplianceTrafficShapingRules(self, networkId: str, **kwargs): def getNetworkApplianceTrafficShapingRules(self, networkId: str): """ - **Display the traffic shaping settings rules for an MX network** + **Display the traffic shaping settings rules for a Security Appliance or Secure Router network** https://developer.cisco.com/meraki/api-v1/#!get-network-appliance-traffic-shaping-rules - networkId (string): Network ID @@ -5704,7 +5704,7 @@ def getOrganizationApplianceUmbrellaPoliciesByNetwork( def getOrganizationApplianceUplinkStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the uplink status of every Meraki MX appliance, Z series appliance, and Secure Router in the organization** + **List the uplink status of every Meraki MX and Z series appliances in the organization** https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-uplink-statuses - organizationId (string): Organization ID diff --git a/meraki/api/batch/appliance.py b/meraki/api/batch/appliance.py index f897506..efe4dda 100644 --- a/meraki/api/batch/appliance.py +++ b/meraki/api/batch/appliance.py @@ -910,7 +910,7 @@ def deleteNetworkApplianceTrafficShapingCustomPerformanceClass(self, networkId: def updateNetworkApplianceTrafficShapingRules(self, networkId: str, **kwargs): """ - **Update the traffic shaping settings rules for an MX network** + **Update the traffic shaping settings rules for a Security Appliance or Secure Router network** https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-traffic-shaping-rules - networkId (string): Network ID diff --git a/meraki/api/batch/networks.py b/meraki/api/batch/networks.py index 98edcaf..a1e3226 100644 --- a/meraki/api/batch/networks.py +++ b/meraki/api/batch/networks.py @@ -1105,7 +1105,7 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v - vlanNames (array): An array of named VLANs - vlanGroups (array): An array of VLAN groups - iname (string): IName of the profile - - allowedVlans (string): The VLANs allowed on the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. + - activeVlans (string): The active VLANs for the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. """ kwargs.update(locals()) @@ -1115,7 +1115,7 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v body_params = [ "name", - "allowedVlans", + "activeVlans", "vlanNames", "vlanGroups", "iname", diff --git a/meraki/api/batch/organizations.py b/meraki/api/batch/organizations.py index bc30967..e116d37 100644 --- a/meraki/api/batch/organizations.py +++ b/meraki/api/batch/organizations.py @@ -1014,7 +1014,7 @@ def importOrganizationCertificates(self, organizationId: str, managedBy: str, co https://developer.cisco.com/meraki/api-v1/#!import-organization-certificates - organizationId (string): Organization ID - - managedBy (string): Certificate managed by type [system_manager, mr, mx, encrypted_syslog, grpc_dial_out] + - managedBy (string): Certificate managed by type [system_manager, mr, encrypted_syslog, grpc_dial_out] - contents (string): Certificate content in valid PEM format - description (string): Certificate description """ @@ -1022,7 +1022,7 @@ def importOrganizationCertificates(self, organizationId: str, managedBy: str, co kwargs = locals() if "managedBy" in kwargs: - options = ["encrypted_syslog", "grpc_dial_out", "mr", "mx", "system_manager"] + options = ["encrypted_syslog", "grpc_dial_out", "mr", "system_manager"] assert kwargs["managedBy"] in options, ( f'''"managedBy" cannot be "{kwargs["managedBy"]}", & must be set to one of: {options}''' ) @@ -3602,7 +3602,7 @@ def updateOrganizationSnmp(self, organizationId: str, **kwargs): - organizationId (string): Organization ID - v2cEnabled (boolean): Boolean indicating whether SNMP version 2c is enabled for the organization. - v3Enabled (boolean): Boolean indicating whether SNMP version 3 is enabled for the organization. - - v3AuthMode (string): The SNMP version 3 authentication mode. Can be either 'MD5' or 'SHA'. + - v3AuthMode (string): The SNMP version 3 authentication mode. Can be one of 'SHA', 'MD5', 'SHA256', 'SHA384', or 'SHA512'. MD5 is not supported in the Cisco Meraki US Government Region. - v3AuthPass (string): The SNMP version 3 authentication password. Must be at least 8 characters if specified. - v3PrivMode (string): The SNMP version 3 privacy mode. Can be either 'DES' or 'AES128'. - v3PrivPass (string): The SNMP version 3 privacy password. Must be at least 8 characters if specified. @@ -3612,7 +3612,7 @@ def updateOrganizationSnmp(self, organizationId: str, **kwargs): kwargs.update(locals()) if "v3AuthMode" in kwargs: - options = ["MD5", "SHA"] + options = ["MD5", "SHA", "SHA256", "SHA384", "SHA512"] assert kwargs["v3AuthMode"] in options, ( f'''"v3AuthMode" cannot be "{kwargs["v3AuthMode"]}", & must be set to one of: {options}''' ) diff --git a/meraki/api/batch/switch.py b/meraki/api/batch/switch.py index 4828cec..f6eaacf 100644 --- a/meraki/api/batch/switch.py +++ b/meraki/api/batch/switch.py @@ -197,6 +197,7 @@ def createDeviceSwitchRoutingInterface(self, serial: str, name: str, **kwargs): - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher - loopback (object): The loopback settings of the interface. + - bidirectionalForwardingDetection (object): BFD configuration for the L3 interface. """ kwargs.update(locals()) @@ -234,6 +235,7 @@ def createDeviceSwitchRoutingInterface(self, serial: str, name: str, **kwargs): "ipv6", "vrf", "loopback", + "bidirectionalForwardingDetection", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -269,6 +271,7 @@ def updateDeviceSwitchRoutingInterface(self, serial: str, interfaceId: str, **kw - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher - loopback (object): The loopback settings of the interface. + - bidirectionalForwardingDetection (object): BFD configuration for the L3 interface. """ kwargs.update(locals()) @@ -303,6 +306,7 @@ def updateDeviceSwitchRoutingInterface(self, serial: str, interfaceId: str, **kw "ipv6", "vrf", "loopback", + "bidirectionalForwardingDetection", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -354,6 +358,8 @@ def updateDeviceSwitchRoutingInterfaceDhcp(self, serial: str, interfaceId: str, - dhcpOptions (array): Array of DHCP options consisting of code, type and value for the DHCP server running on the switch interface - reservedIpRanges (array): Array of DHCP reserved IP assignments for the DHCP server running on the switch interface - fixedIpAssignments (array): Array of DHCP fixed IP assignments for the DHCP server running on the switch interface + - dhcpDefaultRouterIps (string): The DHCP default router IPs for the DHCP server running on the switch interface + - dhcpDomainName (string): The DHCP domain name for the DHCP server running on the switch interface """ kwargs.update(locals()) @@ -390,6 +396,8 @@ def updateDeviceSwitchRoutingInterfaceDhcp(self, serial: str, interfaceId: str, "dhcpOptions", "reservedIpRanges", "fixedIpAssignments", + "dhcpDefaultRouterIps", + "dhcpDomainName", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -1633,6 +1641,7 @@ def createNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher - loopback (object): The loopback settings of the interface. + - bidirectionalForwardingDetection (object): BFD configuration for the L3 interface. """ kwargs.update(locals()) @@ -1671,6 +1680,7 @@ def createNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId "ipv6", "vrf", "loopback", + "bidirectionalForwardingDetection", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -1707,6 +1717,7 @@ def updateNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher - loopback (object): The loopback settings of the interface. + - bidirectionalForwardingDetection (object): BFD configuration for the L3 interface. """ kwargs.update(locals()) @@ -1742,6 +1753,7 @@ def updateNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId "ipv6", "vrf", "loopback", + "bidirectionalForwardingDetection", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -1797,6 +1809,8 @@ def updateNetworkSwitchStackRoutingInterfaceDhcp(self, networkId: str, switchSta switch stack interface - reservedIpRanges (array): Array of DHCP reserved IP assignments for the DHCP server running on the switch stack interface - fixedIpAssignments (array): Array of DHCP fixed IP assignments for the DHCP server running on the switch stack interface + - dhcpDefaultRouterIps (string): The DHCP default router IPs for the DHCP server running on the switch stack interface + - dhcpDomainName (string): The DHCP domain name for the DHCP server running on the switch stack interface """ kwargs.update(locals()) @@ -1834,6 +1848,8 @@ def updateNetworkSwitchStackRoutingInterfaceDhcp(self, networkId: str, switchSta "dhcpOptions", "reservedIpRanges", "fixedIpAssignments", + "dhcpDefaultRouterIps", + "dhcpDomainName", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { diff --git a/meraki/api/batch/wireless.py b/meraki/api/batch/wireless.py index 7a7c04c..86e619b 100644 --- a/meraki/api/batch/wireless.py +++ b/meraki/api/batch/wireless.py @@ -371,6 +371,31 @@ def updateNetworkWirelessBilling(self, networkId: str, **kwargs): } return action + def batchNetworkWirelessDevicesIotRolesUpdate(self, networkId: str, items: list, **kwargs): + """ + **Batch update IoT roles for a list of devices in a network** + https://developer.cisco.com/meraki/api-v1/#!batch-network-wireless-devices-iot-roles-update + + - networkId (string): Network ID + - items (array): List of device IoT role assignments to update (max 100) + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/wireless/devices/iot/roles/batchUpdate" + + body_params = [ + "items", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "batch_update", + "body": payload, + } + return action + def updateNetworkWirelessElectronicShelfLabel(self, networkId: str, **kwargs): """ **Update the ESL settings of a wireless network** @@ -380,6 +405,7 @@ def updateNetworkWirelessElectronicShelfLabel(self, networkId: str, **kwargs): - hostname (string): Desired ESL hostname of the network - enabled (boolean): Turn ESL features on and off for this network - mode (string): Electronic shelf label mode of the network. Valid options are 'Bluetooth', 'high frequency' + - sepioo (object): sepioo IIoT settings """ kwargs.update(locals()) @@ -395,6 +421,7 @@ def updateNetworkWirelessElectronicShelfLabel(self, networkId: str, **kwargs): "hostname", "enabled", "mode", + "sepioo", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -539,6 +566,31 @@ def deleteNetworkWirelessEthernetPortsProfile(self, networkId: str, profileId: s } return action + def updateNetworkWirelessIotRoles(self, networkId: str, roles: dict, **kwargs): + """ + **Update the IoT roles for a wireless network** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-iot-roles + + - networkId (string): Network ID + - roles (object): IoT roles configuration + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/wireless/iot/roles" + + body_params = [ + "roles", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "update", + "body": payload, + } + return action + def updateNetworkWirelessLocationScanning(self, networkId: str, **kwargs): """ **Change scanning API settings** diff --git a/meraki/api/networks.py b/meraki/api/networks.py index 324bd40..1e82f9f 100644 --- a/meraki/api/networks.py +++ b/meraki/api/networks.py @@ -3326,7 +3326,7 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v - vlanNames (array): An array of named VLANs - vlanGroups (array): An array of VLAN groups - iname (string): IName of the profile - - allowedVlans (string): The VLANs allowed on the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. + - activeVlans (string): The active VLANs for the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. """ kwargs.update(locals()) @@ -3340,7 +3340,7 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v body_params = [ "name", - "allowedVlans", + "activeVlans", "vlanNames", "vlanGroups", "iname", @@ -3476,7 +3476,7 @@ def updateNetworkVlanProfile(self, networkId: str, iname: str, name: str, vlanNa - name (string): Name of the profile, string length must be from 1 to 255 characters - vlanNames (array): An array of named VLANs - vlanGroups (array): An array of VLAN groups - - allowedVlans (string): The VLANs allowed on the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. + - activeVlans (string): The active VLANs for the VLAN profile. Only applicable to trunk ports. The given range must be inclusive of all named VLANs. """ kwargs.update(locals()) @@ -3491,7 +3491,7 @@ def updateNetworkVlanProfile(self, networkId: str, iname: str, name: str, vlanNa body_params = [ "name", - "allowedVlans", + "activeVlans", "vlanNames", "vlanGroups", ] diff --git a/meraki/api/organizations.py b/meraki/api/organizations.py index b9f0dfb..57a49a0 100644 --- a/meraki/api/organizations.py +++ b/meraki/api/organizations.py @@ -4523,7 +4523,7 @@ def importOrganizationCertificates(self, organizationId: str, managedBy: str, co https://developer.cisco.com/meraki/api-v1/#!import-organization-certificates - organizationId (string): Organization ID - - managedBy (string): Certificate managed by type [system_manager, mr, mx, encrypted_syslog, grpc_dial_out] + - managedBy (string): Certificate managed by type [system_manager, mr, encrypted_syslog, grpc_dial_out] - contents (string): Certificate content in valid PEM format - description (string): Certificate description """ @@ -4531,7 +4531,7 @@ def importOrganizationCertificates(self, organizationId: str, managedBy: str, co kwargs = locals() if "managedBy" in kwargs: - options = ["encrypted_syslog", "grpc_dial_out", "mr", "mx", "system_manager"] + options = ["encrypted_syslog", "grpc_dial_out", "mr", "system_manager"] assert kwargs["managedBy"] in options, ( f'''"managedBy" cannot be "{kwargs["managedBy"]}", & must be set to one of: {options}''' ) @@ -11894,6 +11894,7 @@ def getOrganizationNetworksGroups(self, organizationId: str, total_pages=1, dire - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages - direction (string): direction to paginate, either "next" (default) or "prev" page - groupIds (array): Optional parameter to filter network groups by ID + - search (string): Optional parameter to filter network groups by a case-insensitive partial group name match - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 100. - startingAfter (string): A token used by the server to indicate the start of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. - endingBefore (string): A token used by the server to indicate the end of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. @@ -11910,6 +11911,7 @@ def getOrganizationNetworksGroups(self, organizationId: str, total_pages=1, dire query_params = [ "groupIds", + "search", "perPage", "startingAfter", "endingBefore", @@ -14486,7 +14488,7 @@ def updateOrganizationSnmp(self, organizationId: str, **kwargs): - organizationId (string): Organization ID - v2cEnabled (boolean): Boolean indicating whether SNMP version 2c is enabled for the organization. - v3Enabled (boolean): Boolean indicating whether SNMP version 3 is enabled for the organization. - - v3AuthMode (string): The SNMP version 3 authentication mode. Can be either 'MD5' or 'SHA'. + - v3AuthMode (string): The SNMP version 3 authentication mode. Can be one of 'SHA', 'MD5', 'SHA256', 'SHA384', or 'SHA512'. MD5 is not supported in the Cisco Meraki US Government Region. - v3AuthPass (string): The SNMP version 3 authentication password. Must be at least 8 characters if specified. - v3PrivMode (string): The SNMP version 3 privacy mode. Can be either 'DES' or 'AES128'. - v3PrivPass (string): The SNMP version 3 privacy password. Must be at least 8 characters if specified. @@ -14496,7 +14498,7 @@ def updateOrganizationSnmp(self, organizationId: str, **kwargs): kwargs.update(locals()) if "v3AuthMode" in kwargs: - options = ["MD5", "SHA"] + options = ["MD5", "SHA", "SHA256", "SHA384", "SHA512"] assert kwargs["v3AuthMode"] in options, ( f'''"v3AuthMode" cannot be "{kwargs["v3AuthMode"]}", & must be set to one of: {options}''' ) diff --git a/meraki/api/switch.py b/meraki/api/switch.py index 652a264..778e33b 100644 --- a/meraki/api/switch.py +++ b/meraki/api/switch.py @@ -374,6 +374,7 @@ def createDeviceSwitchRoutingInterface(self, serial: str, name: str, **kwargs): - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher - loopback (object): The loopback settings of the interface. + - bidirectionalForwardingDetection (object): BFD configuration for the L3 interface. """ kwargs.update(locals()) @@ -415,6 +416,7 @@ def createDeviceSwitchRoutingInterface(self, serial: str, name: str, **kwargs): "ipv6", "vrf", "loopback", + "bidirectionalForwardingDetection", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -471,6 +473,7 @@ def updateDeviceSwitchRoutingInterface(self, serial: str, interfaceId: str, **kw - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher - loopback (object): The loopback settings of the interface. + - bidirectionalForwardingDetection (object): BFD configuration for the L3 interface. """ kwargs.update(locals()) @@ -509,6 +512,7 @@ def updateDeviceSwitchRoutingInterface(self, serial: str, interfaceId: str, **kw "ipv6", "vrf", "loopback", + "bidirectionalForwardingDetection", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -581,6 +585,8 @@ def updateDeviceSwitchRoutingInterfaceDhcp(self, serial: str, interfaceId: str, - dhcpOptions (array): Array of DHCP options consisting of code, type and value for the DHCP server running on the switch interface - reservedIpRanges (array): Array of DHCP reserved IP assignments for the DHCP server running on the switch interface - fixedIpAssignments (array): Array of DHCP fixed IP assignments for the DHCP server running on the switch interface + - dhcpDefaultRouterIps (string): The DHCP default router IPs for the DHCP server running on the switch interface + - dhcpDomainName (string): The DHCP domain name for the DHCP server running on the switch interface """ kwargs.update(locals()) @@ -621,6 +627,8 @@ def updateDeviceSwitchRoutingInterfaceDhcp(self, serial: str, interfaceId: str, "dhcpOptions", "reservedIpRanges", "fixedIpAssignments", + "dhcpDefaultRouterIps", + "dhcpDomainName", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2875,6 +2883,7 @@ def createNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher - loopback (object): The loopback settings of the interface. + - bidirectionalForwardingDetection (object): BFD configuration for the L3 interface. """ kwargs.update(locals()) @@ -2917,6 +2926,7 @@ def createNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId "ipv6", "vrf", "loopback", + "bidirectionalForwardingDetection", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2978,6 +2988,7 @@ def updateNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher - loopback (object): The loopback settings of the interface. + - bidirectionalForwardingDetection (object): BFD configuration for the L3 interface. """ kwargs.update(locals()) @@ -3017,6 +3028,7 @@ def updateNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId "ipv6", "vrf", "loopback", + "bidirectionalForwardingDetection", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3097,6 +3109,8 @@ def updateNetworkSwitchStackRoutingInterfaceDhcp(self, networkId: str, switchSta switch stack interface - reservedIpRanges (array): Array of DHCP reserved IP assignments for the DHCP server running on the switch stack interface - fixedIpAssignments (array): Array of DHCP fixed IP assignments for the DHCP server running on the switch stack interface + - dhcpDefaultRouterIps (string): The DHCP default router IPs for the DHCP server running on the switch stack interface + - dhcpDomainName (string): The DHCP domain name for the DHCP server running on the switch stack interface """ kwargs.update(locals()) @@ -3138,6 +3152,8 @@ def updateNetworkSwitchStackRoutingInterfaceDhcp(self, networkId: str, switchSta "dhcpOptions", "reservedIpRanges", "fixedIpAssignments", + "dhcpDefaultRouterIps", + "dhcpDomainName", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} diff --git a/meraki/api/wireless.py b/meraki/api/wireless.py index f7ef4b9..ba59369 100644 --- a/meraki/api/wireless.py +++ b/meraki/api/wireless.py @@ -1619,6 +1619,39 @@ def getNetworkWirelessDevicesHealthScores(self, networkId: str): return self._session.get(metadata, resource) + def batchNetworkWirelessDevicesIotRolesUpdate(self, networkId: str, items: list, **kwargs): + """ + **Batch update IoT roles for a list of devices in a network** + https://developer.cisco.com/meraki/api-v1/#!batch-network-wireless-devices-iot-roles-update + + - networkId (string): Network ID + - items (array): List of device IoT role assignments to update (max 100) + """ + + kwargs = locals() + + metadata = { + "tags": ["wireless", "configure", "devices", "iot", "roles"], + "operation": "batchNetworkWirelessDevicesIotRolesUpdate", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/devices/iot/roles/batchUpdate" + + body_params = [ + "items", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"batchNetworkWirelessDevicesIotRolesUpdate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + def getNetworkWirelessDevicesLatencyStats(self, networkId: str, **kwargs): """ **Aggregated latency info for this network, grouped by node** @@ -1699,6 +1732,7 @@ def updateNetworkWirelessElectronicShelfLabel(self, networkId: str, **kwargs): - hostname (string): Desired ESL hostname of the network - enabled (boolean): Turn ESL features on and off for this network - mode (string): Electronic shelf label mode of the network. Valid options are 'Bluetooth', 'high frequency' + - sepioo (object): sepioo IIoT settings """ kwargs.update(locals()) @@ -1718,6 +1752,7 @@ def updateNetworkWirelessElectronicShelfLabel(self, networkId: str, **kwargs): "hostname", "enabled", "mode", + "sepioo", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2003,6 +2038,37 @@ def getNetworkWirelessFailedConnections(self, networkId: str, **kwargs): return self._session.get(metadata, resource, params) + def updateNetworkWirelessIotRoles(self, networkId: str, roles: dict, **kwargs): + """ + **Update the IoT roles for a wireless network** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-iot-roles + + - networkId (string): Network ID + - roles (object): IoT roles configuration + """ + + kwargs = locals() + + metadata = { + "tags": ["wireless", "configure", "iot", "roles"], + "operation": "updateNetworkWirelessIotRoles", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/iot/roles" + + body_params = [ + "roles", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning(f"updateNetworkWirelessIotRoles: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkWirelessLatencyHistory(self, networkId: str, **kwargs): """ **Return average wireless latency over time for a network, device, or network client** @@ -8305,6 +8371,61 @@ def getOrganizationWirelessDevicesEthernetStatuses(self, organizationId: str, to return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessDevicesIotRoles(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the IoT role for each device in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-iot-roles + + - organizationId (string): Organization ID + - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages + - direction (string): direction to paginate, either "next" (default) or "prev" page + - networkIds (array): Optional parameter to filter by one or more network IDs + - serials (array): Optional parameter to filter by one or more device serials + - roles (array): Optional parameter to filter by one or more IoT roles. Use 'none' to filter for devices with no assigned role. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100000. Default is 100. + - startingAfter (string): A token used by the server to indicate the start of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - endingBefore (string): A token used by the server to indicate the end of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "iot", "roles"], + "operation": "getOrganizationWirelessDevicesIotRoles", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/iot/roles" + + query_params = [ + "networkIds", + "serials", + "roles", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "roles", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) + + if self._session._validate_kwargs: + all_params = query_params + array_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"getOrganizationWirelessDevicesIotRoles: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessDevicesLatencyByClient(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Get latency summaries for all wireless devices in an organization.** @@ -9581,6 +9702,55 @@ def getOrganizationWirelessDevicesWirelessControllersByDevice( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessIotRolesByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the IoT role configurations for networks in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-iot-roles-by-network + + - organizationId (string): Organization ID + - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages + - direction (string): direction to paginate, either "next" (default) or "prev" page + - networkIds (array): Optional parameter to filter by one or more network IDs + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100000. Default is 100. + - startingAfter (string): A token used by the server to indicate the start of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - endingBefore (string): A token used by the server to indicate the end of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "iot", "roles", "byNetwork"], + "operation": "getOrganizationWirelessIotRolesByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/iot/roles/byNetwork" + + query_params = [ + "networkIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) + + if self._session._validate_kwargs: + all_params = query_params + array_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"getOrganizationWirelessIotRolesByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessLocationScanningByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Return scanning API settings** diff --git a/pyproject.toml b/pyproject.toml index ab63b32..4e42eaa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "meraki" -version = "4.5.0b2" +version = "4.5.0b3" description = "Cisco Meraki Dashboard API library" authors = [ {name = "Cisco Meraki", email = "api-feedback@meraki.net"} diff --git a/uv.lock b/uv.lock index d3aeeac..60505e5 100644 --- a/uv.lock +++ b/uv.lock @@ -549,7 +549,7 @@ wheels = [ [[package]] name = "meraki" -version = "4.5.0b2" +version = "4.5.0b3" source = { editable = "." } dependencies = [ { name = "aiohttp" },