diff --git a/docs/generation-report.md b/docs/generation-report.md index 0c08a07..1dcef4f 100644 --- a/docs/generation-report.md +++ b/docs/generation-report.md @@ -1,5 +1,11 @@ # Generation Report +## 2026-05-27 | Library v4.1.0b3 | API 1.70.0-beta.3 + + +No Python keyword parameter conflicts detected. + + ## 2026-05-20 | Library v4.1.0b2 | API 1.70.0-beta.2 diff --git a/meraki/__init__.py b/meraki/__init__.py index 17ba8fc..312ab5b 100644 --- a/meraki/__init__.py +++ b/meraki/__init__.py @@ -59,7 +59,7 @@ from meraki._version import __version__ # noqa: F401 from datetime import datetime -__api_version__ = "1.70.0-beta.2" +__api_version__ = "1.70.0-beta.3" __all__ = [ "APIError", diff --git a/meraki/_version.py b/meraki/_version.py index 4b67392..89f03b3 100644 --- a/meraki/_version.py +++ b/meraki/_version.py @@ -1 +1 @@ -__version__ = "4.1.0b2" +__version__ = "4.1.0b3" diff --git a/meraki/aio/api/administered.py b/meraki/aio/api/administered.py index 86a4429..05b1663 100644 --- a/meraki/aio/api/administered.py +++ b/meraki/aio/api/administered.py @@ -67,3 +67,36 @@ def revokeAdministeredIdentitiesMeApiKeys(self, suffix: str): resource = f"/administered/identities/me/api/keys/{suffix}/revoke" return self._session.post(metadata, resource) + + def getAdministeredSearchLive(self, query: str, organizationId: str, networkId: str, **kwargs): + """ + **List the appropriate results for a given global search utilizing live_search_react** + https://developer.cisco.com/meraki/api-v1/#!get-administered-search-live + + - query (string): Search keywords + - organizationId (string): Id of Organization you want to search with + - networkId (string): Id of NodeGroup you want to seach with + """ + + kwargs = locals() + + metadata = { + "tags": ["administered", "configure", "search", "live"], + "operation": "getAdministeredSearchLive", + } + resource = "/administered/search/live" + + query_params = [ + "query", + "organizationId", + "networkId", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getAdministeredSearchLive: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) diff --git a/meraki/aio/api/appliance.py b/meraki/aio/api/appliance.py index db28a66..a6a6e85 100644 --- a/meraki/aio/api/appliance.py +++ b/meraki/aio/api/appliance.py @@ -23,6 +23,112 @@ def getDeviceApplianceDhcpSubnets(self, serial: str): return self._session.get(metadata, resource) + def createDeviceApplianceInterfacesPortsUpdate(self, serial: str, **kwargs): + """ + **Update configurations for an appliance's specified port** + https://developer.cisco.com/meraki/api-v1/#!create-device-appliance-interfaces-ports-update + + - serial (string): Serial + - interface (object): The interface tuple used to identify the port + - enabled (boolean): Indicates whether the port is enabled + - personality (object): Describes the port's configurability + - uplink (object): The port's settings when in WAN mode + - downlink (object): The port's VLAN settings when in LAN mode + - speed (string): Link speed for the port, in Mbps + - duplex (string): Duplex configuration for the port + """ + + kwargs.update(locals()) + + if "speed" in kwargs and kwargs["speed"] is not None: + options = ["10", "100", "1000", "10000", "2500", "25000", "5000", "auto"] + assert kwargs["speed"] in options, f'''"speed" cannot be "{kwargs["speed"]}", & must be set to one of: {options}''' + if "duplex" in kwargs and kwargs["duplex"] is not None: + options = ["auto", "full", "half"] + assert kwargs["duplex"] in options, ( + f'''"duplex" cannot be "{kwargs["duplex"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["appliance", "configure", "interfaces", "ports", "update"], + "operation": "createDeviceApplianceInterfacesPortsUpdate", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/appliance/interfaces/ports/update" + + body_params = [ + "interface", + "enabled", + "personality", + "uplink", + "downlink", + "speed", + "duplex", + ] + 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"createDeviceApplianceInterfacesPortsUpdate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateDeviceApplianceInterfacesPort(self, serial: str, number: str, **kwargs): + """ + **Update configurations for an appliance's specified port** + https://developer.cisco.com/meraki/api-v1/#!update-device-appliance-interfaces-port + + - serial (string): Serial + - number (string): Number + - enabled (boolean): Indicates whether the port is enabled + - personality (object): Describes the port's configurability + - uplink (object): The port's settings when in WAN mode + - downlink (object): The port's VLAN settings when in LAN mode + - speed (string): Link speed for the port, in Mbps + - duplex (string): Duplex configuration for the port + """ + + kwargs.update(locals()) + + if "speed" in kwargs and kwargs["speed"] is not None: + options = ["10", "100", "1000", "10000", "2500", "25000", "5000", "auto"] + assert kwargs["speed"] in options, f'''"speed" cannot be "{kwargs["speed"]}", & must be set to one of: {options}''' + if "duplex" in kwargs and kwargs["duplex"] is not None: + options = ["auto", "full", "half"] + assert kwargs["duplex"] in options, ( + f'''"duplex" cannot be "{kwargs["duplex"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["appliance", "configure", "interfaces", "ports"], + "operation": "updateDeviceApplianceInterfacesPort", + } + serial = urllib.parse.quote(str(serial), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/devices/{serial}/appliance/interfaces/ports/{number}" + + body_params = [ + "enabled", + "personality", + "uplink", + "downlink", + "speed", + "duplex", + ] + 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"updateDeviceApplianceInterfacesPort: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getDeviceAppliancePerformance(self, serial: str, **kwargs): """ **Return the performance score for a single MX** @@ -1038,6 +1144,93 @@ def updateNetworkApplianceFirewallSettings(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) + def createNetworkApplianceInterfacesL3(self, networkId: str, ipv4: dict, **kwargs): + """ + **Create wired L3 interface** + https://developer.cisco.com/meraki/api-v1/#!create-network-appliance-interfaces-l-3 + + - networkId (string): Network ID + - ipv4 (object): IPv4 configuration + - port (object): Port configuration + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "interfaces", "l3"], + "operation": "createNetworkApplianceInterfacesL3", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/interfaces/l3" + + body_params = [ + "port", + "ipv4", + ] + 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"createNetworkApplianceInterfacesL3: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str, **kwargs): + """ + **Update wired L3 interface** + https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-interfaces-l-3 + + - networkId (string): Network ID + - interfaceId (string): Interface ID + - port (object): Port configuration + - ipv4 (object): IPv4 configuration + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "interfaces", "l3"], + "operation": "updateNetworkApplianceInterfacesL3", + } + networkId = urllib.parse.quote(str(networkId), safe="") + interfaceId = urllib.parse.quote(str(interfaceId), safe="") + resource = f"/networks/{networkId}/appliance/interfaces/l3/{interfaceId}" + + body_params = [ + "port", + "ipv4", + ] + 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"updateNetworkApplianceInterfacesL3: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str): + """ + **Delete wired L3 interface** + https://developer.cisco.com/meraki/api-v1/#!delete-network-appliance-interfaces-l-3 + + - networkId (string): Network ID + - interfaceId (string): Interface ID + """ + + metadata = { + "tags": ["appliance", "configure", "interfaces", "l3"], + "operation": "deleteNetworkApplianceInterfacesL3", + } + networkId = urllib.parse.quote(str(networkId), safe="") + interfaceId = urllib.parse.quote(str(interfaceId), safe="") + resource = f"/networks/{networkId}/appliance/interfaces/l3/{interfaceId}" + + return self._session.delete(metadata, resource) + def getNetworkAppliancePorts(self, networkId: str): """ **List per-port VLAN settings for all ports of a secure router or security appliance.** @@ -1087,6 +1280,9 @@ def updateNetworkAppliancePort(self, networkId: str, portId: str, **kwargs): - vlan (integer): Native VLAN when the port is in Trunk mode. Access VLAN when the port is in Access mode. - allowedVlans (string): Comma-delimited list of VLAN IDs (e.g. '2,15') for all devices. Secure Routers also support VLAN ranges (e.g. '2-10,15'). Use 'all' to permit all VLANs on the port. - accessPolicy (string): The name of the policy. Only applicable to Access ports. Valid values are: 'open', '8021x-radius', 'mac-radius', 'hybris-radius' for MX64 or Z3 or any MX supporting the per port authentication feature. Otherwise, 'open' is the only valid value and 'open' is the default value if the field is missing. + - peerSgtCapable (boolean): If true, Peer SGT is enabled for traffic through this port. Applicable to trunk port only, not access port. + - adaptivePolicyGroupId (string): Adaptive policy group ID that all traffic originating from this port is assigned to. + - sgt (object): Security Group Tag settings for the port. """ kwargs.update(locals()) @@ -1106,6 +1302,9 @@ def updateNetworkAppliancePort(self, networkId: str, portId: str, **kwargs): "vlan", "allowedVlans", "accessPolicy", + "peerSgtCapable", + "adaptivePolicyGroupId", + "sgt", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1674,6 +1873,7 @@ def updateNetworkApplianceSingleLan(self, networkId: str, **kwargs): - applianceIp (string): The appliance IP address of the single LAN - ipv6 (object): IPv6 configuration on the VLAN - mandatoryDhcp (object): Mandatory DHCP will enforce that clients connecting to this LAN must use the IP address assigned by the DHCP server. Clients who use a static IP address won't be able to associate. Only available on firmware versions 17.0 and above + - vrf (object): VRF configuration on the Single LAN """ kwargs.update(locals()) @@ -1690,6 +1890,7 @@ def updateNetworkApplianceSingleLan(self, networkId: str, **kwargs): "applianceIp", "ipv6", "mandatoryDhcp", + "vrf", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1833,6 +2034,7 @@ def createNetworkApplianceStaticRoute(self, networkId: str, name: str, subnet: s - subnet (string): Subnet of the route - gatewayIp (string): Gateway IP address (next hop) - gatewayVlanId (integer): Gateway VLAN ID + - vrf (object): VRF settings for the static route. """ kwargs.update(locals()) @@ -1849,6 +2051,7 @@ def createNetworkApplianceStaticRoute(self, networkId: str, name: str, subnet: s "subnet", "gatewayIp", "gatewayVlanId", + "vrf", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1893,6 +2096,7 @@ def updateNetworkApplianceStaticRoute(self, networkId: str, staticRouteId: str, - enabled (boolean): Whether the route should be enabled or not - fixedIpAssignments (object): Fixed DHCP IP assignments on the route - reservedIpRanges (array): DHCP reserved IP ranges + - vrf (object): VRF settings for the static route. """ kwargs.update(locals()) @@ -1913,6 +2117,7 @@ def updateNetworkApplianceStaticRoute(self, networkId: str, staticRouteId: str, "enabled", "fixedIpAssignments", "reservedIpRanges", + "vrf", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2301,6 +2506,7 @@ def updateNetworkApplianceTrafficShapingVpnExclusions(self, networkId: str, **kw - networkId (string): Network ID - custom (array): Custom VPN exclusion rules. Pass an empty array to clear existing rules. - majorApplications (array): Major Application based VPN exclusion rules. Pass an empty array to clear existing rules. + - applications (array): NBAR Application based VPN exclusion rules. Available for networks on >=19.2 firmware """ kwargs.update(locals()) @@ -2315,6 +2521,7 @@ def updateNetworkApplianceTrafficShapingVpnExclusions(self, networkId: str, **kw body_params = [ "custom", "majorApplications", + "applications", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2378,6 +2585,199 @@ def disconnectNetworkApplianceUmbrellaAccount(self, networkId: str): return self._session.post(metadata, resource) + def disableNetworkApplianceUmbrellaProtection(self, networkId: str): + """ + **Disable umbrella protection for an MX network** + https://developer.cisco.com/meraki/api-v1/#!disable-network-appliance-umbrella-protection + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["appliance", "configure", "umbrella"], + "operation": "disableNetworkApplianceUmbrellaProtection", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/disableProtection" + + return self._session.delete(metadata, resource) + + def exclusionsNetworkApplianceUmbrellaDomains(self, networkId: str, domains: list, **kwargs): + """ + **Specify one or more domain names to be excluded from being routed to Cisco Umbrella.** + https://developer.cisco.com/meraki/api-v1/#!exclusions-network-appliance-umbrella-domains + + - networkId (string): Network ID + - domains (array): Domain names to exclude from Umbrella DNS routing (e.g., 'example.com', 'corp.example.org'). Standard FQDNs only — wildcards are not supported. Values are lowercased before saving. Each call replaces the full exclusion list. + """ + + kwargs = locals() + + metadata = { + "tags": ["appliance", "configure", "umbrella", "domains"], + "operation": "exclusionsNetworkApplianceUmbrellaDomains", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/domains/exclusions" + + body_params = [ + "domains", + ] + 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"exclusionsNetworkApplianceUmbrellaDomains: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def enableNetworkApplianceUmbrellaProtection(self, networkId: str): + """ + **Enable umbrella protection for an MX network** + https://developer.cisco.com/meraki/api-v1/#!enable-network-appliance-umbrella-protection + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["appliance", "configure", "umbrella"], + "operation": "enableNetworkApplianceUmbrellaProtection", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/enableProtection" + + return self._session.post(metadata, resource) + + def policiesNetworkApplianceUmbrella(self, networkId: str, policyIds: list, **kwargs): + """ + **Update umbrella policies applied to MX network.** + https://developer.cisco.com/meraki/api-v1/#!policies-network-appliance-umbrella + + - networkId (string): Network ID + - policyIds (array): Array of umbrella policy IDs + """ + + kwargs = locals() + + metadata = { + "tags": ["appliance", "configure", "umbrella"], + "operation": "policiesNetworkApplianceUmbrella", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/policies" + + body_params = [ + "policyIds", + ] + 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"policiesNetworkApplianceUmbrella: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def addNetworkApplianceUmbrellaPolicies(self, networkId: str, policy: dict, **kwargs): + """ + **Add one Cisco Umbrella DNS security policy to an MX network by policy ID** + https://developer.cisco.com/meraki/api-v1/#!add-network-appliance-umbrella-policies + + - networkId (string): Network ID + - policy (object): Umbrella policy to add + """ + + kwargs = locals() + + metadata = { + "tags": ["appliance", "configure", "umbrella", "policies"], + "operation": "addNetworkApplianceUmbrellaPolicies", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/policies/add" + + body_params = [ + "policy", + ] + 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"addNetworkApplianceUmbrellaPolicies: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def removeNetworkApplianceUmbrellaPolicies(self, networkId: str, policy: dict, **kwargs): + """ + **Remove one Cisco Umbrella DNS security policy from an MX network by policy ID** + https://developer.cisco.com/meraki/api-v1/#!remove-network-appliance-umbrella-policies + + - networkId (string): Network ID + - policy (object): Umbrella policy to remove + """ + + kwargs = locals() + + metadata = { + "tags": ["appliance", "configure", "umbrella", "policies"], + "operation": "removeNetworkApplianceUmbrellaPolicies", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/policies/remove" + + body_params = [ + "policy", + ] + 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"removeNetworkApplianceUmbrellaPolicies: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def protectionNetworkApplianceUmbrella(self, networkId: str, enabled: bool, **kwargs): + """ + **Enable or disable umbrella protection for an appliance network** + https://developer.cisco.com/meraki/api-v1/#!protection-network-appliance-umbrella + + - networkId (string): Network ID + - enabled (boolean): Enable or disable umbrella protection + """ + + kwargs = locals() + + metadata = { + "tags": ["appliance", "configure", "umbrella"], + "operation": "protectionNetworkApplianceUmbrella", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/protection" + + body_params = [ + "enabled", + ] + 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"protectionNetworkApplianceUmbrella: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def updateNetworkApplianceUplinksNat(self, networkId: str, uplinks: list, **kwargs): """ **Update uplink NAT settings of the specified network** @@ -2488,6 +2888,8 @@ def createNetworkApplianceVlan(self, networkId: str, id: str, name: str, **kwarg - dhcpBootNextServer (string): DHCP boot option to direct boot clients to the server to load the boot file from - dhcpBootFilename (string): DHCP boot option for boot filename - dhcpOptions (array): The list of DHCP options that will be included in DHCP responses. Each object in the list should have "code", "type", and "value" properties. + - adaptivePolicyGroupId (string): Adaptive policy group ID this VLAN is assigned to. + - sgt (object): Security Group Tag settings for the VLAN. - vrf (object): VRF configuration on the VLAN - uplinks (array): Per-uplink NAT exception override configuration on the VLAN. Applicable only for networks that support NAT exceptions. """ @@ -2535,6 +2937,8 @@ def createNetworkApplianceVlan(self, networkId: str, id: str, name: str, **kwarg "dhcpBootNextServer", "dhcpBootFilename", "dhcpOptions", + "adaptivePolicyGroupId", + "sgt", "vrf", "uplinks", ] @@ -2642,6 +3046,8 @@ def updateNetworkApplianceVlan(self, networkId: str, vlanId: str, **kwargs): - mask (integer): Mask used for the subnet of all bound to the template networks. Applicable only for template network. - ipv6 (object): IPv6 configuration on the VLAN - mandatoryDhcp (object): Mandatory DHCP will enforce that clients connecting to this VLAN must use the IP address assigned by the DHCP server. Clients who use a static IP address won't be able to associate. Only available on firmware versions 17.0 and above + - adaptivePolicyGroupId (string): Adaptive policy group ID that all traffic originating from this VLAN is assigned to. + - sgt (object): Security Group Tag settings for the VLAN. - vrf (object): VRF configuration on the VLAN - uplinks (array): Per-uplink NAT exception override configuration on the VLAN. Applicable only for networks that support NAT exceptions. """ @@ -2693,6 +3099,8 @@ def updateNetworkApplianceVlan(self, networkId: str, vlanId: str, **kwargs): "mask", "ipv6", "mandatoryDhcp", + "adaptivePolicyGroupId", + "sgt", "vrf", "uplinks", ] @@ -2781,9 +3189,44 @@ def updateNetworkApplianceVpnBgp(self, networkId: str, enabled: bool, **kwargs): return self._session.put(metadata, resource, payload) - def getNetworkApplianceVpnSiteToSiteVpn(self, networkId: str): + def updateNetworkApplianceVpnSiteToSiteHubVrfs(self, networkId: str, hubNetworkId: str, _json: list, **kwargs): """ - **Return the site-to-site VPN settings of a network** + **Update the VRF mappings for a source network and hub pair.** + https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-vpn-site-to-site-hub-vrfs + + - networkId (string): Network ID + - hubNetworkId (string): Hub network ID + - _json (array): The list of VRFs for this source and hub mapping. + """ + + kwargs = locals() + + metadata = { + "tags": ["appliance", "configure", "vpn", "siteToSite", "hubs", "vrfs"], + "operation": "updateNetworkApplianceVpnSiteToSiteHubVrfs", + } + networkId = urllib.parse.quote(str(networkId), safe="") + hubNetworkId = urllib.parse.quote(str(hubNetworkId), safe="") + resource = f"/networks/{networkId}/appliance/vpn/siteToSite/hubs/{hubNetworkId}/vrfs" + + body_params = [ + "_json", + ] + 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"updateNetworkApplianceVpnSiteToSiteHubVrfs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def getNetworkApplianceVpnSiteToSiteVpn(self, networkId: str): + """ + **Return the site-to-site VPN settings of a network** https://developer.cisco.com/meraki/api-v1/#!get-network-appliance-vpn-site-to-site-vpn - networkId (string): Network ID @@ -2807,6 +3250,8 @@ def updateNetworkApplianceVpnSiteToSiteVpn(self, networkId: str, mode: str, **kw - mode (string): The site-to-site VPN mode. Can be one of 'none', 'spoke' or 'hub' - hubs (array): The list of VPN hubs, in order of preference. In spoke mode, at least 1 hub is required. - subnets (array): The list of subnets and their VPN presence. + - peerSgtCapable (boolean): Whether or not Peer SGT is enabled for traffic to this VPN peer. + - sgt (object): Security Group Tag settings for the VPN peer. - subnet (object): Configuration of subnet features - hostTranslations (array): The list of VPN host translations. Host translations are supported starting from MX firmware version 26.1.2 """ @@ -2828,6 +3273,8 @@ def updateNetworkApplianceVpnSiteToSiteVpn(self, networkId: str, mode: str, **kw "mode", "hubs", "subnets", + "peerSgtCapable", + "sgt", "subnet", "hostTranslations", ] @@ -2916,6 +3363,167 @@ def swapNetworkApplianceWarmSpare(self, networkId: str): return self._session.post(metadata, resource) + def getOrganizationApplianceDevicesInterfacesL3(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List L3 interfaces across networks for the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-devices-interfaces-l-3 + + - 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 Network IDs to filter results + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "devices", "interfaces", "l3"], + "operation": "getOrganizationApplianceDevicesInterfacesL3", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/devices/interfaces/l3" + + 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"getOrganizationApplianceDevicesInterfacesL3: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationApplianceDevicesInterfacesPortsByDevice(self, organizationId: str, **kwargs): + """ + **Returns port configurations for appliances in a given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-devices-interfaces-ports-by-device + + - organizationId (string): Organization ID + - serials (array): Parameter to filter the results by device serials + - interfaces (array): Parameter to filter the results by specific interfaces + - numbers (array): Parameter to filter the results by specific ports + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "devices", "interfaces", "ports", "byDevice"], + "operation": "getOrganizationApplianceDevicesInterfacesPortsByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/devices/interfaces/ports/byDevice" + + query_params = [ + "serials", + "interfaces", + "numbers", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + "interfaces", + "numbers", + ] + 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"getOrganizationApplianceDevicesInterfacesPortsByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApplianceDevicesPortsTransceiversReadingsHistoryByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Return time-series digital optical monitoring (DOM) readings for ports on each DOM-enabled Catalyst appliance in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-devices-ports-transceivers-readings-history-by-device + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10. Default is 5. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 1200. Interval is calculated if time params are provided. + - networkIds (array): Networks for which information should be gathered. + - serials (array): Optional parameter to filter usage by appliance serial. + - portIds (array): Optional parameter to filter usage by port ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "devices", "ports", "transceivers", "readings", "history", "byDevice"], + "operation": "getOrganizationApplianceDevicesPortsTransceiversReadingsHistoryByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/devices/ports/transceivers/readings/history/byDevice" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "serials", + "portIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "portIds", + ] + 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"getOrganizationApplianceDevicesPortsTransceiversReadingsHistoryByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceDevicesRedundancyByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): @@ -2957,6 +3565,68 @@ def getOrganizationApplianceDevicesRedundancyByNetwork( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceDevicesSystemUtilizationByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Return the appliance utilization history for devices in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-devices-system-utilization-by-interval + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 2 hours. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 1200. The default is 1200. + - networkIds (array): Optional parameter to filter the result set by the included set of network IDs + - serials (array): Optional parameter to filter device utilization history by device serial numbers + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "devices", "system", "utilization", "byInterval"], + "operation": "getOrganizationApplianceDevicesSystemUtilizationByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/devices/system/utilization/byInterval" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationApplianceDevicesSystemUtilizationByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceDnsLocalProfiles(self, organizationId: str, **kwargs): """ **Fetch the local DNS profiles used in the organization** @@ -3632,6 +4302,66 @@ def getOrganizationApplianceFirewallMulticastForwardingByNetwork( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceInterfacesPacketsOverviewsByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns packet counter overviews for all interfaces on Secure Routers in the organization, including totals and average rates by packet type over the requested timespan.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-interfaces-packets-overviews-by-device + + - 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 + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 1 day. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 10. + - 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. + - networkIds (array): Optional parameter to filter Secure Routers in the provided networks + - serials (array): Optional parameter to filter Secure Routers by their serial numbers + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "interfaces", "packets", "overviews", "byDevice"], + "operation": "getOrganizationApplianceInterfacesPacketsOverviewsByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/interfaces/packets/overviews/byDevice" + + query_params = [ + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationApplianceInterfacesPacketsOverviewsByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceRoutingVrfsSettings(self, organizationId: str): """ **Return the VRF setting for an organization.** @@ -3682,21 +4412,70 @@ def updateOrganizationApplianceRoutingVrfsSettings(self, organizationId: str, en return self._session.put(metadata, resource, payload) - def getOrganizationApplianceSecurityEvents(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationApplianceSdwanInternetPolicies(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the security events for an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-security-events + **Get the SDWAN internet traffic preferences for an MX network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-sdwan-internet-policies - 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 - - t0 (string): The beginning of the timespan for the data. Data is gathered after the specified t0 value. The maximum lookback period is 365 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 31 days. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 100. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 200. Default is 50. - 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. - - sortOrder (string): Sorted order of security events based on event detection time. Order options are 'ascending' or 'descending'. Default is ascending order. + - wanTrafficUplinkPreferences (array): policies with respective traffic filters for an MX network + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "sdwan", "internetPolicies"], + "operation": "getOrganizationApplianceSdwanInternetPolicies", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/sdwan/internetPolicies" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "wanTrafficUplinkPreferences", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "wanTrafficUplinkPreferences", + ] + 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"getOrganizationApplianceSdwanInternetPolicies: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationApplianceSecurityEvents(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the security events for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-security-events + + - 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 + - t0 (string): The beginning of the timespan for the data. Data is gathered after the specified t0 value. The maximum lookback period is 365 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 31 days. + - 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. + - sortOrder (string): Sorted order of security events based on event detection time. Order options are 'ascending' or 'descending'. Default is ascending order. """ kwargs.update(locals()) @@ -3836,6 +4615,57 @@ def getOrganizationApplianceTrafficShapingVpnExclusionsByNetwork( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceUmbrellaPoliciesByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List Umbrella policy IDs applied to MX networks in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-umbrella-policies-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 + - 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. + - networkIds (array): Filter results to only the given network IDs + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "umbrella", "policies", "byNetwork"], + "operation": "getOrganizationApplianceUmbrellaPoliciesByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/umbrella/policies/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationApplianceUmbrellaPoliciesByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceUplinkStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **List the uplink status of every Meraki MX and Z series appliances in the organization** @@ -4021,6 +4851,282 @@ def getOrganizationApplianceUplinksUsageByNetwork(self, organizationId: str, **k return self._session.get(metadata, resource, params) + def getOrganizationApplianceVlans(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the VLANs for an Organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vlans + + - 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 + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "vlans"], + "operation": "getOrganizationApplianceVlans", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vlans" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationApplianceVlans: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationApplianceVpnConnectivityVpnPeersByNetwork(self, organizationId: str, **kwargs): + """ + **Summarizes by-device vpn peers for the organization in the given interval.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-connectivity-vpn-peers-by-network + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 3600, 14400, 86400. The default is 3600. Interval is calculated if time params are provided. + - networkIds (array): Filter results by network. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "vpn", "connectivity", "vpnPeers", "byNetwork"], + "operation": "getOrganizationApplianceVpnConnectivityVpnPeersByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vpn/connectivity/vpnPeers/byNetwork" + + query_params = [ + "t0", + "t1", + "timespan", + "interval", + "networkIds", + ] + 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"getOrganizationApplianceVpnConnectivityVpnPeersByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApplianceVpnRemoteAccessSecureClientAuthenticationByClient(self, organizationId: str, **kwargs): + """ + **Get authentication for all clients in organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-remote-access-secure-client-authentication-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "vpn", "remoteAccess", "secureClient", "authentication", "byClient"], + "operation": "getOrganizationApplianceVpnRemoteAccessSecureClientAuthenticationByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vpn/remoteAccess/secureClient/authentication/byClient" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationApplianceVpnRemoteAccessSecureClientAuthenticationByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApplianceVpnRemoteAccessSecureClientIpAssignmentByClient(self, organizationId: str, **kwargs): + """ + **Get IP assignment for all clients in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-remote-access-secure-client-ip-assignment-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "vpn", "remoteAccess", "secureClient", "ipAssignment", "byClient"], + "operation": "getOrganizationApplianceVpnRemoteAccessSecureClientIpAssignmentByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vpn/remoteAccess/secureClient/ipAssignment/byClient" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationApplianceVpnRemoteAccessSecureClientIpAssignmentByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApplianceVpnRemoteAccessSecureClientTunnelCreationByClient(self, organizationId: str, **kwargs): + """ + **Get tunnel creation events for all clients in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-remote-access-secure-client-tunnel-creation-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "vpn", "remoteAccess", "secureClient", "tunnelCreation", "byClient"], + "operation": "getOrganizationApplianceVpnRemoteAccessSecureClientTunnelCreationByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vpn/remoteAccess/secureClient/tunnelCreation/byClient" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationApplianceVpnRemoteAccessSecureClientTunnelCreationByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApplianceVpnSiteToSiteHubsVrfs(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return source-to-hub VRF mappings for site-to-site VPN within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-site-to-site-hubs-vrfs + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 500. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter source-to-hub mappings by source network IDs. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "vpn", "siteToSite", "hubs", "vrfs"], + "operation": "getOrganizationApplianceVpnSiteToSiteHubsVrfs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vpn/siteToSite/hubs/vrfs" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationApplianceVpnSiteToSiteHubsVrfs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceVpnSiteToSiteIpsecPeersSlas(self, organizationId: str): """ **Get the list of available IPsec SLA policies for an organization** diff --git a/meraki/aio/api/camera.py b/meraki/aio/api/camera.py index 98e5c8a..8d29b25 100644 --- a/meraki/aio/api/camera.py +++ b/meraki/aio/api/camera.py @@ -739,6 +739,97 @@ def getNetworkCameraSchedules(self, networkId: str): return self._session.get(metadata, resource) + def createNetworkCameraVideoWall(self, networkId: str, name: str, tiles: list, **kwargs): + """ + **Create a new video wall.** + https://developer.cisco.com/meraki/api-v1/#!create-network-camera-video-wall + + - networkId (string): Network ID + - name (string): The name of the video wall. + - tiles (array): The tiles that should appear on the video wall. + - index (integer): The order that this wall should appear on the video wall list. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["camera", "configure", "videoWalls"], + "operation": "createNetworkCameraVideoWall", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/camera/videoWalls" + + body_params = [ + "name", + "index", + "tiles", + ] + 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"createNetworkCameraVideoWall: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateNetworkCameraVideoWall(self, networkId: str, id: str, name: str, tiles: list, **kwargs): + """ + **Update the specified video wall.** + https://developer.cisco.com/meraki/api-v1/#!update-network-camera-video-wall + + - networkId (string): Network ID + - id (string): ID + - name (string): The name of the video wall. + - tiles (array): The tiles that should appear on the video wall. + - index (integer): The order that this wall should appear on the video wall list. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["camera", "configure", "videoWalls"], + "operation": "updateNetworkCameraVideoWall", + } + networkId = urllib.parse.quote(str(networkId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/networks/{networkId}/camera/videoWalls/{id}" + + body_params = [ + "name", + "index", + "tiles", + ] + 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"updateNetworkCameraVideoWall: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteNetworkCameraVideoWall(self, networkId: str, id: str): + """ + **Delete the specified video wall.** + https://developer.cisco.com/meraki/api-v1/#!delete-network-camera-video-wall + + - networkId (string): Network ID + - id (string): ID + """ + + metadata = { + "tags": ["camera", "configure", "videoWalls"], + "operation": "deleteNetworkCameraVideoWall", + } + networkId = urllib.parse.quote(str(networkId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/networks/{networkId}/camera/videoWalls/{id}" + + return self._session.delete(metadata, resource) + def createNetworkCameraWirelessProfile(self, networkId: str, name: str, ssid: dict, **kwargs): """ **Creates a new camera wireless profile for this network.** @@ -1091,6 +1182,45 @@ def getOrganizationCameraDetectionsHistoryByBoundaryByInterval( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationCameraDevicesConfigurations(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Lists all the capabilities of cameras in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-camera-devices-configurations + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 20. + - 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": ["camera", "configure", "devices", "configurations"], + "operation": "getOrganizationCameraDevicesConfigurations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/camera/devices/configurations" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationCameraDevicesConfigurations: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationCameraOnboardingStatuses(self, organizationId: str, **kwargs): """ **Fetch onboarding status of cameras** @@ -1336,3 +1466,104 @@ def updateOrganizationCameraRole(self, organizationId: str, roleId: str, **kwarg self._session._logger.warning(f"updateOrganizationCameraRole: ignoring unrecognized kwargs: {invalid}") return self._session.put(metadata, resource, payload) + + def getOrganizationCameraVideoWalls(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return a list of video walls.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-camera-video-walls + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 10 - 250. Default is 50. + - 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. + - networkIds (array): A list of network ids to filter video walls on + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["camera", "configure", "videoWalls"], + "operation": "getOrganizationCameraVideoWalls", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/camera/videoWalls" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationCameraVideoWalls: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationCameraVideoWall(self, organizationId: str, id: str): + """ + **Return the specified video wall.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-camera-video-wall + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["camera", "configure", "videoWalls"], + "operation": "getOrganizationCameraVideoWall", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/camera/videoWalls/{id}" + + return self._session.get(metadata, resource) + + def getOrganizationCameraVideoWallVideoLink(self, organizationId: str, id: str, **kwargs): + """ + **Returns video wall link to the specified video wall id** + https://developer.cisco.com/meraki/api-v1/#!get-organization-camera-video-wall-video-link + + - organizationId (string): Organization ID + - id (string): ID + - timestamp (string): [optional] The video link will start at this time. The timestamp should be a string in ISO8601 format. If no timestamp is specified, we will assume current time. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["camera", "configure", "videoWalls", "videoLink"], + "operation": "getOrganizationCameraVideoWallVideoLink", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/camera/videoWalls/{id}/videoLink" + + query_params = [ + "timestamp", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationCameraVideoWallVideoLink: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) diff --git a/meraki/aio/api/campusGateway.py b/meraki/aio/api/campusGateway.py index ed7cee5..90e053a 100644 --- a/meraki/aio/api/campusGateway.py +++ b/meraki/aio/api/campusGateway.py @@ -96,6 +96,150 @@ def updateNetworkCampusGatewayCluster(self, networkId: str, clusterId: str, **kw return self._session.put(metadata, resource, payload) + def deleteNetworkCampusGatewayCluster(self, networkId: str, clusterId: str): + """ + **Delete a cluster** + https://developer.cisco.com/meraki/api-v1/#!delete-network-campus-gateway-cluster + + - networkId (string): Network ID + - clusterId (string): Cluster ID + """ + + metadata = { + "tags": ["campusGateway", "configure", "clusters"], + "operation": "deleteNetworkCampusGatewayCluster", + } + networkId = urllib.parse.quote(str(networkId), safe="") + clusterId = urllib.parse.quote(str(clusterId), safe="") + resource = f"/networks/{networkId}/campusGateway/clusters/{clusterId}" + + return self._session.delete(metadata, resource) + + def getNetworkCampusGatewaySsidMdns(self, networkId: str, number: str): + """ + **List the currently configured mDNS settings for the SSID** + https://developer.cisco.com/meraki/api-v1/#!get-network-campus-gateway-ssid-mdns + + - networkId (string): Network ID + - number (string): Number + """ + + metadata = { + "tags": ["campusGateway", "configure", "ssids", "mdns"], + "operation": "getNetworkCampusGatewaySsidMdns", + } + networkId = urllib.parse.quote(str(networkId), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/networks/{networkId}/campusGateway/ssids/{number}/mdns" + + return self._session.get(metadata, resource) + + def updateNetworkCampusGatewaySsidMdns(self, networkId: str, number: str, **kwargs): + """ + **Update the mDNS gateway settings and rules for a SSID and cluster** + https://developer.cisco.com/meraki/api-v1/#!update-network-campus-gateway-ssid-mdns + + - networkId (string): Network ID + - number (string): Number + - enabled (boolean): If true, mDNS gateway is enabled for this SSID and cluster. + - rules (array): List of mDNS forwarding rules. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["campusGateway", "configure", "ssids", "mdns"], + "operation": "updateNetworkCampusGatewaySsidMdns", + } + networkId = urllib.parse.quote(str(networkId), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/networks/{networkId}/campusGateway/ssids/{number}/mdns" + + body_params = [ + "enabled", + "rules", + ] + 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"updateNetworkCampusGatewaySsidMdns: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getOrganizationCampusGatewayClientsUsageByNetworkByCluster( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns client usage details for campus gateway clusters within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-clients-usage-by-network-by-cluster + + - 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 + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 1 hour and be less than or equal to 7 days. The default is 2 hours. + - networkIds (array): Filter results by a list of network IDs. + - networkGroupIds (array): Limit the results to clients that belong to one of the provided network groups. + - clusterIds (array): Filter results by a list of cluster IDs. + - usageUnits (string): Usage units to use in the response. + """ + + kwargs.update(locals()) + + if "usageUnits" in kwargs: + options = ["GB", "KB", "MB", "TB"] + assert kwargs["usageUnits"] in options, ( + f'''"usageUnits" cannot be "{kwargs["usageUnits"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["campusGateway", "monitor", "clients", "usage", "byNetwork", "byCluster"], + "operation": "getOrganizationCampusGatewayClientsUsageByNetworkByCluster", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clients/usage/byNetwork/byCluster" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "networkGroupIds", + "clusterIds", + "usageUnits", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "networkGroupIds", + "clusterIds", + ] + 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"getOrganizationCampusGatewayClientsUsageByNetworkByCluster: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationCampusGatewayClusters(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Get the details of campus gateway clusters** @@ -143,6 +287,556 @@ def getOrganizationCampusGatewayClusters(self, organizationId: str, total_pages= return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationCampusGatewayClustersFailoverTargets( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the details of a Failover Targets for a Campus Gateway cluster** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-clusters-failover-targets + + - 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 networks. This filter uses multiple exact matches. + - clusterIds (array): Optional parameter to filter clusters. This filter uses multiple exact matches. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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": ["campusGateway", "configure", "clusters", "failover", "targets"], + "operation": "getOrganizationCampusGatewayClustersFailoverTargets", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/failover/targets" + + query_params = [ + "networkIds", + "clusterIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "clusterIds", + ] + 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"getOrganizationCampusGatewayClustersFailoverTargets: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationCampusGatewayClustersFailoverTargetsByCluster( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get available backup cluster targets for campus gateway failover configuration** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-clusters-failover-targets-by-cluster + + - 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): Networks for which backup cluster targets should be gathered. + - clusterIds (array): Cluster IDs to filter backup cluster targets. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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": ["campusGateway", "configure", "clusters", "failover", "targets", "byCluster"], + "operation": "getOrganizationCampusGatewayClustersFailoverTargetsByCluster", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/failover/targets/byCluster" + + query_params = [ + "networkIds", + "clusterIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "clusterIds", + ] + 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"getOrganizationCampusGatewayClustersFailoverTargetsByCluster: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationCampusGatewayClustersNetworksOverviews( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List networks tunneling through Campus Gateway clusters with their AP, ssids and client counts** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-clusters-networks-overviews + + - 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 + - clusterIds (array): Optional parameter to filter by MCG cluster IDs. This filter uses multiple exact matches. + - siteIds (array): Optional parameter to filter by site IDs. This filter uses multiple exact matches. + - networkIds (array): Optional parameter to filter networks. This filter uses multiple exact matches. + - tunnelingSources (array): Optional parameter to filter networks by tunneling source. 'configured' returns networks explicitly set up to tunnel through the campus gateway. 'roaming' returns networks tunneling due to AP roaming or disaster recovery. 'roaming' is only effective when 'clusterIds' is also provided; without 'clusterIds', the filter defaults to configured-only behavior. Defaults to 'configured' if omitted. + - search (string): Optional parameter to filter networks by wireless network name. This filter uses case-insensitive substring matching. + - sortBy (string): Optional parameter to sort results. Default is 'name'. Use 'siteName' to sort by site name. + - sortOrder (string): Optional parameter to specify sort direction. Default is 'asc'. + - 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. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["clients", "clusterId", "connections", "name", "networkId", "siteName", "ssids"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["campusGateway", "configure", "clusters", "networks", "overviews"], + "operation": "getOrganizationCampusGatewayClustersNetworksOverviews", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/networks/overviews" + + query_params = [ + "clusterIds", + "siteIds", + "networkIds", + "tunnelingSources", + "search", + "sortBy", + "sortOrder", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "clusterIds", + "siteIds", + "networkIds", + "tunnelingSources", + ] + 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"getOrganizationCampusGatewayClustersNetworksOverviews: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def provisionOrganizationCampusGatewayClusters( + self, + organizationId: str, + clusterId: str, + network: dict, + name: str, + uplinks: list, + tunnels: list, + nameservers: dict, + portChannels: list, + **kwargs, + ): + """ + **Provisions a cluster,adds campus gateways to it and associate/dissociate failover targets.** + https://developer.cisco.com/meraki/api-v1/#!provision-organization-campus-gateway-clusters + + - organizationId (string): Organization ID + - clusterId (string): ID of the cluster to be provisioned + - network (object): Network to be provisioned + - name (string): Name of the new cluster + - uplinks (array): Uplink interface settings of the cluster + - tunnels (array): Tunnel interface settings of the cluster: Reuse uplink or specify tunnel interface + - nameservers (object): Nameservers of the cluster + - portChannels (array): Port channel settings of the cluster + - devices (array): Devices to be added to the cluster + - failover (object): Failover targets for the cluster + - notes (string): Notes about cluster with max size of 511 characters allowed + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["campusGateway", "configure", "clusters"], + "operation": "provisionOrganizationCampusGatewayClusters", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/provision" + + body_params = [ + "clusterId", + "network", + "name", + "uplinks", + "tunnels", + "nameservers", + "portChannels", + "devices", + "failover", + "notes", + ] + 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"provisionOrganizationCampusGatewayClusters: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationCampusGatewayClustersSsids(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List SSIDs tunneling through Campus Gateway clusters** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-clusters-ssids + + - 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 + - clusterIds (array): Optional parameter to filter by MCG cluster IDs. This filter uses multiple exact matches. + - networkIds (array): Optional parameter to filter networks. This filter uses multiple exact matches. + - search (string): Optional parameter to filter SSIDs by name. This filter uses case-insensitive starts with string matching. + - sortBy (string): Optional parameter to sort results. Default is 'networkId'. + - sortOrder (string): Optional parameter to specify sort direction. Default is 'asc'. + - 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. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["clusterId", "name", "networkId", "ssidId"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["campusGateway", "configure", "clusters", "ssids"], + "operation": "getOrganizationCampusGatewayClustersSsids", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/ssids" + + query_params = [ + "clusterIds", + "networkIds", + "search", + "sortBy", + "sortOrder", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "clusterIds", + "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"getOrganizationCampusGatewayClustersSsids: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationCampusGatewayClustersTunnelingByClusterByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List all the MCG cluster-network tunnel settings** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-clusters-tunneling-by-cluster-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 + - clusterIds (array): Optional parameter to filter MCG clusters. This filter uses multiple exact matches + - dataEncryptionEnabled (boolean): Optional parameter to filter cluster-network tunnel settings by data encryption configuration + - networkIds (array): Optional parameter to filter networks. This filter uses multiple exact matches + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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": ["campusGateway", "configure", "clusters", "tunneling", "byCluster", "byNetwork"], + "operation": "getOrganizationCampusGatewayClustersTunnelingByClusterByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/tunneling/byCluster/byNetwork" + + query_params = [ + "clusterIds", + "dataEncryptionEnabled", + "networkIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "clusterIds", + "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"getOrganizationCampusGatewayClustersTunnelingByClusterByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def batchOrganizationCampusGatewayClustersTunnelingByClusterByNetworkUpdate(self, organizationId: str, **kwargs): + """ + **Update MCG cluster-network tunnel settings for multiple networks** + https://developer.cisco.com/meraki/api-v1/#!batch-organization-campus-gateway-clusters-tunneling-by-cluster-by-network-update + + - organizationId (string): Organization ID + - items (array): MCG cluster-network tunnel settings + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["campusGateway", "configure", "clusters", "tunneling", "byCluster", "byNetwork"], + "operation": "batchOrganizationCampusGatewayClustersTunnelingByClusterByNetworkUpdate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/tunneling/byCluster/byNetwork/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"batchOrganizationCampusGatewayClustersTunnelingByClusterByNetworkUpdate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationCampusGatewayConnections(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the details of APs tunneling through the Campus Gateway clusters** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-connections + + - 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 networks. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter connections(APs) by its own serials. This filter uses multiple exact matches. + - campusGatewaySerials (array): Optional parameter to filter connections(APs) by MCG serials. This filter uses multiple exact matches. + - campusGatewayClusterIds (array): Optional parameter to filter connections(APs) by MCG cluster IDs. This filter uses multiple exact matches. + - campusGatewayTunnelStatuses (array): Optional parameter to filter connections(APs) by tunnel statuses. This filter uses multiple exact matches. + - search (string): Optional parameter to filter connections(APs) on AP name, serial, MAC address, network name, or interface IP address. This filter uses partial string matching (ILIKE). + - models (array): Optional parameter to filter connections(APs) by device model names. This filter uses multiple exact matches. + - dataEncryptionStatuses (array): Optional parameter to filter connections(APs) by data encryption status. This filter uses multiple exact matches. + - sortBy (string): Optional parameter to sort results. Available options: name, serial, status, interfaces, clients, dataEncryption, networkName. Default is 'serial'. + - sortOrder (string): Optional parameter to specify sort direction. Default is 'asc'. + - 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. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["clients", "dataEncryption", "interfaces", "name", "networkName", "serial", "status"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["campusGateway", "configure", "connections"], + "operation": "getOrganizationCampusGatewayConnections", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/connections" + + query_params = [ + "networkIds", + "serials", + "campusGatewaySerials", + "campusGatewayClusterIds", + "campusGatewayTunnelStatuses", + "search", + "models", + "dataEncryptionStatuses", + "sortBy", + "sortOrder", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "campusGatewaySerials", + "campusGatewayClusterIds", + "campusGatewayTunnelStatuses", + "models", + "dataEncryptionStatuses", + ] + 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"getOrganizationCampusGatewayConnections: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationCampusGatewayConnectionsOverview(self, organizationId: str, **kwargs): + """ + **List the count of connections(APs) with tunneling status up and down through the Campus Gateway clusters** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-connections-overview + + - organizationId (string): Organization ID + - networkIds (array): Optional parameter to filter networks. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter connections(APs) by its own serials. This filter uses multiple exact matches. + - campusGatewaySerials (array): Optional parameter to filter connections(APs) by Campus Gateway serials. This filter uses multiple exact matches. + - campusGatewayClusterIds (array): Optional parameter to filter connections(APs) by Campus Gateway cluster IDs. This filter uses multiple exact matches. + - campusGatewayTunnelStatuses (array): Optional parameter to filter connections(APs) by tunnel statuses. This filter uses multiple exact matches. + - search (string): Optional setting that lets you filter access points (APs) by name, serial number, MAC address, network name, or interface IP address. The filter matches partial text, not just exact values (uses ILIKE matching). + - models (array): Optional parameter to filter connections(APs) by device model names. This filter uses multiple exact matches. + - dataEncryptionStatuses (array): Optional parameter to filter connections(APs) by data encryption status. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["campusGateway", "configure", "connections", "overview"], + "operation": "getOrganizationCampusGatewayConnectionsOverview", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/connections/overview" + + query_params = [ + "networkIds", + "serials", + "campusGatewaySerials", + "campusGatewayClusterIds", + "campusGatewayTunnelStatuses", + "search", + "models", + "dataEncryptionStatuses", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "campusGatewaySerials", + "campusGatewayClusterIds", + "campusGatewayTunnelStatuses", + "models", + "dataEncryptionStatuses", + ] + 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"getOrganizationCampusGatewayConnectionsOverview: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + def getOrganizationCampusGatewayDevicesUplinksLocalOverridesByDevice( self, organizationId: str, total_pages=1, direction="next", **kwargs ): diff --git a/meraki/aio/api/devices.py b/meraki/aio/api/devices.py index 0b12c40..1b77816 100644 --- a/meraki/aio/api/devices.py +++ b/meraki/aio/api/devices.py @@ -232,6 +232,72 @@ def createDeviceCellularUplinksBandsMasksUpdate(self, serial: str, slot: str, ty return self._session.post(metadata, resource, payload) + def updateDeviceCliConfigFavorite(self, serial: str, configId: str, favorite: bool, **kwargs): + """ + **Favorite or unfavorite a configuration for an IOS-XE device** + https://developer.cisco.com/meraki/api-v1/#!update-device-cli-config-favorite + + - serial (string): Serial + - configId (string): Config ID + - favorite (boolean): Whether the config should be favorited + """ + + kwargs = locals() + + metadata = { + "tags": ["devices", "configure", "cli", "configs"], + "operation": "updateDeviceCliConfigFavorite", + } + serial = urllib.parse.quote(str(serial), safe="") + configId = urllib.parse.quote(str(configId), safe="") + resource = f"/devices/{serial}/cli/configs/{configId}" + + body_params = [ + "favorite", + ] + 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"updateDeviceCliConfigFavorite: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def createDeviceConfigRestore(self, serial: str, configId: str, **kwargs): + """ + **Create a restore request for a specific config history record** + https://developer.cisco.com/meraki/api-v1/#!create-device-config-restore + + - serial (string): Serial + - configId (string): Config ID + - scheduledFor (string): Requested ISO 8601 UTC timestamp for when the restore should be scheduled + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "configure", "cli", "configs"], + "operation": "createDeviceConfigRestore", + } + serial = urllib.parse.quote(str(serial), safe="") + configId = urllib.parse.quote(str(configId), safe="") + resource = f"/devices/{serial}/cli/configs/{configId}/restores" + + body_params = [ + "scheduledFor", + ] + 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"createDeviceConfigRestore: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + def getDeviceClients(self, serial: str, **kwargs): """ **List the clients of a device, up to a maximum of a month ago** @@ -265,6 +331,56 @@ def getDeviceClients(self, serial: str, **kwargs): return self._session.get(metadata, resource, params) + def createDeviceLiveToolsAclHitCount(self, serial: str, **kwargs): + """ + **Enqueue a job to perform an ACL hit count for the device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-acl-hit-count + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "aclHitCount"], + "operation": "createDeviceLiveToolsAclHitCount", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/aclHitCount" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsAclHitCount: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsAclHitCount(self, serial: str, id: str): + """ + **Return an ACL hit count live tool job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-acl-hit-count + + - serial (string): Serial + - id (string): ID + """ + + metadata = { + "tags": ["devices", "liveTools", "aclHitCount"], + "operation": "getDeviceLiveToolsAclHitCount", + } + serial = urllib.parse.quote(str(serial), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/devices/{serial}/liveTools/aclHitCount/{id}" + + return self._session.get(metadata, resource) + def createDeviceLiveToolsArpTable(self, serial: str, **kwargs): """ **Enqueue a job to perform a ARP table request for the device** @@ -367,6 +483,75 @@ def getDeviceLiveToolsCableTest(self, serial: str, id: str): return self._session.get(metadata, resource) + def getDeviceLiveToolsClientsDisconnect(self, serial: str, id: str): + """ + **Return a client disconnect job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-clients-disconnect + + - serial (string): Serial + - id (string): ID + """ + + metadata = { + "tags": ["devices", "liveTools", "clients", "disconnect"], + "operation": "getDeviceLiveToolsClientsDisconnect", + } + serial = urllib.parse.quote(str(serial), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/devices/{serial}/liveTools/clients/disconnect/{id}" + + return self._session.get(metadata, resource) + + def createDeviceLiveToolsDhcpLease(self, serial: str, **kwargs): + """ + **Enqueue a job to perform a DHCP leases request for the device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-dhcp-lease + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "dhcpLeases"], + "operation": "createDeviceLiveToolsDhcpLease", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/dhcpLeases" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsDhcpLease: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsDhcpLease(self, serial: str, dhcpLeasesId: str): + """ + **Return a DHCP leases live tool job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-dhcp-lease + + - serial (string): Serial + - dhcpLeasesId (string): Dhcp leases ID + """ + + metadata = { + "tags": ["devices", "liveTools", "dhcpLeases"], + "operation": "getDeviceLiveToolsDhcpLease", + } + serial = urllib.parse.quote(str(serial), safe="") + dhcpLeasesId = urllib.parse.quote(str(dhcpLeasesId), safe="") + resource = f"/devices/{serial}/liveTools/dhcpLeases/{dhcpLeasesId}" + + return self._session.get(metadata, resource) + def createDeviceLiveToolsLedsBlink(self, serial: str, duration: int, **kwargs): """ **Enqueue a job to blink LEDs on a device** @@ -521,6 +706,56 @@ def getDeviceLiveToolsMulticastRouting(self, serial: str, multicastRoutingId: st return self._session.get(metadata, resource) + def createDeviceLiveToolsOspfNeighbor(self, serial: str, **kwargs): + """ + **Enqueue a job to perform a OSPF neighbors request for the device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-ospf-neighbor + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "ospfNeighbors"], + "operation": "createDeviceLiveToolsOspfNeighbor", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/ospfNeighbors" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsOspfNeighbor: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsOspfNeighbor(self, serial: str, ospfNeighborsId: str): + """ + **Return an OSPF neighbors live tool job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-ospf-neighbor + + - serial (string): Serial + - ospfNeighborsId (string): Ospf neighbors ID + """ + + metadata = { + "tags": ["devices", "liveTools", "ospfNeighbors"], + "operation": "getDeviceLiveToolsOspfNeighbor", + } + serial = urllib.parse.quote(str(serial), safe="") + ospfNeighborsId = urllib.parse.quote(str(ospfNeighborsId), safe="") + resource = f"/devices/{serial}/liveTools/ospfNeighbors/{ospfNeighborsId}" + + return self._session.get(metadata, resource) + def createDeviceLiveToolsPing(self, serial: str, target: str, **kwargs): """ **Enqueue a job to ping a target host from the device** @@ -679,6 +914,344 @@ def getDeviceLiveToolsPortsCycle(self, serial: str, id: str): return self._session.get(metadata, resource) + def createDeviceLiveToolsPortsStatus(self, serial: str, **kwargs): + """ + **Enqueue a job to retrieve port status for a device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-ports-status + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "ports", "status"], + "operation": "createDeviceLiveToolsPortsStatus", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/ports/status" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsPortsStatus: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsPortsStatus(self, serial: str, jobId: str): + """ + **Return a port status live tool job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-ports-status + + - serial (string): Serial + - jobId (string): Job ID + """ + + metadata = { + "tags": ["devices", "liveTools", "ports", "status"], + "operation": "getDeviceLiveToolsPortsStatus", + } + serial = urllib.parse.quote(str(serial), safe="") + jobId = urllib.parse.quote(str(jobId), safe="") + resource = f"/devices/{serial}/liveTools/ports/status/{jobId}" + + return self._session.get(metadata, resource) + + def createDeviceLiveToolsReboot(self, serial: str, **kwargs): + """ + **Enqueue a job to reboot a device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-reboot + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "reboot"], + "operation": "createDeviceLiveToolsReboot", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/reboot" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsReboot: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsReboot(self, serial: str, rebootId: str): + """ + **Return a reboot job** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-reboot + + - serial (string): Serial + - rebootId (string): Reboot ID + """ + + metadata = { + "tags": ["devices", "liveTools", "reboot"], + "operation": "getDeviceLiveToolsReboot", + } + serial = urllib.parse.quote(str(serial), safe="") + rebootId = urllib.parse.quote(str(rebootId), safe="") + resource = f"/devices/{serial}/liveTools/reboot/{rebootId}" + + return self._session.get(metadata, resource) + + def createDeviceLiveToolsRoutingTable(self, serial: str, **kwargs): + """ + **Enqueue a job to perform a routing table request for the device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-routing-table + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "routingTable"], + "operation": "createDeviceLiveToolsRoutingTable", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/routingTable" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsRoutingTable: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def createDeviceLiveToolsRoutingTableLookup(self, serial: str, **kwargs): + """ + **Enqueue a job to perform a routing table lookup request for a device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-routing-table-lookup + + - serial (string): Serial + - type (string): The type of route defined + - destination (object): The destination IP or subnet to lookup + - nextHop (object): The next hop to lookup + - vpn (object): VPN related search criteria + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = [ + "BGP", + "EIGRP", + "HSRP", + "IGRP", + "ISIS", + "LISP", + "NAT", + "ND", + "NHRP", + "OMP", + "OSPF", + "RIP", + "default WAN", + "direct", + "static", + ] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["devices", "liveTools", "routingTable", "lookups"], + "operation": "createDeviceLiveToolsRoutingTableLookup", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/routingTable/lookups" + + body_params = [ + "type", + "destination", + "nextHop", + "vpn", + "callback", + ] + 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"createDeviceLiveToolsRoutingTableLookup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsRoutingTableLookup(self, serial: str, id: str): + """ + **Return a routing table live tool lookup job for a device** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-routing-table-lookup + + - serial (string): Serial + - id (string): ID + """ + + metadata = { + "tags": ["devices", "liveTools", "routingTable", "lookups"], + "operation": "getDeviceLiveToolsRoutingTableLookup", + } + serial = urllib.parse.quote(str(serial), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/devices/{serial}/liveTools/routingTable/lookups/{id}" + + return self._session.get(metadata, resource) + + def createDeviceLiveToolsRoutingTableSummary(self, serial: str, **kwargs): + """ + **Enqueue a routing table summary job for a device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-routing-table-summary + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "routingTable", "summaries"], + "operation": "createDeviceLiveToolsRoutingTableSummary", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/routingTable/summaries" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsRoutingTableSummary: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsRoutingTableSummary(self, serial: str, id: str): + """ + **Return the status and result of a routing table summary job** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-routing-table-summary + + - serial (string): Serial + - id (string): ID + """ + + metadata = { + "tags": ["devices", "liveTools", "routingTable", "summaries"], + "operation": "getDeviceLiveToolsRoutingTableSummary", + } + serial = urllib.parse.quote(str(serial), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/devices/{serial}/liveTools/routingTable/summaries/{id}" + + return self._session.get(metadata, resource) + + def getDeviceLiveToolsRoutingTable(self, serial: str, id: str): + """ + **Return an routing table live tool job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-routing-table + + - serial (string): Serial + - id (string): ID + """ + + metadata = { + "tags": ["devices", "liveTools", "routingTable"], + "operation": "getDeviceLiveToolsRoutingTable", + } + serial = urllib.parse.quote(str(serial), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/devices/{serial}/liveTools/routingTable/{id}" + + return self._session.get(metadata, resource) + + def createDeviceLiveToolsSpeedTest(self, serial: str, **kwargs): + """ + **Enqueue a job to execute a speed test from a device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-speed-test + + - serial (string): Serial + - interface (string): Optional filter for a specific WAN interface. Valid interfaces are wan1, wan2, wan3, wan4. Default will return wan1. + """ + + kwargs.update(locals()) + + if "interface" in kwargs: + options = ["wan1", "wan2", "wan3", "wan4"] + assert kwargs["interface"] in options, ( + f'''"interface" cannot be "{kwargs["interface"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["devices", "liveTools", "speedTest"], + "operation": "createDeviceLiveToolsSpeedTest", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/speedTest" + + body_params = [ + "interface", + ] + 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"createDeviceLiveToolsSpeedTest: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsSpeedTest(self, serial: str, id: str): + """ + **Returns a speed test result in megabits per second** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-speed-test + + - serial (string): Serial + - id (string): ID + """ + + metadata = { + "tags": ["devices", "liveTools", "speedTest"], + "operation": "getDeviceLiveToolsSpeedTest", + } + serial = urllib.parse.quote(str(serial), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/devices/{serial}/liveTools/speedTest/{id}" + + return self._session.get(metadata, resource) + def createDeviceLiveToolsThroughputTest(self, serial: str, **kwargs): """ **Enqueue a job to test a device throughput, the test will run for 10 secs to test throughput** @@ -729,6 +1302,110 @@ def getDeviceLiveToolsThroughputTest(self, serial: str, throughputTestId: str): return self._session.get(metadata, resource) + def createDeviceLiveToolsTraceRoute(self, serial: str, target: str, sourceInterface: str, **kwargs): + """ + **Enqueue a job to run trace route in the device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-trace-route + + - serial (string): Serial + - target (string): Destination Host name or address + - sourceInterface (string): Source Interface IP address + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "traceRoute"], + "operation": "createDeviceLiveToolsTraceRoute", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/traceRoute" + + body_params = [ + "target", + "sourceInterface", + "callback", + ] + 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"createDeviceLiveToolsTraceRoute: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsTraceRoute(self, serial: str, traceRouteId: str): + """ + **Return a trace route job** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-trace-route + + - serial (string): Serial + - traceRouteId (string): Trace route ID + """ + + metadata = { + "tags": ["devices", "liveTools", "traceRoute"], + "operation": "getDeviceLiveToolsTraceRoute", + } + serial = urllib.parse.quote(str(serial), safe="") + traceRouteId = urllib.parse.quote(str(traceRouteId), safe="") + resource = f"/devices/{serial}/liveTools/traceRoute/{traceRouteId}" + + return self._session.get(metadata, resource) + + def createDeviceLiveToolsVrrpTable(self, serial: str, **kwargs): + """ + **Enqueue a job to perform a VRRP table request for the device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-vrrp-table + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "vrrpTable"], + "operation": "createDeviceLiveToolsVrrpTable", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/vrrpTable" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsVrrpTable: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsVrrpTable(self, serial: str, vrrpTableId: str): + """ + **Return an VRRP table live tool job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-vrrp-table + + - serial (string): Serial + - vrrpTableId (string): Vrrp table ID + """ + + metadata = { + "tags": ["devices", "liveTools", "vrrpTable"], + "operation": "getDeviceLiveToolsVrrpTable", + } + serial = urllib.parse.quote(str(serial), safe="") + vrrpTableId = urllib.parse.quote(str(vrrpTableId), safe="") + resource = f"/devices/{serial}/liveTools/vrrpTable/{vrrpTableId}" + + return self._session.get(metadata, resource) + def createDeviceLiveToolsWakeOnLan(self, serial: str, vlanId: int, mac: str, **kwargs): """ **Enqueue a job to send a Wake-on-LAN packet from the device** diff --git a/meraki/aio/api/insight.py b/meraki/aio/api/insight.py index 98345d2..eab3e2a 100644 --- a/meraki/aio/api/insight.py +++ b/meraki/aio/api/insight.py @@ -64,6 +64,95 @@ def getOrganizationInsightApplications(self, organizationId: str): return self._session.get(metadata, resource) + def createOrganizationInsightApplication(self, organizationId: str, counterSetRuleId: int, **kwargs): + """ + **Add an Insight tracked application** + https://developer.cisco.com/meraki/api-v1/#!create-organization-insight-application + + - organizationId (string): Organization ID + - counterSetRuleId (integer): The id of the counter set rule + - enableSmartThresholds (boolean): Enable Smart Thresholds + - thresholds (object): Thresholds defined by a user for each application + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["insight", "configure", "applications"], + "operation": "createOrganizationInsightApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/insight/applications" + + body_params = [ + "counterSetRuleId", + "enableSmartThresholds", + "thresholds", + ] + 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"createOrganizationInsightApplication: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateOrganizationInsightApplication(self, organizationId: str, applicationId: str, **kwargs): + """ + **Update an Insight tracked application** + https://developer.cisco.com/meraki/api-v1/#!update-organization-insight-application + + - organizationId (string): Organization ID + - applicationId (string): Application ID + - enableSmartThresholds (boolean): Enable Smart Thresholds + - thresholds (object): Thresholds defined by a user for each application + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["insight", "configure", "applications"], + "operation": "updateOrganizationInsightApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + applicationId = urllib.parse.quote(str(applicationId), safe="") + resource = f"/organizations/{organizationId}/insight/applications/{applicationId}" + + body_params = [ + "enableSmartThresholds", + "thresholds", + ] + 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"updateOrganizationInsightApplication: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationInsightApplication(self, organizationId: str, applicationId: str): + """ + **Delete an Insight tracked application** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-insight-application + + - organizationId (string): Organization ID + - applicationId (string): Application ID + """ + + metadata = { + "tags": ["insight", "configure", "applications"], + "operation": "deleteOrganizationInsightApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + applicationId = urllib.parse.quote(str(applicationId), safe="") + resource = f"/organizations/{organizationId}/insight/applications/{applicationId}" + + return self._session.delete(metadata, resource) + def getOrganizationInsightMonitoredMediaServers(self, organizationId: str): """ **List the monitored media servers for this organization** @@ -194,3 +283,154 @@ def deleteOrganizationInsightMonitoredMediaServer(self, organizationId: str, mon resource = f"/organizations/{organizationId}/insight/monitoredMediaServers/{monitoredMediaServerId}" return self._session.delete(metadata, resource) + + def getOrganizationInsightSpeedTestResults(self, organizationId: str, serials: list, **kwargs): + """ + **List the speed tests for the given devices under this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-insight-speed-test-results + + - organizationId (string): Organization ID + - serials (array): A list of serial numbers. The returned results will be filtered to only include these serials. + - timespan (integer): Amount of seconds ago to query for results. Only include timespan OR both t0 & t1. + - t0 (integer): Start time to query for results in epoch seconds. Only include timespan OR both t0 & t1. + - t1 (integer): End time to query for results in epoch seconds. Only include timespan OR both t0 & t1. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["insight", "configure", "speedTestResults"], + "operation": "getOrganizationInsightSpeedTestResults", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/insight/speedTestResults" + + query_params = [ + "serials", + "timespan", + "t0", + "t1", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationInsightSpeedTestResults: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationInsightWebApps(self, organizationId: str): + """ + **Lists all default web applications rules with counter set rule ids** + https://developer.cisco.com/meraki/api-v1/#!get-organization-insight-web-apps + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["insight", "configure", "webApps"], + "operation": "getOrganizationInsightWebApps", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/insight/webApps" + + return self._session.get(metadata, resource) + + def createOrganizationInsightWebApp(self, organizationId: str, name: str, hostname: str, **kwargs): + """ + **Add a custom web application for Insight to be able to track** + https://developer.cisco.com/meraki/api-v1/#!create-organization-insight-web-app + + - organizationId (string): Organization ID + - name (string): The name of the Web Application + - hostname (string): The hostname of Web Application + """ + + kwargs = locals() + + metadata = { + "tags": ["insight", "configure", "webApps"], + "operation": "createOrganizationInsightWebApp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/insight/webApps" + + body_params = [ + "name", + "hostname", + ] + 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"createOrganizationInsightWebApp: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateOrganizationInsightWebApp(self, organizationId: str, customCounterSetRuleId: str, **kwargs): + """ + **Update a custom web application for Insight to be able to track** + https://developer.cisco.com/meraki/api-v1/#!update-organization-insight-web-app + + - organizationId (string): Organization ID + - customCounterSetRuleId (string): Custom counter set rule ID + - name (string): The name of the Web Application + - hostname (string): The hostname of Web Application + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["insight", "configure", "webApps"], + "operation": "updateOrganizationInsightWebApp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + customCounterSetRuleId = urllib.parse.quote(str(customCounterSetRuleId), safe="") + resource = f"/organizations/{organizationId}/insight/webApps/{customCounterSetRuleId}" + + body_params = [ + "name", + "hostname", + ] + 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"updateOrganizationInsightWebApp: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationInsightWebApp(self, organizationId: str, customCounterSetRuleId: str): + """ + **Delete a custom web application by counter set rule id.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-insight-web-app + + - organizationId (string): Organization ID + - customCounterSetRuleId (string): Custom counter set rule ID + """ + + metadata = { + "tags": ["insight", "configure", "webApps"], + "operation": "deleteOrganizationInsightWebApp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + customCounterSetRuleId = urllib.parse.quote(str(customCounterSetRuleId), safe="") + resource = f"/organizations/{organizationId}/insight/webApps/{customCounterSetRuleId}" + + return self._session.delete(metadata, resource) diff --git a/meraki/aio/api/licensing.py b/meraki/aio/api/licensing.py index 962e765..c8ba0f9 100644 --- a/meraki/aio/api/licensing.py +++ b/meraki/aio/api/licensing.py @@ -45,6 +45,39 @@ def getAdministeredLicensingSubscriptionEntitlements(self, **kwargs): return self._session.get(metadata, resource, params) + def batchAdministeredLicensingSubscriptionNetworksFeatureTiersUpdate(self, **kwargs): + """ + **Batch change networks to their desired feature tier for specified product types** + https://developer.cisco.com/meraki/api-v1/#!batch-administered-licensing-subscription-networks-feature-tiers-update + + - items (array): List of networks and corresponding product types to update. Maximum 500 networks + - isAtomic (boolean): Flag to determine if the operation should act atomically + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["licensing", "configure", "subscription", "featureTiers"], + "operation": "batchAdministeredLicensingSubscriptionNetworksFeatureTiersUpdate", + } + resource = "/administered/licensing/subscription/networks/featureTiers/batchUpdate" + + body_params = [ + "items", + "isAtomic", + ] + 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"batchAdministeredLicensingSubscriptionNetworksFeatureTiersUpdate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + def getAdministeredLicensingSubscriptionSubscriptions( self, organizationIds: list, total_pages=1, direction="next", **kwargs ): diff --git a/meraki/aio/api/nac.py b/meraki/aio/api/nac.py new file mode 100644 index 0000000..0dcad5c --- /dev/null +++ b/meraki/aio/api/nac.py @@ -0,0 +1,1151 @@ +import urllib + + +class AsyncNac: + def __init__(self, session): + super().__init__() + self._session = session + + def getOrganizationNacAuthorizationPolicies(self, organizationId: str, **kwargs): + """ + **Get all nac authorization policies for this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-authorization-policies + + - organizationId (string): Organization ID + - policyIds (array): List of ids for specific authorization policies retrieval + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "authorization", "policies"], + "operation": "getOrganizationNacAuthorizationPolicies", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/authorization/policies" + + query_params = [ + "policyIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "policyIds", + ] + 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"getOrganizationNacAuthorizationPolicies: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def createOrganizationNacAuthorizationPolicyRule( + self, organizationId: str, policyId: str, name: str, rank: int, authorizationProfile: dict, **kwargs + ): + """ + **Create a rule in an authorization policy set of an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-authorization-policy-rule + + - organizationId (string): Organization ID + - policyId (string): Policy ID + - name (string): Name of Authorization rule + - rank (integer): Rank of Authorization rule + - authorizationProfile (object): Authorization profile associated with the rule + - enabled (boolean): Enabled status of authorization rule. Default is False. + - sourcePolicyVersion (string): Source policy version of the policy set containing this rule + - condition (object): Condition of Authorization rule. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "authorization", "policies", "rules"], + "operation": "createOrganizationNacAuthorizationPolicyRule", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyId = urllib.parse.quote(str(policyId), safe="") + resource = f"/organizations/{organizationId}/nac/authorization/policies/{policyId}/rules" + + body_params = [ + "name", + "rank", + "enabled", + "sourcePolicyVersion", + "authorizationProfile", + "condition", + ] + 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"createOrganizationNacAuthorizationPolicyRule: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationNacAuthorizationPolicyRule( + self, organizationId: str, policyId: str, ruleId: str, name: str, rank: int, authorizationProfile: dict, **kwargs + ): + """ + **Update an existing rule of an authorization policy set within an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-nac-authorization-policy-rule + + - organizationId (string): Organization ID + - policyId (string): Policy ID + - ruleId (string): Rule ID + - name (string): Name of Authorization rule + - rank (integer): Rank of Authorization rule + - authorizationProfile (object): Authorization profile associated with the rule + - enabled (boolean): Enabled status of authorization rule. Default is False. + - sourcePolicyVersion (string): Source policy version of the policy set containing this rule + - condition (object): Condition of Authorization rule. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "authorization", "policies", "rules"], + "operation": "updateOrganizationNacAuthorizationPolicyRule", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyId = urllib.parse.quote(str(policyId), safe="") + ruleId = urllib.parse.quote(str(ruleId), safe="") + resource = f"/organizations/{organizationId}/nac/authorization/policies/{policyId}/rules/{ruleId}" + + body_params = [ + "name", + "rank", + "enabled", + "sourcePolicyVersion", + "authorizationProfile", + "condition", + ] + 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"updateOrganizationNacAuthorizationPolicyRule: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationNacAuthorizationPolicyRule(self, organizationId: str, policyId: str, ruleId: str, **kwargs): + """ + **Delete a rule in an authorization policy set of an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-nac-authorization-policy-rule + + - organizationId (string): Organization ID + - policyId (string): Policy ID + - ruleId (string): Rule ID + - sourcePolicyVersion (string): Source policy version of the policy set containing this rule + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "authorization", "policies", "rules"], + "operation": "deleteOrganizationNacAuthorizationPolicyRule", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyId = urllib.parse.quote(str(policyId), safe="") + ruleId = urllib.parse.quote(str(ruleId), safe="") + resource = f"/organizations/{organizationId}/nac/authorization/policies/{policyId}/rules/{ruleId}" + + return self._session.delete(metadata, resource) + + def getOrganizationNacCertificates(self, organizationId: str, **kwargs): + """ + **Gets all certificates for an organization and can filter by certificate status, expiry date and last used date** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-certificates + + - organizationId (string): Organization ID + - status (string): Status Parameter for GetAll request + - expiry (boolean): Boolean indicating whether to filter by expiry in one month + - lastUsed (boolean): Boolean indicating whether to filter by last used in over one month + """ + + kwargs.update(locals()) + + if "status" in kwargs: + options = ["Disabled", "Enabled"] + assert kwargs["status"] in options, ( + f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["nac", "configure", "certificates"], + "operation": "getOrganizationNacCertificates", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates" + + query_params = [ + "status", + "expiry", + "lastUsed", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationNacCertificates: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getOrganizationNacCertificatesAuthoritiesCrls(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get all the organization's CRL.It's possible to filter results by CRL issuers (CA) or CRL's ID - see caIds and crlIds query parameters.This endpoint could be used for 'show' action when you specify a single CRL ID in crlIds parameter** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-certificates-authorities-crls + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 5. + - 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. + - sortBy (string): Optional parameter to specify the field used to sort results. (default: caId) + - sortOrder (string): Optional parameter to specify the sort order. (default: asc) + - crlIds (array): A list of CRL ids. The returned CRLs will be filtered to only include these ids + - caIds (array): When ca Ids are provided, only CRLs associated to the given CA will be returned. Otherwise, all the CRLs created for an organization will be returned. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["caId", "createdAt", "lastUpdatedAt"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["nac", "configure", "certificates", "authorities", "crls"], + "operation": "getOrganizationNacCertificatesAuthoritiesCrls", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortBy", + "sortOrder", + "crlIds", + "caIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "crlIds", + "caIds", + ] + 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"getOrganizationNacCertificatesAuthoritiesCrls: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationNacCertificatesAuthoritiesCrl( + self, organizationId: str, caId: str, content: str, isDelta: bool, **kwargs + ): + """ + **Create a new CRL (either base or delta) for an existing CA** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-certificates-authorities-crl + + - organizationId (string): Organization ID + - caId (string): ID of the CRL issuer + - content (string): CRL content in PEM format + - isDelta (boolean): Whether it's a delta CRL or not + """ + + kwargs = locals() + + metadata = { + "tags": ["nac", "configure", "certificates", "authorities", "crls"], + "operation": "createOrganizationNacCertificatesAuthoritiesCrl", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls" + + body_params = [ + "caId", + "content", + "isDelta", + ] + 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"createOrganizationNacCertificatesAuthoritiesCrl: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationNacCertificatesAuthoritiesCrlsDescriptors( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get all the organization's CRL descriptors (metadata only - revocation list data is excluded)** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-certificates-authorities-crls-descriptors + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 20. + - 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. + - sortBy (string): Optional parameter to specify the field used to sort results. (default: caId) + - sortOrder (string): Optional parameter to specify the sort order. (default: asc) + - caIds (array): When ca Ids are provided, only CRLs associated to the given CA will be returned. Otherwise, all the CRLs created for an organization will be returned. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["caId", "createdAt", "lastUpdatedAt"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["nac", "configure", "certificates", "authorities", "crls", "descriptors"], + "operation": "getOrganizationNacCertificatesAuthoritiesCrlsDescriptors", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls/descriptors" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortBy", + "sortOrder", + "caIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "caIds", + ] + 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"getOrganizationNacCertificatesAuthoritiesCrlsDescriptors: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def deleteOrganizationNacCertificatesAuthoritiesCrl(self, organizationId: str, crlId: str): + """ + **Deletes a whole CRL, including all its deltas (in case of base CRL removal)** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-nac-certificates-authorities-crl + + - organizationId (string): Organization ID + - crlId (string): Crl ID + """ + + metadata = { + "tags": ["nac", "configure", "certificates", "authorities", "crls"], + "operation": "deleteOrganizationNacCertificatesAuthoritiesCrl", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + crlId = urllib.parse.quote(str(crlId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls/{crlId}" + + return self._session.delete(metadata, resource) + + def createOrganizationNacCertificatesImport(self, organizationId: str, contents: str, **kwargs): + """ + **Import certificate for this organization or validate without persisting** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-certificates-import + + - organizationId (string): Organization ID + - contents (string): Certificate content in valid PEM format + - dryRun (boolean): If true, validates the certificate without persisting it + - profile (object): Profile object containing certificate config fields + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "certificates", "import"], + "operation": "createOrganizationNacCertificatesImport", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/import" + + body_params = [ + "contents", + "dryRun", + "profile", + ] + 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"createOrganizationNacCertificatesImport: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationNacCertificatesOverview(self, organizationId: str): + """ + **Get counts of Enabled, Disabled, Expired and Last Used certificates for this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-certificates-overview + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["nac", "configure", "certificates", "overview"], + "operation": "getOrganizationNacCertificatesOverview", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/overview" + + return self._session.get(metadata, resource) + + def updateOrganizationNacCertificate(self, organizationId: str, certificateId: str, profile: dict, **kwargs): + """ + **Update certificate configuration by certificateId for this organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-nac-certificate + + - organizationId (string): Organization ID + - certificateId (string): Certificate ID + - profile (object): Profile object containing certificate config fields + """ + + kwargs = locals() + + metadata = { + "tags": ["nac", "configure", "certificates"], + "operation": "updateOrganizationNacCertificate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + certificateId = urllib.parse.quote(str(certificateId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/{certificateId}" + + body_params = [ + "profile", + ] + 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"updateOrganizationNacCertificate: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getOrganizationNacClients(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get all known clients for the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-clients + + - 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 + - sortOrder (string): Query parameter for specifying the direction of sorting to use for the given sortKey. + - sortKey (string): Query parameter to sort the clients by the value of the specified key. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - search (string): Optional parameter to fuzzy search on clients. + - clientIds (array): List of ids for specific client retrieval + - groupIds (array): List of group ids for client retrieval by group + - lastNetworkName (array): List of network names for client retrieval by last login network name + - ssid (array): List of SSID's to filter + - classification (object): Classification filters for client retrieval + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ASC", "DESC"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + if "sortKey" in kwargs: + options = ["mac"] + assert kwargs["sortKey"] in options, ( + f'''"sortKey" cannot be "{kwargs["sortKey"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["nac", "configure", "clients"], + "operation": "getOrganizationNacClients", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients" + + query_params = [ + "sortOrder", + "sortKey", + "perPage", + "startingAfter", + "endingBefore", + "search", + "clientIds", + "groupIds", + "lastNetworkName", + "ssid", + "classification", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "clientIds", + "groupIds", + "lastNetworkName", + "ssid", + ] + 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"getOrganizationNacClients: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationNacClient(self, organizationId: str, mac: str, **kwargs): + """ + **Create a client for the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-client + + - organizationId (string): Organization ID + - mac (string): The MAC address of the client + - type (string): Type describes if the network client belongs to an individual user or corporate + - owner (string): The username of the owner of the client + - description (string): User provided description for the client + - uuid (string): Universally unique identifier of the client + - userDetails (array): List of users of this network client + - oui (object): Organizationally unique identifier assigned to a vendor of the client + - groups (array): List of group members associated with the client + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = ["BYOD", "corporate"] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["nac", "configure", "clients"], + "operation": "createOrganizationNacClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients" + + body_params = [ + "type", + "owner", + "mac", + "description", + "uuid", + "userDetails", + "oui", + "groups", + ] + 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"createOrganizationNacClient: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def bulkOrganizationNacClientsDelete(self, organizationId: str, clientIds: list, **kwargs): + """ + **Delete existing client(s) for the organization** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-nac-clients-delete + + - organizationId (string): Organization ID + - clientIds (array): List of ids for specific client retrieval + """ + + kwargs = locals() + + metadata = { + "tags": ["nac", "configure", "clients"], + "operation": "bulkOrganizationNacClientsDelete", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/bulkDelete" + + body_params = [ + "clientIds", + ] + 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"bulkOrganizationNacClientsDelete: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def createOrganizationNacClientsBulkEdit(self, organizationId: str, clientIds: list, **kwargs): + """ + **Bulk Update of existing clients for the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-clients-bulk-edit + + - organizationId (string): Organization ID + - clientIds (array): List of clients ids to apply the bulk edit operation on. + - description (string): User provided description to be applied on the list of clients provided + - groups (object): Client group information to be applied on the list of clients provided + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "clients", "bulkEdit"], + "operation": "createOrganizationNacClientsBulkEdit", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/bulkEdit" + + body_params = [ + "clientIds", + "description", + "groups", + ] + 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"createOrganizationNacClientsBulkEdit: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def createOrganizationNacClientsBulkUpload( + self, organizationId: str, contents: str, updateClients: bool, createClientGroups: bool, **kwargs + ): + """ + **Bulk upload of clients, client groups and their associations for the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-clients-bulk-upload + + - organizationId (string): Organization ID + - contents (string): CSV file content in Base64 encoded string format + - updateClients (boolean): The updateClients indicates whether existing clients must be updated with new data from the CSV + - createClientGroups (boolean): The createClientGroups indicates whether new client groups must be created or not + """ + + kwargs = locals() + + metadata = { + "tags": ["nac", "configure", "clients", "bulkUpload"], + "operation": "createOrganizationNacClientsBulkUpload", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/bulkUpload" + + body_params = [ + "contents", + "updateClients", + "createClientGroups", + ] + 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"createOrganizationNacClientsBulkUpload: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationNacClientsGroups(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get all known client groups for the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-clients-groups + + - 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 + - sortOrder (string): Query parameter for specifying the direction of sorting to use for the given sortKey. + - sortKey (string): Query parameter to sort the client groups by the value of the specified key. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - search (string): Optional parameter to fuzzy search on client groups. + - groupIds (array): List of ids for specific group retrieval + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ASC", "DESC"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + if "sortKey" in kwargs: + options = ["name"] + assert kwargs["sortKey"] in options, ( + f'''"sortKey" cannot be "{kwargs["sortKey"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["nac", "configure", "clients", "groups"], + "operation": "getOrganizationNacClientsGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/groups" + + query_params = [ + "sortOrder", + "sortKey", + "perPage", + "startingAfter", + "endingBefore", + "search", + "groupIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "groupIds", + ] + 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"getOrganizationNacClientsGroups: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationNacClientsGroup(self, organizationId: str, name: str, **kwargs): + """ + **Create a client group for the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-clients-group + + - organizationId (string): Organization ID + - name (string): The name of the group for access control model + - description (string): User provided description of the group + - members (array): List of client members associated with the group + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "clients", "groups"], + "operation": "createOrganizationNacClientsGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/groups" + + body_params = [ + "name", + "description", + "members", + ] + 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"createOrganizationNacClientsGroup: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateOrganizationNacClientsGroup(self, organizationId: str, groupId: str, **kwargs): + """ + **Update an existing client group for the organization with bulk member operations** + https://developer.cisco.com/meraki/api-v1/#!update-organization-nac-clients-group + + - organizationId (string): Organization ID + - groupId (string): Group ID + - name (string): The name of the group for access control model + - description (string): User provided description of the group + - members (object): Bulk member operations with addList/removeList arrays + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "clients", "groups"], + "operation": "updateOrganizationNacClientsGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + groupId = urllib.parse.quote(str(groupId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/groups/{groupId}" + + body_params = [ + "name", + "description", + "members", + ] + 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"updateOrganizationNacClientsGroup: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationNacClientsGroup(self, organizationId: str, groupId: str): + """ + **Delete an existing client group for the organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-nac-clients-group + + - organizationId (string): Organization ID + - groupId (string): Group ID + """ + + metadata = { + "tags": ["nac", "configure", "clients", "groups"], + "operation": "deleteOrganizationNacClientsGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + groupId = urllib.parse.quote(str(groupId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/groups/{groupId}" + + return self._session.delete(metadata, resource) + + def getOrganizationNacClientsOverview(self, organizationId: str): + """ + **Get overview data for all known clients for the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-clients-overview + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["nac", "configure", "clients", "overview"], + "operation": "getOrganizationNacClientsOverview", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/overview" + + return self._session.get(metadata, resource) + + def updateOrganizationNacClient(self, organizationId: str, clientId: str, mac: str, **kwargs): + """ + **Update an existing client for the organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-nac-client + + - organizationId (string): Organization ID + - clientId (string): Client ID + - mac (string): The MAC address of the client + - type (string): Type describes if the network client belongs to an individual user or corporate + - owner (string): The username of the owner of the client + - description (string): User provided description for the client + - uuid (string): Universally unique identifier of the client + - userDetails (array): List of users of this network client + - oui (object): Organizationally unique identifier assigned to a vendor of the client + - groups (object): Client group membership changes + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = ["BYOD", "corporate"] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["nac", "configure", "clients"], + "operation": "updateOrganizationNacClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + clientId = urllib.parse.quote(str(clientId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/{clientId}" + + body_params = [ + "type", + "owner", + "mac", + "description", + "uuid", + "userDetails", + "oui", + "groups", + ] + 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"updateOrganizationNacClient: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getOrganizationNacDictionaries(self, organizationId: str): + """ + **Get all NAC dictionaries** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-dictionaries + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["nac", "configure", "dictionaries"], + "operation": "getOrganizationNacDictionaries", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/dictionaries" + + return self._session.get(metadata, resource) + + def getOrganizationNacDictionaryAttributes(self, organizationId: str, dictionaryId: str, **kwargs): + """ + **Get all attributes by dictionary ID** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-dictionary-attributes + + - organizationId (string): Organization ID + - dictionaryId (string): Dictionary ID + - networkIds (array): An optional list of network IDs to filter the 'enum' field. Only enum values applicable to the specified networks will be returned. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "dictionaries", "attributes"], + "operation": "getOrganizationNacDictionaryAttributes", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + dictionaryId = urllib.parse.quote(str(dictionaryId), safe="") + resource = f"/organizations/{organizationId}/nac/dictionaries/{dictionaryId}/attributes" + + query_params = [ + "networkIds", + ] + 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"getOrganizationNacDictionaryAttributes: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationNacDictionaryAttributeValues( + self, organizationId: str, dictionaryId: str, attributeName: str, **kwargs + ): + """ + **Search allowed values for a dictionary attribute** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-dictionary-attribute-values + + - organizationId (string): Organization ID + - dictionaryId (string): Dictionary ID + - attributeName (string): Attribute name + - search (string): Optional search string for contains-match filtering of allowed values + - networkIds (array): An optional list of network IDs to filter the allowed values. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "dictionaries", "attributes", "values"], + "operation": "getOrganizationNacDictionaryAttributeValues", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + dictionaryId = urllib.parse.quote(str(dictionaryId), safe="") + attributeName = urllib.parse.quote(str(attributeName), safe="") + resource = f"/organizations/{organizationId}/nac/dictionaries/{dictionaryId}/attributes/{attributeName}/values" + + query_params = [ + "search", + "networkIds", + ] + 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"getOrganizationNacDictionaryAttributeValues: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationNacLicenseUsage(self, organizationId: str, startDate: str, **kwargs): + """ + **Returns license usage data for a specific organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-license-usage + + - organizationId (string): Organization ID + - startDate (string): Start date for the usage data in UTC timezone + - endDate (string): End date for the usage data in UTC timezone + - networkIds (array): List of locale and node group ids + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "license", "usage"], + "operation": "getOrganizationNacLicenseUsage", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/license/usage" + + query_params = [ + "startDate", + "endDate", + "networkIds", + ] + 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"getOrganizationNacLicenseUsage: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getOrganizationNacSessionsHistory(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the NAC Sessions for this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-sessions-history + + - 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 + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 31 days. The default is 1 hour. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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": ["nac", "configure", "sessions", "history"], + "operation": "getOrganizationNacSessionsHistory", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/sessions/history" + + query_params = [ + "t0", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationNacSessionsHistory: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationNacSessionDetails(self, organizationId: str, sessionId: str): + """ + **Return the details of selected NAC Sessions** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-session-details + + - organizationId (string): Organization ID + - sessionId (string): Session ID + """ + + metadata = { + "tags": ["nac", "configure", "sessions", "details"], + "operation": "getOrganizationNacSessionDetails", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + sessionId = urllib.parse.quote(str(sessionId), safe="") + resource = f"/organizations/{organizationId}/nac/sessions/{sessionId}/details" + + return self._session.get(metadata, resource) diff --git a/meraki/aio/api/networks.py b/meraki/aio/api/networks.py index ffa0e04..e995d1d 100644 --- a/meraki/aio/api/networks.py +++ b/meraki/aio/api/networks.py @@ -855,6 +855,23 @@ def vmxNetworkDevicesClaim(self, networkId: str, size: str, **kwargs): return self._session.post(metadata, resource, payload) + def getNetworkDevicesJson(self, networkId: str): + """ + **Extraction of the legacy nodes JSON endpoint for a network** + https://developer.cisco.com/meraki/api-v1/#!get-network-devices-json + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["networks", "configure", "devices", "json"], + "operation": "getNetworkDevicesJson", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/devices/json" + + return self._session.get(metadata, resource) + def removeNetworkDevices(self, networkId: str, serial: str, **kwargs): """ **Remove a single device** @@ -886,6 +903,37 @@ def removeNetworkDevices(self, networkId: str, serial: str, **kwargs): return self._session.post(metadata, resource, payload) + def updateNetworkDevicesSyslogServers(self, networkId: str, servers: list, **kwargs): + """ + **Updates the syslog servers configuration for a network.** + https://developer.cisco.com/meraki/api-v1/#!update-network-devices-syslog-servers + + - networkId (string): Network ID + - servers (array): A list of the syslog servers for this network; suggested maximum array size is 10 + """ + + kwargs = locals() + + metadata = { + "tags": ["networks", "configure", "devices", "syslog", "servers"], + "operation": "updateNetworkDevicesSyslogServers", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/devices/syslog/servers" + + body_params = [ + "servers", + ] + 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"updateNetworkDevicesSyslogServers: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkEvents(self, networkId: str, total_pages=1, direction="prev", event_log_end_time=None, **kwargs): """ **List the events for the network** @@ -1455,6 +1503,7 @@ def createNetworkFloorPlan(self, networkId: str, name: str, imageContents: str, - topLeftCorner (object): The longitude and latitude of the top left corner of your floor plan. - topRightCorner (object): The longitude and latitude of the top right corner of your floor plan. - floorNumber (number): The floor number of the floors within the building + - buildingId (string): The ID of the building that this floor belongs to. """ kwargs.update(locals()) @@ -1474,6 +1523,7 @@ def createNetworkFloorPlan(self, networkId: str, name: str, imageContents: str, "topLeftCorner", "topRightCorner", "floorNumber", + "buildingId", "imageContents", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1670,6 +1720,7 @@ def updateNetworkFloorPlan(self, networkId: str, floorPlanId: str, **kwargs): - topLeftCorner (object): The longitude and latitude of the top left corner of your floor plan. - topRightCorner (object): The longitude and latitude of the top right corner of your floor plan. - floorNumber (number): The floor number of the floors within the building + - buildingId (string): The ID of the building that this floor belongs to. - imageContents (string): The file contents (a base 64 encoded string) of your new image. Supported formats are PNG, GIF, and JPG. Note that all images are saved as PNG files, regardless of the format they are uploaded in. If you upload a new image, and you do NOT specify any new geolocation fields ('center, 'topLeftCorner', etc), the floor plan will be recentered with no rotation in order to maintain the aspect ratio of your new image. """ @@ -1691,6 +1742,7 @@ def updateNetworkFloorPlan(self, networkId: str, floorPlanId: str, **kwargs): "topLeftCorner", "topRightCorner", "floorNumber", + "buildingId", "imageContents", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1918,6 +1970,106 @@ def getNetworkHealthAlerts(self, networkId: str): return self._session.get(metadata, resource) + def getNetworkLocationScanning(self, networkId: str): + """ + **Return scanning API settings** + https://developer.cisco.com/meraki/api-v1/#!get-network-location-scanning + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["networks", "configure", "locationScanning"], + "operation": "getNetworkLocationScanning", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/locationScanning" + + return self._session.get(metadata, resource) + + def updateNetworkLocationScanning(self, networkId: str, **kwargs): + """ + **Change scanning API settings** + https://developer.cisco.com/meraki/api-v1/#!update-network-location-scanning + + - networkId (string): Network ID + - analyticsEnabled (boolean): Collect location and scanning analytics + - scanningApiEnabled (boolean): Enable push API for scanning events, analytics must be enabled + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["networks", "configure", "locationScanning"], + "operation": "updateNetworkLocationScanning", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/locationScanning" + + body_params = [ + "analyticsEnabled", + "scanningApiEnabled", + ] + 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"updateNetworkLocationScanning: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getNetworkLocationScanningHttpServers(self, networkId: str): + """ + **Return list of scanning API receivers** + https://developer.cisco.com/meraki/api-v1/#!get-network-location-scanning-http-servers + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["networks", "configure", "locationScanning", "httpServers"], + "operation": "getNetworkLocationScanningHttpServers", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/locationScanning/httpServers" + + return self._session.get(metadata, resource) + + def updateNetworkLocationScanningHttpServers(self, networkId: str, endpoints: list, **kwargs): + """ + **Set the list of scanning API receivers** + https://developer.cisco.com/meraki/api-v1/#!update-network-location-scanning-http-servers + + - networkId (string): Network ID + - endpoints (array): A set of http server configurations + """ + + kwargs = locals() + + metadata = { + "tags": ["networks", "configure", "locationScanning", "httpServers"], + "operation": "updateNetworkLocationScanningHttpServers", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/locationScanning/httpServers" + + body_params = [ + "endpoints", + ] + 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"updateNetworkLocationScanningHttpServers: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + def getNetworkMerakiAuthUsers(self, networkId: str): """ **List the authorized users configured under Meraki Authentication for a network (splash guest or RADIUS users for a wireless network, or client VPN users for a MX network)** @@ -2075,14 +2227,17 @@ def updateNetworkMerakiAuthUser(self, networkId: str, merakiAuthUserId: str, **k return self._session.put(metadata, resource, payload) - def getNetworkMqttBrokers(self, networkId: str): + def getNetworkMqttBrokers(self, networkId: str, **kwargs): """ **List the MQTT brokers for this network** https://developer.cisco.com/meraki/api-v1/#!get-network-mqtt-brokers - networkId (string): Network ID + - productTypes (array): Optional parameter to filter MQTT brokers by product type. If multiple types are provided, the query will return brokers that match any of the provided types. """ + kwargs.update(locals()) + metadata = { "tags": ["networks", "configure", "mqttBrokers"], "operation": "getNetworkMqttBrokers", @@ -2090,7 +2245,26 @@ def getNetworkMqttBrokers(self, networkId: str): networkId = urllib.parse.quote(str(networkId), safe="") resource = f"/networks/{networkId}/mqttBrokers" - return self._session.get(metadata, resource) + query_params = [ + "productTypes", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "productTypes", + ] + 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"getNetworkMqttBrokers: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) def createNetworkMqttBroker(self, networkId: str, name: str, host: str, port: int, **kwargs): """ @@ -2103,10 +2277,17 @@ def createNetworkMqttBroker(self, networkId: str, name: str, host: str, port: in - port (integer): Host port though which the MQTT broker can be reached. - security (object): Security settings of the MQTT broker. - authentication (object): Authentication settings of the MQTT broker + - productType (string): The product type for which the MQTT broker is being created. """ kwargs.update(locals()) + if "productType" in kwargs: + options = ["camera", "wireless"] + assert kwargs["productType"] in options, ( + f'''"productType" cannot be "{kwargs["productType"]}", & must be set to one of: {options}''' + ) + metadata = { "tags": ["networks", "configure", "mqttBrokers"], "operation": "createNetworkMqttBroker", @@ -2120,6 +2301,7 @@ def createNetworkMqttBroker(self, networkId: str, name: str, host: str, port: in "port", "security", "authentication", + "productType", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2606,6 +2788,7 @@ def updateNetworkSettings(self, networkId: str, **kwargs): - remoteStatusPageEnabled (boolean): Enables / disables access to the device status page (http://[device's LAN IP]). Optional. Can only be set if localStatusPageEnabled is set to true - localStatusPage (object): A hash of Local Status page(s)' authentication options applied to the Network. - securePort (object): A hash of SecureConnect options applied to the Network. + - fips (object): A hash of FIPS options applied to the Network - namedVlans (object): A hash of Named VLANs options applied to the Network. """ @@ -2623,6 +2806,7 @@ def updateNetworkSettings(self, networkId: str, **kwargs): "remoteStatusPageEnabled", "localStatusPage", "securePort", + "fips", "namedVlans", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2635,6 +2819,93 @@ def updateNetworkSettings(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) + def createNetworkSitesBuilding(self, networkId: str, name: str, **kwargs): + """ + **Create a new building** + https://developer.cisco.com/meraki/api-v1/#!create-network-sites-building + + - networkId (string): Network ID + - name (string): The name of the building + - floors (array): The floors of the building + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["networks", "configure", "sites", "buildings"], + "operation": "createNetworkSitesBuilding", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sites/buildings" + + body_params = [ + "name", + "floors", + ] + 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"createNetworkSitesBuilding: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def deleteNetworkSitesBuilding(self, networkId: str, buildingId: str): + """ + **Delete a building** + https://developer.cisco.com/meraki/api-v1/#!delete-network-sites-building + + - networkId (string): Network ID + - buildingId (string): Building ID + """ + + metadata = { + "tags": ["networks", "configure", "sites", "buildings"], + "operation": "deleteNetworkSitesBuilding", + } + networkId = urllib.parse.quote(str(networkId), safe="") + buildingId = urllib.parse.quote(str(buildingId), safe="") + resource = f"/networks/{networkId}/sites/buildings/{buildingId}" + + return self._session.delete(metadata, resource) + + def updateNetworkSitesBuilding(self, networkId: str, buildingId: str, **kwargs): + """ + **Update a building** + https://developer.cisco.com/meraki/api-v1/#!update-network-sites-building + + - networkId (string): Network ID + - buildingId (string): Building ID + - name (string): The name of the building + - floors (array): The floors of the building + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["networks", "configure", "sites", "buildings"], + "operation": "updateNetworkSitesBuilding", + } + networkId = urllib.parse.quote(str(networkId), safe="") + buildingId = urllib.parse.quote(str(buildingId), safe="") + resource = f"/networks/{networkId}/sites/buildings/{buildingId}" + + body_params = [ + "name", + "floors", + ] + 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"updateNetworkSitesBuilding: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkSnmp(self, networkId: str): """ **Return the SNMP settings for a network** @@ -2661,6 +2932,8 @@ def updateNetworkSnmp(self, networkId: str, **kwargs): - access (string): The type of SNMP access. Can be one of 'none' (disabled), 'community' (V1/V2c), or 'users' (V3). - communityString (string): The SNMP community string. Only relevant if 'access' is set to 'community'. - users (array): The list of SNMP users. Only relevant if 'access' is set to 'users'. + - authentication (object): SNMPv3 authentication settings. Only relevant if 'access' is set to 'users'. + - privacy (object): SNMPv3 privacy settings. Only relevant if 'access' is set to 'users'. """ kwargs.update(locals()) @@ -2682,6 +2955,8 @@ def updateNetworkSnmp(self, networkId: str, **kwargs): "access", "communityString", "users", + "authentication", + "privacy", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2693,6 +2968,47 @@ def updateNetworkSnmp(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) + def updateNetworkSnmpTraps(self, networkId: str, **kwargs): + """ + **Update the SNMP trap configuration for the specified network** + https://developer.cisco.com/meraki/api-v1/#!update-network-snmp-traps + + - networkId (string): Network ID + - mode (string): SNMP trap protocol version + - receiver (object): Stores the port and address + - v2 (object): V2 mode + - v3 (object): V3 mode + """ + + kwargs.update(locals()) + + if "mode" in kwargs: + options = ["disabled", "v1/v2c", "v3"] + assert kwargs["mode"] in options, f'''"mode" cannot be "{kwargs["mode"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["networks", "configure", "snmp", "traps"], + "operation": "updateNetworkSnmpTraps", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/snmp/traps" + + body_params = [ + "mode", + "receiver", + "v2", + "v3", + ] + 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"updateNetworkSnmpTraps: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkSplashLoginAttempts(self, networkId: str, **kwargs): """ **List the splash login attempts for a network** @@ -3005,9 +3321,10 @@ 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. """ - kwargs = locals() + kwargs.update(locals()) metadata = { "tags": ["networks", "configure", "vlanProfiles"], @@ -3018,6 +3335,7 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v body_params = [ "name", + "allowedVlans", "vlanNames", "vlanGroups", "iname", @@ -3153,9 +3471,10 @@ 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. """ - kwargs = locals() + kwargs.update(locals()) metadata = { "tags": ["networks", "configure", "vlanProfiles"], @@ -3167,6 +3486,7 @@ def updateNetworkVlanProfile(self, networkId: str, iname: str, name: str, vlanNa body_params = [ "name", + "allowedVlans", "vlanNames", "vlanGroups", ] diff --git a/meraki/aio/api/organizations.py b/meraki/aio/api/organizations.py index 5707656..9be8b7a 100644 --- a/meraki/aio/api/organizations.py +++ b/meraki/aio/api/organizations.py @@ -1081,6 +1081,314 @@ def deleteOrganizationAlertsProfile(self, organizationId: str, alertConfigId: st return self._session.delete(metadata, resource) + def getOrganizationApiPushProfiles(self, organizationId: str, **kwargs): + """ + **List the push profiles in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-push-profiles + + - organizationId (string): Organization ID + - inames (array): Optional parameter to filter the result set by the included set of push profile inames + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "api", "push", "profiles"], + "operation": "getOrganizationApiPushProfiles", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/api/push/profiles" + + query_params = [ + "inames", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "inames", + ] + 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"getOrganizationApiPushProfiles: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def createOrganizationApiPushProfile(self, organizationId: str, iname: str, topic: dict, receiver: dict, **kwargs): + """ + **Create a new push profile** + https://developer.cisco.com/meraki/api-v1/#!create-organization-api-push-profile + + - organizationId (string): Organization ID + - iname (string): Immutable name of the resource. Must be unique within resources of this type. + - topic (object): Push topic + - receiver (object): Push receiver profile + - name (string): Name of push profile + - description (string): Description of push profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "api", "push", "profiles"], + "operation": "createOrganizationApiPushProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/api/push/profiles" + + body_params = [ + "iname", + "name", + "description", + "topic", + "receiver", + ] + 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"createOrganizationApiPushProfile: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateOrganizationApiPushProfile(self, organizationId: str, iname: str, **kwargs): + """ + **Update a push profile** + https://developer.cisco.com/meraki/api-v1/#!update-organization-api-push-profile + + - organizationId (string): Organization ID + - iname (string): Iname + - name (string): Name of push profile + - description (string): Description of push profile + - topic (object): Push topic + - receiver (object): Push receiver profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "api", "push", "profiles"], + "operation": "updateOrganizationApiPushProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + iname = urllib.parse.quote(str(iname), safe="") + resource = f"/organizations/{organizationId}/api/push/profiles/{iname}" + + body_params = [ + "name", + "description", + "topic", + "receiver", + ] + 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"updateOrganizationApiPushProfile: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationApiPushProfile(self, organizationId: str, iname: str): + """ + **Delete a push profile** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-api-push-profile + + - organizationId (string): Organization ID + - iname (string): Iname + """ + + metadata = { + "tags": ["organizations", "configure", "api", "push", "profiles"], + "operation": "deleteOrganizationApiPushProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + iname = urllib.parse.quote(str(iname), safe="") + resource = f"/organizations/{organizationId}/api/push/profiles/{iname}" + + return self._session.delete(metadata, resource) + + def getOrganizationApiPushReceiversProfiles(self, organizationId: str): + """ + **List the push receiver profiles in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-push-receivers-profiles + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "api", "push", "receivers", "profiles"], + "operation": "getOrganizationApiPushReceiversProfiles", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/api/push/receivers/profiles" + + return self._session.get(metadata, resource) + + def createOrganizationApiPushReceiversProfile(self, organizationId: str, iname: str, receiver: dict, **kwargs): + """ + **Create a new push receiver profile** + https://developer.cisco.com/meraki/api-v1/#!create-organization-api-push-receivers-profile + + - organizationId (string): Organization ID + - iname (string): Immutable name of the resource. Must be unique within resources of this type. + - receiver (object): Webhook receiver + - name (string): Name of receiver profile + - description (string): Description of receiver profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "api", "push", "receivers", "profiles"], + "operation": "createOrganizationApiPushReceiversProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/api/push/receivers/profiles" + + body_params = [ + "iname", + "name", + "description", + "receiver", + ] + 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"createOrganizationApiPushReceiversProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def deleteOrganizationApiPushReceiversProfile(self, organizationId: str, iname: str): + """ + **Delete a push receiver profile** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-api-push-receivers-profile + + - organizationId (string): Organization ID + - iname (string): Iname + """ + + metadata = { + "tags": ["organizations", "configure", "api", "push", "receivers", "profiles"], + "operation": "deleteOrganizationApiPushReceiversProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + iname = urllib.parse.quote(str(iname), safe="") + resource = f"/organizations/{organizationId}/api/push/receivers/profiles/{iname}" + + return self._session.delete(metadata, resource) + + def updateOrganizationApiPushReceiversProfile(self, organizationId: str, iname: str, **kwargs): + """ + **Update a push receiver profile** + https://developer.cisco.com/meraki/api-v1/#!update-organization-api-push-receivers-profile + + - organizationId (string): Organization ID + - iname (string): Iname + - name (string): Name of the receiver profile + - description (string): Description of the receiver profile + - receiver (object): API Push Receiver details + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "api", "push", "receivers", "profiles"], + "operation": "updateOrganizationApiPushReceiversProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + iname = urllib.parse.quote(str(iname), safe="") + resource = f"/organizations/{organizationId}/api/push/receivers/profiles/{iname}" + + body_params = [ + "name", + "description", + "receiver", + ] + 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"updateOrganizationApiPushReceiversProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def getOrganizationApiPushTopics(self, organizationId: str): + """ + **List of push topics** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-push-topics + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "api", "push", "topics"], + "operation": "getOrganizationApiPushTopics", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/api/push/topics" + + return self._session.get(metadata, resource) + + def getOrganizationApiRestProvisioningPipelines(self, organizationId: str, **kwargs): + """ + **List pipeline IDs for the organization, with optional status and timespan filtering** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-rest-provisioning-pipelines + + - organizationId (string): Organization ID + - status (string): If provided, filters pipelines by status. If omitted, pipelines of all statuses are returned. + - timespan (integer): Created-at lookback for matching pipelines, in seconds. Defaults to 7200 seconds. The maximum is 30 days. + """ + + kwargs.update(locals()) + + if "status" in kwargs: + options = ["active", "error", "pending", "success"] + assert kwargs["status"] in options, ( + f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "api", "rest", "provisioning", "pipelines"], + "operation": "getOrganizationApiRestProvisioningPipelines", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/api/rest/provisioning/pipelines" + + query_params = [ + "status", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationApiRestProvisioningPipelines: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + def getOrganizationApiRestProvisioningPipelinesJobs(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **List pipeline jobs, with optional status filtering** @@ -1367,67 +1675,215 @@ def getOrganizationApiRequestsOverviewResponseCodesByInterval(self, organization return self._session.get(metadata, resource, params) - def getOrganizationAssuranceAlerts(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationApiRequestsResponseCodesHistoryByAdmin(self, organizationId: str, **kwargs): """ - **Return all health alerts for an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-alerts + **Lists API request response codes and their counts aggregated by admin** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-requests-response-codes-history-by-admin - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 4 - 300. Default is 30. - - 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. - - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'ascending'. - - networkId (string): Optional parameter to filter alerts by network ids. - - severity (string): Optional parameter to filter by severity type. - - types (array): Optional parameter to filter by alert type. - - tsStart (string): Optional parameter to filter by starting timestamp - - tsEnd (string): Optional parameter to filter by end timestamp - - category (string): Optional parameter to filter by category. - - sortBy (string): Optional parameter to set column to sort by. - - serials (array): Optional parameter to filter by primary device serial - - deviceTypes (array): Optional parameter to filter by device types - - deviceTags (array): Optional parameter to filter by device tags - - active (boolean): Optional parameter to filter by active alerts defaults to true - - dismissed (boolean): Optional parameter to filter by dismissed alerts defaults to false - - resolved (boolean): Optional parameter to filter by resolved alerts defaults to false - - suppressAlertsForOfflineNodes (boolean): When set to true the api will only return connectivity alerts for a given device if that device is in an offline state. This only applies to devices. This is ignored when resolved is true. Example: If a Switch has a VLan Mismatch and is Unreachable. only the Unreachable alert will be returned. Defaults to false. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. """ kwargs.update(locals()) - if "sortOrder" in kwargs: - options = ["ascending", "descending"] - assert kwargs["sortOrder"] in options, ( - f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' - ) - if "category" in kwargs: - options = ["configuration", "connectivity", "device_health", "experience_metrics", "insights"] - assert kwargs["category"] in options, ( - f'''"category" cannot be "{kwargs["category"]}", & must be set to one of: {options}''' - ) - if "sortBy" in kwargs: - options = ["category", "dismissedAt", "resolvedAt", "severity", "startedAt"] - assert kwargs["sortBy"] in options, ( - f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["organizations", "monitor", "alerts"], - "operation": "getOrganizationAssuranceAlerts", + "tags": ["organizations", "monitor", "apiRequests", "responseCodes", "history", "byAdmin"], + "operation": "getOrganizationApiRequestsResponseCodesHistoryByAdmin", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/alerts" + resource = f"/organizations/{organizationId}/apiRequests/responseCodes/history/byAdmin" query_params = [ - "perPage", - "startingAfter", - "endingBefore", - "sortOrder", - "networkId", - "severity", - "types", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationApiRequestsResponseCodesHistoryByAdmin: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApiRequestsResponseCodesHistoryByApplication(self, organizationId: str, **kwargs): + """ + **Lists API request response codes and their counts aggregated by application** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-requests-response-codes-history-by-application + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "apiRequests", "responseCodes", "history", "byApplication"], + "operation": "getOrganizationApiRequestsResponseCodesHistoryByApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/apiRequests/responseCodes/history/byApplication" + + query_params = [ + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationApiRequestsResponseCodesHistoryByApplication: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApiRequestsResponseCodesHistoryByOperation(self, organizationId: str, **kwargs): + """ + **Aggregates API usage data by operationId** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-requests-response-codes-history-by-operation + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "apiRequests", "responseCodes", "history", "byOperation"], + "operation": "getOrganizationApiRequestsResponseCodesHistoryByOperation", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/apiRequests/responseCodes/history/byOperation" + + query_params = [ + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationApiRequestsResponseCodesHistoryByOperation: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApiRequestsResponseCodesHistoryBySourceIp(self, organizationId: str, **kwargs): + """ + **Aggregates API usage by source ip** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-requests-response-codes-history-by-source-ip + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "apiRequests", "responseCodes", "history", "bySourceIp"], + "operation": "getOrganizationApiRequestsResponseCodesHistoryBySourceIp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/apiRequests/responseCodes/history/bySourceIp" + + query_params = [ + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationApiRequestsResponseCodesHistoryBySourceIp: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationAssuranceAlerts(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return all health alerts for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-alerts + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 4 - 300. Default is 30. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'ascending'. + - networkId (string): Optional parameter to filter alerts by network ids. + - severity (string): Optional parameter to filter by severity type. + - types (array): Optional parameter to filter by alert type. + - tsStart (string): Optional parameter to filter by starting timestamp + - tsEnd (string): Optional parameter to filter by end timestamp + - category (string): Optional parameter to filter by category. + - sortBy (string): Optional parameter to set column to sort by. + - serials (array): Optional parameter to filter by primary device serial + - deviceTypes (array): Optional parameter to filter by device types + - deviceTags (array): Optional parameter to filter by device tags + - active (boolean): Optional parameter to filter by active alerts defaults to true + - dismissed (boolean): Optional parameter to filter by dismissed alerts defaults to false + - resolved (boolean): Optional parameter to filter by resolved alerts defaults to false + - suppressAlertsForOfflineNodes (boolean): When set to true the api will only return connectivity alerts for a given device if that device is in an offline state. This only applies to devices. This is ignored when resolved is true. Example: If a Switch has a VLan Mismatch and is Unreachable. only the Unreachable alert will be returned. Defaults to false. + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + if "category" in kwargs: + options = ["configuration", "connectivity", "device_health", "experience_metrics", "insights"] + assert kwargs["category"] in options, ( + f'''"category" cannot be "{kwargs["category"]}", & must be set to one of: {options}''' + ) + if "sortBy" in kwargs: + options = ["category", "dismissedAt", "resolvedAt", "severity", "startedAt"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "monitor", "alerts"], + "operation": "getOrganizationAssuranceAlerts", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/alerts" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + "networkId", + "severity", + "types", "tsStart", "tsEnd", "category", @@ -1906,546 +2362,653 @@ def getOrganizationAssuranceAlert(self, organizationId: str, id: str): return self._session.get(metadata, resource) - def getOrganizationBrandingPolicies(self, organizationId: str): + def getOrganizationAssuranceClientsConnectedCountHistory(self, organizationId: str, networkId: str, **kwargs): """ - **List the branding policies of an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-branding-policies + **Return combined wireless and wired connected client counts over time for a network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-clients-connected-count-history - organizationId (string): Organization ID + - networkId (string): Network ID to query. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 8 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600. The default is 600. Interval is calculated if time params are provided. """ + kwargs.update(locals()) + metadata = { - "tags": ["organizations", "configure", "brandingPolicies"], - "operation": "getOrganizationBrandingPolicies", + "tags": ["organizations", "monitor", "clients", "connectedCountHistory"], + "operation": "getOrganizationAssuranceClientsConnectedCountHistory", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies" + resource = f"/organizations/{organizationId}/assurance/clients/connectedCountHistory" - return self._session.get(metadata, resource) + query_params = [ + "networkId", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - def createOrganizationBrandingPolicy(self, organizationId: str, name: str, **kwargs): + if self._session._validate_kwargs: + all_params = query_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"getOrganizationAssuranceClientsConnectedCountHistory: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationAssuranceClientsEvents(self, organizationId: str, clientId: str, networkId: str, **kwargs): """ - **Add a new branding policy to an organization** - https://developer.cisco.com/meraki/api-v1/#!create-organization-branding-policy + **Given a client, get all alerts and events for a given timespan** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-clients-events - - organizationId (string): Organization ID - - name (string): Name of the Dashboard branding policy. - - enabled (boolean): Boolean indicating whether this policy is enabled. - - adminSettings (object): Settings for describing which kinds of admins this policy applies to. - - helpSettings (object): Settings for describing the modifications to various Help page features. Each property in this object accepts one of - 'default or inherit' (do not modify functionality), 'hide' (remove the section from Dashboard), or 'show' (always show - the section on Dashboard). Some properties in this object also accept custom HTML used to replace the section on - Dashboard; see the documentation for each property to see the allowed values. - Each property defaults to 'default or inherit' when not provided. - - customLogo (object): Properties describing the custom logo attached to the branding policy. + - organizationId (string): Organization ID + - clientId (string): ID of client to query + - networkId (string): Network ID where client is connected + - filter (array): Optional parameter to filter by issue + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "brandingPolicies"], - "operation": "createOrganizationBrandingPolicy", + "tags": ["organizations", "configure", "clients", "events"], + "operation": "getOrganizationAssuranceClientsEvents", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies" + resource = f"/organizations/{organizationId}/assurance/clients/events" - body_params = [ - "name", - "enabled", - "adminSettings", - "helpSettings", - "customLogo", + query_params = [ + "filter", + "clientId", + "networkId", + "t0", + "t1", + "timespan", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "filter", + ] + 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 = [] + body_params + 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"createOrganizationBrandingPolicy: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceClientsEvents: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def getOrganizationBrandingPoliciesPriorities(self, organizationId: str): + def getOrganizationAssuranceClientsEventsCorrelated( + self, organizationId: str, clientId: str, category: str, networkId: str, timestamp: str, **kwargs + ): """ - **Return the branding policy IDs of an organization in priority order** - https://developer.cisco.com/meraki/api-v1/#!get-organization-branding-policies-priorities + **Given a client, category, and timespan, return events that have a close connection to each other.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-clients-events-correlated - organizationId (string): Organization ID + - clientId (string): Client ID + - category (string): Category of events + - networkId (string): Network used by the client + - timestamp (string): Timestamp for the event + - lookback (integer): Amount of time in minutes to look back + - lookforward (integer): Amount of time in minutes to look forwards """ + kwargs.update(locals()) + + if "category" in kwargs: + options = ["application", "association", "authentication", "dhcp", "dns"] + assert kwargs["category"] in options, ( + f'''"category" cannot be "{kwargs["category"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["organizations", "configure", "brandingPolicies", "priorities"], - "operation": "getOrganizationBrandingPoliciesPriorities", + "tags": ["organizations", "configure", "clients", "events", "correlated"], + "operation": "getOrganizationAssuranceClientsEventsCorrelated", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies/priorities" + resource = f"/organizations/{organizationId}/assurance/clients/events/correlated" - return self._session.get(metadata, resource) + query_params = [ + "clientId", + "category", + "networkId", + "timestamp", + "lookback", + "lookforward", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - def updateOrganizationBrandingPoliciesPriorities(self, organizationId: str, **kwargs): + if self._session._validate_kwargs: + all_params = query_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"getOrganizationAssuranceClientsEventsCorrelated: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationAssuranceClientsTopologyCurrent(self, organizationId: str, clientId: str, networkId: str, **kwargs): """ - **Update the priority ordering of an organization's branding policies.** - https://developer.cisco.com/meraki/api-v1/#!update-organization-branding-policies-priorities + **Given a client, return current topology** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-clients-topology-current - organizationId (string): Organization ID - - brandingPolicyIds (array): An ordered list of branding policy IDs that determines the priority order of how to apply the policies - + - clientId (string): ID of client to query + - networkId (string): Network ID where client is connected """ - kwargs.update(locals()) + kwargs = locals() metadata = { - "tags": ["organizations", "configure", "brandingPolicies", "priorities"], - "operation": "updateOrganizationBrandingPoliciesPriorities", + "tags": ["organizations", "configure", "clients", "topology", "current"], + "operation": "getOrganizationAssuranceClientsTopologyCurrent", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies/priorities" + resource = f"/organizations/{organizationId}/assurance/clients/topology/current" - body_params = [ - "brandingPolicyIds", + query_params = [ + "clientId", + "networkId", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} if self._session._validate_kwargs: - all_params = [] + body_params + all_params = query_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"updateOrganizationBrandingPoliciesPriorities: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceClientsTopologyCurrent: ignoring unrecognized kwargs: {invalid}" ) - return self._session.put(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def getOrganizationBrandingPolicy(self, organizationId: str, brandingPolicyId: str): + def getOrganizationAssuranceClientsTopologyNew(self, organizationId: str, clientIds: list, networkId: str, **kwargs): """ - **Return a branding policy** - https://developer.cisco.com/meraki/api-v1/#!get-organization-branding-policy + **Given a client, return current topology** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-clients-topology-new - organizationId (string): Organization ID - - brandingPolicyId (string): Branding policy ID - """ - - metadata = { - "tags": ["organizations", "configure", "brandingPolicies"], - "operation": "getOrganizationBrandingPolicy", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - brandingPolicyId = urllib.parse.quote(str(brandingPolicyId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies/{brandingPolicyId}" - - return self._session.get(metadata, resource) - - def updateOrganizationBrandingPolicy(self, organizationId: str, brandingPolicyId: str, name: str, **kwargs): - """ - **Update a branding policy** - https://developer.cisco.com/meraki/api-v1/#!update-organization-branding-policy - - - organizationId (string): Organization ID - - brandingPolicyId (string): Branding policy ID - - name (string): Name of the Dashboard branding policy. - - enabled (boolean): Boolean indicating whether this policy is enabled. - - adminSettings (object): Settings for describing which kinds of admins this policy applies to. - - helpSettings (object): Settings for describing the modifications to various Help page features. Each property in this object accepts one of - 'default or inherit' (do not modify functionality), 'hide' (remove the section from Dashboard), or 'show' (always show - the section on Dashboard). Some properties in this object also accept custom HTML used to replace the section on - Dashboard; see the documentation for each property to see the allowed values. - - - customLogo (object): Properties describing the custom logo attached to the branding policy. + - clientIds (array): List of IDs for client retrieval for a given network. Limited to 1 client for now + - networkId (string): Network ID where client is connected + - timestamp (string): Timestamp for client topology path """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "brandingPolicies"], - "operation": "updateOrganizationBrandingPolicy", + "tags": ["organizations", "configure", "clients", "topology", "new"], + "operation": "getOrganizationAssuranceClientsTopologyNew", } organizationId = urllib.parse.quote(str(organizationId), safe="") - brandingPolicyId = urllib.parse.quote(str(brandingPolicyId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies/{brandingPolicyId}" + resource = f"/organizations/{organizationId}/assurance/clients/topology/new" - body_params = [ - "name", - "enabled", - "adminSettings", - "helpSettings", - "customLogo", + query_params = [ + "clientIds", + "networkId", + "timestamp", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "clientIds", + ] + 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 = [] + body_params + 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"updateOrganizationBrandingPolicy: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceClientsTopologyNew: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.put(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def deleteOrganizationBrandingPolicy(self, organizationId: str, brandingPolicyId: str): + def getOrganizationAssuranceDevicesStatusesOverview(self, organizationId: str, **kwargs): """ - **Delete a branding policy** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-branding-policy + **Returns counts of online, offline, and recovered devices by product type, along with offline intervals for impacted devices in the organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-devices-statuses-overview - organizationId (string): Organization ID - - brandingPolicyId (string): Branding policy ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 7 days. """ + kwargs.update(locals()) + metadata = { - "tags": ["organizations", "configure", "brandingPolicies"], - "operation": "deleteOrganizationBrandingPolicy", + "tags": ["organizations", "monitor", "devices", "statuses", "overview"], + "operation": "getOrganizationAssuranceDevicesStatusesOverview", } organizationId = urllib.parse.quote(str(organizationId), safe="") - brandingPolicyId = urllib.parse.quote(str(brandingPolicyId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies/{brandingPolicyId}" + resource = f"/organizations/{organizationId}/assurance/devices/statuses/overview" - return self._session.delete(metadata, resource) + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - def claimIntoOrganization(self, organizationId: str, **kwargs): + 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"getOrganizationAssuranceDevicesStatusesOverview: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationAssuranceFetchTableQuery(self, organizationId: str, tableName: str, **kwargs): """ - **Claim a list of devices, licenses, and/or orders into an organization inventory** - https://developer.cisco.com/meraki/api-v1/#!claim-into-organization + **Returns the table data for a given timespan** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-fetch-table-query - organizationId (string): Organization ID - - orders (array): The numbers of the orders that should be claimed - - serials (array): The serials of the devices that should be claimed - - licenses (array): The licenses that should be claimed + - tableName (string): The table from which we want to get data + - t0 (string): The beginning of the timespan for the data. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 365 days, 5 hours, 49 minutes, and 12 seconds. The default is 30 days, 10 hours, 29 minutes, and 6 seconds. + - userEmail (string): The user email for whom we want to calculate lookback """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure"], - "operation": "claimIntoOrganization", + "tags": ["organizations", "monitor", "fetchTableQuery"], + "operation": "getOrganizationAssuranceFetchTableQuery", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/claim" + resource = f"/organizations/{organizationId}/assurance/fetchTableQuery" - body_params = [ - "orders", - "serials", - "licenses", + query_params = [ + "t0", + "timespan", + "tableName", + "userEmail", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} if self._session._validate_kwargs: - all_params = [] + body_params + all_params = query_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"claimIntoOrganization: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceFetchTableQuery: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def getOrganizationClientsBandwidthUsageHistory(self, organizationId: str, **kwargs): + def getOrganizationAssuranceNetworkServicesServerHealthByServer(self, organizationId: str, **kwargs): """ - **Return data usage (in megabits per second) over time for all clients in the given organization within a given time range.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-clients-bandwidth-usage-history + **Returns network server health in organization by server.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-network-services-server-health-by-server - organizationId (string): Organization ID - - networkTag (string): Match result to an exact network tag - - deviceTag (string): Match result to an exact device tag - - ssidName (string): Filter results by ssid name - - usageUplink (string): Filter results by usage uplink - - t0 (string): The beginning of the timespan for the data. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 186 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 186 days. The default is 1 day. + - networkIds (array): Filter results for these networks. + - serverTypes (array): Filter results for these server types. + - serverIps (array): Filter results for these server IP addresses. + - ssidNumbers (array): Filter results for these SSID Numbers. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "monitor", "clients", "bandwidthUsageHistory"], - "operation": "getOrganizationClientsBandwidthUsageHistory", + "tags": ["organizations", "configure", "networkServices", "serverHealth", "byServer"], + "operation": "getOrganizationAssuranceNetworkServicesServerHealthByServer", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/clients/bandwidthUsageHistory" + resource = f"/organizations/{organizationId}/assurance/networkServices/serverHealth/byServer" query_params = [ - "networkTag", - "deviceTag", - "ssidName", - "usageUplink", + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", "t0", "t1", "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + array_params = [ + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", + ] + 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 + 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"getOrganizationClientsBandwidthUsageHistory: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceNetworkServicesServerHealthByServer: ignoring unrecognized kwargs: {invalid}" ) return self._session.get(metadata, resource, params) - def getOrganizationClientsOverview(self, organizationId: str, **kwargs): + def getOrganizationAssuranceNetworkServicesServerHealthByServerByInterval(self, organizationId: str, **kwargs): """ - **Return summary information around client data usage (in kb) across the given organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-clients-overview + **Returns network server health in organization by server and by interval.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-network-services-server-health-by-server-by-interval - organizationId (string): Organization ID - - t0 (string): The beginning of the timespan for the data. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + - networkIds (array): Filter results for these networks. + - serverTypes (array): Filter results for these server types. + - serverIps (array): Filter results for these server IP addresses. + - ssidNumbers (array): Filter results for these SSID Numbers. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "monitor", "clients", "overview"], - "operation": "getOrganizationClientsOverview", + "tags": ["organizations", "configure", "networkServices", "serverHealth", "byServer", "byInterval"], + "operation": "getOrganizationAssuranceNetworkServicesServerHealthByServerByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/clients/overview" + resource = f"/organizations/{organizationId}/assurance/networkServices/serverHealth/byServer/byInterval" query_params = [ + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", "t0", "t1", "timespan", + "interval", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + array_params = [ + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", + ] + 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 + 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"getOrganizationClientsOverview: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceNetworkServicesServerHealthByServerByInterval: ignoring unrecognized kwargs: {invalid}" + ) return self._session.get(metadata, resource, params) - def getOrganizationClientsSearch(self, organizationId: str, mac: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceNetworkServicesServerHealthByServerType(self, organizationId: str, **kwargs): """ - **Return the client details in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-clients-search + **Returns network server health in organization by server type.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-network-services-server-health-by-server-type - organizationId (string): Organization ID - - mac (string): The MAC address of the client. Required. - - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5. Default is 5. - - 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. + - networkIds (array): Filter results for these networks. + - serverTypes (array): Filter results for these server types. + - serverIps (array): Filter results for these server IP addresses. + - ssidNumbers (array): Filter results for these SSID Numbers. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "clients", "search"], - "operation": "getOrganizationClientsSearch", + "tags": ["organizations", "configure", "networkServices", "serverHealth", "byServerType"], + "operation": "getOrganizationAssuranceNetworkServicesServerHealthByServerType", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/clients/search" + resource = f"/organizations/{organizationId}/assurance/networkServices/serverHealth/byServerType" query_params = [ - "perPage", - "startingAfter", - "endingBefore", - "mac", + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + array_params = [ + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", + ] + 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 + 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"getOrganizationClientsSearch: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceNetworkServicesServerHealthByServerType: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def cloneOrganization(self, organizationId: str, name: str, **kwargs): + def getOrganizationAssuranceNetworkServicesServerHealthByServerTypeByInterval(self, organizationId: str, **kwargs): """ - **Create a new organization by cloning the addressed organization** - https://developer.cisco.com/meraki/api-v1/#!clone-organization + **Returns network server health in organization by server type and by interval.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-network-services-server-health-by-server-type-by-interval - organizationId (string): Organization ID - - name (string): The name of the new organization + - networkIds (array): Filter results for these networks. + - serverTypes (array): Filter results for these server types. + - serverIps (array): Filter results for these server IP addresses. + - ssidNumbers (array): Filter results for these SSID Numbers. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. """ - kwargs = locals() + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure"], - "operation": "cloneOrganization", + "tags": ["organizations", "configure", "networkServices", "serverHealth", "byServerType", "byInterval"], + "operation": "getOrganizationAssuranceNetworkServicesServerHealthByServerTypeByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/clone" - - body_params = [ - "name", - ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + resource = f"/organizations/{organizationId}/assurance/networkServices/serverHealth/byServerType/byInterval" - 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"cloneOrganization: ignoring unrecognized kwargs: {invalid}") - - return self._session.post(metadata, resource, payload) - - def getOrganizationConfigTemplates(self, organizationId: str): - """ - **List the configuration templates for this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-config-templates + query_params = [ + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - - organizationId (string): Organization ID - """ + array_params = [ + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) - metadata = { - "tags": ["organizations", "configure", "configTemplates"], - "operation": "getOrganizationConfigTemplates", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/configTemplates" + 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"getOrganizationAssuranceNetworkServicesServerHealthByServerTypeByInterval: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get(metadata, resource) + return self._session.get(metadata, resource, params) - def createOrganizationConfigTemplate(self, organizationId: str, name: str, **kwargs): + def checkupOrganizationAssuranceOptimization(self, organizationId: str, **kwargs): """ - **Create a new configuration template** - https://developer.cisco.com/meraki/api-v1/#!create-organization-config-template + **Returns an array of checkup results for the organization** + https://developer.cisco.com/meraki/api-v1/#!checkup-organization-assurance-optimization - organizationId (string): Organization ID - - name (string): The name of the configuration template - - timeZone (string): The timezone of the configuration template. For a list of allowed timezones, please see the 'TZ' column in the table in this article. Not applicable if copying from existing network or template - - copyFromNetworkId (string): The ID of the network or config template to copy configuration from + - forceRefresh (boolean): Optional parameter to reassess best practices """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "configTemplates"], - "operation": "createOrganizationConfigTemplate", + "tags": ["organizations", "configure", "optimization"], + "operation": "checkupOrganizationAssuranceOptimization", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/configTemplates" + resource = f"/organizations/{organizationId}/assurance/optimization/checkup" - body_params = [ - "name", - "timeZone", - "copyFromNetworkId", + query_params = [ + "forceRefresh", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} if self._session._validate_kwargs: - all_params = [] + body_params + all_params = query_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"createOrganizationConfigTemplate: ignoring unrecognized kwargs: {invalid}") - - return self._session.post(metadata, resource, payload) - - def getOrganizationConfigTemplate(self, organizationId: str, configTemplateId: str): - """ - **Return a single configuration template** - https://developer.cisco.com/meraki/api-v1/#!get-organization-config-template - - - organizationId (string): Organization ID - - configTemplateId (string): Config template ID - """ - - metadata = { - "tags": ["organizations", "configure", "configTemplates"], - "operation": "getOrganizationConfigTemplate", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") - resource = f"/organizations/{organizationId}/configTemplates/{configTemplateId}" + self._session._logger.warning( + f"checkupOrganizationAssuranceOptimization: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get(metadata, resource) + return self._session.get(metadata, resource, params) - def updateOrganizationConfigTemplate(self, organizationId: str, configTemplateId: str, **kwargs): + def getOrganizationAssuranceOptimizationCheckupByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Update a configuration template** - https://developer.cisco.com/meraki/api-v1/#!update-organization-config-template + **Returns an array of checkup results for the networks** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-optimization-checkup-by-network - organizationId (string): Organization ID - - configTemplateId (string): Config template ID - - name (string): The name of the configuration template - - timeZone (string): The timezone of the configuration template. For a list of allowed timezones, please see the 'TZ' column in the table in this article. + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 7. + - 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. + - networkIds (array): Optional parameter to filter checkups by Network Id + - forceRefresh (boolean): Optional parameter to reassess best practices """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "configTemplates"], - "operation": "updateOrganizationConfigTemplate", + "tags": ["organizations", "configure", "optimization", "checkup", "byNetwork"], + "operation": "getOrganizationAssuranceOptimizationCheckupByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") - resource = f"/organizations/{organizationId}/configTemplates/{configTemplateId}" + resource = f"/organizations/{organizationId}/assurance/optimization/checkup/byNetwork" - body_params = [ - "name", - "timeZone", + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "forceRefresh", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + 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 = [] + body_params + 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"updateOrganizationConfigTemplate: ignoring unrecognized kwargs: {invalid}") - - return self._session.put(metadata, resource, payload) - - def deleteOrganizationConfigTemplate(self, organizationId: str, configTemplateId: str): - """ - **Remove a configuration template** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-config-template - - - organizationId (string): Organization ID - - configTemplateId (string): Config template ID - """ - - metadata = { - "tags": ["organizations", "configure", "configTemplates"], - "operation": "deleteOrganizationConfigTemplate", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") - resource = f"/organizations/{organizationId}/configTemplates/{configTemplateId}" + self._session._logger.warning( + f"getOrganizationAssuranceOptimizationCheckupByNetwork: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.delete(metadata, resource) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationConfigurationChanges(self, organizationId: str, total_pages=1, direction="prev", **kwargs): + def getOrganizationAssuranceProductAnnouncements(self, organizationId: str, **kwargs): """ - **View the Change Log for your organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-configuration-changes + **Gets relevant product announcements for a user** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-product-announcements - 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" or "prev" (default) page - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 365 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 365 days. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100000. Default is 5000. - - 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. - - networkId (string): Filters on the given network - - adminId (string): Filters on the given Admin + - t0 (string): The beginning of the timespan for the data. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 365 days, 5 hours, 49 minutes, and 12 seconds. The default is 91 days, 7 hours, 27 minutes, and 18 seconds. + - onlyRelevant (boolean): Limits product announcements that are considered relevant to this user when true """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "monitor", "configurationChanges"], - "operation": "getOrganizationConfigurationChanges", + "tags": ["organizations", "configure", "productAnnouncements"], + "operation": "getOrganizationAssuranceProductAnnouncements", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/configurationChanges" + resource = f"/organizations/{organizationId}/assurance/productAnnouncements" query_params = [ "t0", - "t1", "timespan", - "perPage", - "startingAfter", - "endingBefore", - "networkId", - "adminId", + "onlyRelevant", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} @@ -2453,82 +3016,51 @@ def getOrganizationConfigurationChanges(self, organizationId: str, total_pages=1 all_params = query_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"getOrganizationConfigurationChanges: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceProductAnnouncements: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationDevices(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceScores(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the devices in an organization that have been assigned to a network.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices + **Get network health scores for a list of networks.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-scores - 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): Filter results by network. - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5000. Default is 1000. - 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. - - configurationUpdatedAfter (string): Filter results by whether or not the device's configuration has been updated after the given timestamp - - networkIds (array): Optional parameter to filter devices by network. - - productTypes (array): Optional parameter to filter devices by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. - - tags (array): Optional parameter to filter devices by tags. - - tagsFilterType (string): Optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return networks which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. - - name (string): Optional parameter to filter devices by name. All returned devices will have a name that contains the search term or is an exact match. - - mac (string): Optional parameter to filter devices by MAC address. All returned devices will have a MAC address that contains the search term or is an exact match. - - serial (string): Optional parameter to filter devices by serial number. All returned devices will have a serial number that contains the search term or is an exact match. - - model (string): Optional parameter to filter devices by model. All returned devices will have a model that contains the search term or is an exact match. - - macs (array): Optional parameter to filter devices by one or more MAC addresses. All returned devices will have a MAC address that is an exact match. - - serials (array): Optional parameter to filter devices by one or more serial numbers. All returned devices will have a serial number that is an exact match. - - sensorMetrics (array): Optional parameter to filter devices by the metrics that they provide. Only applies to sensor devices. - - sensorAlertProfileIds (array): Optional parameter to filter devices by the alert profiles that are bound to them. Only applies to sensor devices. - - models (array): Optional parameter to filter devices by one or more models. All returned devices will have a model that is an exact match. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 2 hours and be less than or equal to 14 days. The default is 2 hours. """ kwargs.update(locals()) - if "tagsFilterType" in kwargs: - options = ["withAllTags", "withAnyTags"] - assert kwargs["tagsFilterType"] in options, ( - f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["organizations", "configure", "devices"], - "operation": "getOrganizationDevices", + "tags": ["organizations", "monitor", "scores"], + "operation": "getOrganizationAssuranceScores", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices" + resource = f"/organizations/{organizationId}/assurance/scores" query_params = [ + "networkIds", "perPage", "startingAfter", "endingBefore", - "configurationUpdatedAfter", - "networkIds", - "productTypes", - "tags", - "tagsFilterType", - "name", - "mac", - "serial", - "model", - "macs", - "serials", - "sensorMetrics", - "sensorAlertProfileIds", - "models", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", - "productTypes", - "tags", - "macs", - "serials", - "sensorMetrics", - "sensorAlertProfileIds", - "models", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -2539,63 +3071,43 @@ def getOrganizationDevices(self, organizationId: str, total_pages=1, direction=" 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"getOrganizationDevices: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"getOrganizationAssuranceScores: ignoring unrecognized kwargs: {invalid}") return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesAvailabilities(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceThousandEyesApplications(self, organizationId: str, networkIds: list, **kwargs): """ - **List the availability information for devices in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-availabilities + **Get a list of Thousand Eyes applications with their alerts.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-thousand-eyes-applications - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - - 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. - - networkIds (array): Optional parameter to filter device availabilities by network ID. This filter uses multiple exact matches. - - productTypes (array): Optional parameter to filter device availabilities by device product types. This filter uses multiple exact matches. Valid types are wireless, appliance, switch, camera, cellularGateway, sensor, wirelessController, and campusGateway - - serials (array): Optional parameter to filter device availabilities by device serial numbers. This filter uses multiple exact matches. - - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). This filter uses multiple exact matches. - - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. - - statuses (array): Optional parameter to filter device availabilities by device status. This filter uses multiple exact matches. + - networkIds (array): Filter results by network. + - clientId (string): Filter results by client. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. """ kwargs.update(locals()) - if "tagsFilterType" in kwargs: - options = ["withAllTags", "withAnyTags"] - assert kwargs["tagsFilterType"] in options, ( - f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["organizations", "monitor", "devices", "availabilities"], - "operation": "getOrganizationDevicesAvailabilities", + "tags": ["organizations", "configure", "thousandEyes", "applications"], + "operation": "getOrganizationAssuranceThousandEyesApplications", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/availabilities" + resource = f"/organizations/{organizationId}/assurance/thousandEyes/applications" query_params = [ - "perPage", - "startingAfter", - "endingBefore", "networkIds", - "productTypes", - "serials", - "tags", - "tagsFilterType", - "statuses", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + "clientId", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", - "productTypes", - "serials", - "tags", - "statuses", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -2606,60 +3118,56 @@ def getOrganizationDevicesAvailabilities(self, organizationId: str, total_pages= 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"getOrganizationDevicesAvailabilities: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceThousandEyesApplications: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationDevicesAvailabilitiesChangeHistory( + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **List the availability history information for devices in an organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-availabilities-change-history + **Summarizes wired connection successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-successful-connections-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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. - - serials (array): Optional parameter to filter device availabilities history by device serial numbers - - productTypes (array): Optional parameter to filter device availabilities history by device product types - - networkIds (array): Optional parameter to filter device availabilities history by network IDs - - statuses (array): Optional parameter to filter device availabilities history by device statuses """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "monitor", "devices", "availabilities", "changeHistory"], - "operation": "getOrganizationDevicesAvailabilitiesChangeHistory", + "tags": ["organizations", "configure", "wired", "experience", "successfulConnections", "byNetwork"], + "operation": "getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/availabilities/changeHistory" + resource = f"/organizations/{organizationId}/assurance/wired/experience/successfulConnections/byNetwork" query_params = [ - "perPage", - "startingAfter", - "endingBefore", + "networkIds", + "serials", "t0", "t1", "timespan", - "serials", - "productTypes", - "networkIds", - "statuses", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "serials", - "productTypes", "networkIds", - "statuses", + "serials", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -2671,65 +3179,44 @@ def getOrganizationDevicesAvailabilitiesChangeHistory( 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"getOrganizationDevicesAvailabilitiesChangeHistory: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesCellularDataDevices(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClient(self, organizationId: str, **kwargs): """ - **List devices eligible for Cellular Data Management profile assignment in this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-devices + **Summarizes wired connection successes and failures by client.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-successful-connections-by-network-by-client - 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 - - includeAssigned (boolean): Whether to include devices that have already been assigned to a Cellular Data Management Profile - - includedSerials (array): List of device serials to force-include in the response when the devices would otherwise be filtered out. This override is primarily useful for keeping selected devices visible while paging through results. Maximum 1000 serials. - - excludedSerials (array): List of device serials to force-exclude from the response when the devices would otherwise be returned. This override is primarily useful for hiding selected devices while paging through results. Maximum 1000 serials. - - includedProfileIds (array): List of Cellular Data Management Profile IDs to include in the results. Maximum 1000 profile IDs. - - excludedProfileIds (array): List of Cellular Data Management Profile IDs to exclude from the results. Maximum 1000 profile IDs. - - deviceTypes (array): List of device types to filter by. Maximum 1000 device types. - - slots (array): List of SIM slot types that devices must support. Accepted values are sim1, sim2, and esim. Maximum 3 slots. - - name (string): Name of the device to filter by (partial matches allowed) - - serials (array): List of device serials to filter by. Maximum 1000 serials. - - 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. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "monitor", "devices", "cellular", "data"], - "operation": "getOrganizationDevicesCellularDataDevices", + "tags": ["organizations", "configure", "wired", "experience", "successfulConnections", "byNetwork", "byClient"], + "operation": "getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClient", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/devices" + resource = f"/organizations/{organizationId}/assurance/wired/experience/successfulConnections/byNetwork/byClient" query_params = [ - "includeAssigned", - "includedSerials", - "excludedSerials", - "includedProfileIds", - "excludedProfileIds", - "deviceTypes", - "slots", - "name", + "networkIds", "serials", - "perPage", - "startingAfter", - "endingBefore", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "includedSerials", - "excludedSerials", - "includedProfileIds", - "excludedProfileIds", - "deviceTypes", - "slots", + "networkIds", "serials", ] for k, v in kwargs.items(): @@ -2742,46 +3229,44 @@ def getOrganizationDevicesCellularDataDevices(self, organizationId: str, total_p 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"getOrganizationDevicesCellularDataDevices: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClient: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationDevicesCellularDataProfiles(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClientOs(self, organizationId: str, **kwargs): """ - **List cellular data management profiles in this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-profiles + **Summarizes wired connection successes and failures by client OS.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-successful-connections-by-network-by-client-os - 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 - - profileIds (array): Optional parameter to filter the results by Data Management Profile ID. - - serials (array): Devices to find Cellular Data Management Profiles for. - - 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. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], - "operation": "getOrganizationDevicesCellularDataProfiles", + "tags": ["organizations", "configure", "wired", "experience", "successfulConnections", "byNetwork", "byClientOs"], + "operation": "getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClientOs", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles" + resource = f"/organizations/{organizationId}/assurance/wired/experience/successfulConnections/byNetwork/byClientOs" query_params = [ - "profileIds", + "networkIds", "serials", - "perPage", - "startingAfter", - "endingBefore", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "profileIds", + "networkIds", "serials", ] for k, v in kwargs.items(): @@ -2794,63 +3279,95 @@ def getOrganizationDevicesCellularDataProfiles(self, organizationId: str, total_ 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"getOrganizationDevicesCellularDataProfiles: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClientOs: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def createOrganizationDevicesCellularDataProfile( - self, organizationId: str, name: str, description: str, rules: list, **kwargs + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClientType( + self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Add a cellular data management profile to this organization** - https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-cellular-data-profile + **Summarizes wired connection successes and failures by client type.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-successful-connections-by-network-by-client-type - organizationId (string): Organization ID - - name (string): Name of the profile to be added. This must be unique. - - description (string): Description of the profile to be added. - - rules (array): The rules associated with this profile. At least one rule and no more than two rules may be defined for a profile. + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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 = locals() + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], - "operation": "createOrganizationDevicesCellularDataProfile", + "tags": [ + "organizations", + "configure", + "wired", + "experience", + "successfulConnections", + "byNetwork", + "byClientType", + ], + "operation": "getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClientType", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles" + resource = f"/organizations/{organizationId}/assurance/wired/experience/successfulConnections/byNetwork/byClientType" - body_params = [ - "name", - "description", - "rules", + query_params = [ + "networkIds", + "serials", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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 = [] + body_params + 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"createOrganizationDevicesCellularDataProfile: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClientType: ignoring unrecognized kwargs: {invalid}" ) - return self._session.post(metadata, resource, payload) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesCellularDataProfilesAssignments( + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByDevice( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **List Cellular Data Management Profile assignments in this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-profiles-assignments + **Summarizes wired connection successes and failures by device.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-successful-connections-by-network-by-device - 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 - - profileIds (array): Optional parameter to find assignments by Profile IDs. Maximum 1000 profile IDs. - - serials (array): Optional parameter to find assignments by Device Serials. Maximum 1000 serials. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 100. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. """ @@ -2858,15 +3375,18 @@ def getOrganizationDevicesCellularDataProfilesAssignments( kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles", "assignments"], - "operation": "getOrganizationDevicesCellularDataProfilesAssignments", + "tags": ["organizations", "configure", "wired", "experience", "successfulConnections", "byNetwork", "byDevice"], + "operation": "getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/assignments" + resource = f"/organizations/{organizationId}/assurance/wired/experience/successfulConnections/byNetwork/byDevice" query_params = [ - "profileIds", + "networkIds", "serials", + "t0", + "t1", + "timespan", "perPage", "startingAfter", "endingBefore", @@ -2874,7 +3394,7 @@ def getOrganizationDevicesCellularDataProfilesAssignments( params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "profileIds", + "networkIds", "serials", ] for k, v in kwargs.items(): @@ -2887,102 +3407,185 @@ def getOrganizationDevicesCellularDataProfilesAssignments( 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"getOrganizationDevicesCellularDataProfilesAssignments: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByDevice: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def batchOrganizationDevicesCellularDataProfilesAssignmentsCreate(self, organizationId: str, items: list, **kwargs): + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByInterval(self, organizationId: str, **kwargs): """ - **Assign devices to a Cellular Data Management Profile in batch** - https://developer.cisco.com/meraki/api-v1/#!batch-organization-devices-cellular-data-profiles-assignments-create + **Time-series of wired connection successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-successful-connections-by-network-by-interval - organizationId (string): Organization ID - - items (array): List of device-to-profile assignments to create. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 60, 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. """ - kwargs = locals() + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles", "assignments"], - "operation": "batchOrganizationDevicesCellularDataProfilesAssignmentsCreate", + "tags": ["organizations", "monitor", "wired", "experience", "successfulConnections", "byNetwork", "byInterval"], + "operation": "getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/assignments/batchCreate" + resource = f"/organizations/{organizationId}/assurance/wired/experience/successfulConnections/byNetwork/byInterval" - body_params = [ - "items", + query_params = [ + "networkIds", + "serials", + "t0", + "t1", + "timespan", + "interval", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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 = [] + body_params + 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"batchOrganizationDevicesCellularDataProfilesAssignmentsCreate: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" ) - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def bulkOrganizationDevicesCellularDataProfilesAssignmentsDelete(self, organizationId: str, items: list, **kwargs): + def getOrganizationAssuranceWorkflows(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Unassign devices from a Cellular Data Management Profile in batch** - https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-cellular-data-profiles-assignments-delete + **Return workflows filtered by organization ID, network ID, type, and category** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-workflows - organizationId (string): Organization ID - - items (array): List of device-to-profile assignments to remove. + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 30. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'ascending'. + - networkIds (array): Optional parameter to filter by network ID + - types (array): Optional parameter to filter workflows by types + - categories (array): Optional parameter to filter workflows by categories + - scopeTypes (array): Optional parameter to filter workflows by scope types + - networkTags (array): Optional parameter to filter workflows by network tags + - clientTags (array): Optional parameter to filter workflows by client tags + - nodeTags (array): Optional parameter to filter workflows by node tags + - state (string): Optional parameter to filter workflows by state + - tsStart (string): Start time to filter workflows + - tsEnd (string): End time to filter workflows """ - kwargs = locals() + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles", "assignments"], - "operation": "bulkOrganizationDevicesCellularDataProfilesAssignmentsDelete", + "tags": ["organizations", "configure", "workflows"], + "operation": "getOrganizationAssuranceWorkflows", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/assignments/bulkDelete" + resource = f"/organizations/{organizationId}/assurance/workflows" - body_params = [ - "items", + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + "networkIds", + "types", + "categories", + "scopeTypes", + "networkTags", + "clientTags", + "nodeTags", + "state", + "tsStart", + "tsEnd", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - if self._session._validate_kwargs: - all_params = [] + body_params + array_params = [ + "networkIds", + "types", + "categories", + "scopeTypes", + "networkTags", + "clientTags", + "nodeTags", + ] + 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"bulkOrganizationDevicesCellularDataProfilesAssignmentsDelete: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"getOrganizationAssuranceWorkflows: ignoring unrecognized kwargs: {invalid}") - return self._session.post(metadata, resource, payload) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def updateOrganizationDevicesCellularDataProfile(self, organizationId: str, rules: list, profileId: str, **kwargs): + def getOrganizationAuthRadiusServers(self, organizationId: str): """ - **Update a Cellular Data Management Profile** - https://developer.cisco.com/meraki/api-v1/#!update-organization-devices-cellular-data-profile + **List the organization-wide RADIUS servers in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-auth-radius-servers - organizationId (string): Organization ID - - rules (array): The rules associated with this profile. At least one rule and no more than two rules may be defined for a profile. - - profileId (string): ID of the profile. - - description (string): New description of the profile. + """ + + metadata = { + "tags": ["organizations", "configure", "auth", "radius", "servers"], + "operation": "getOrganizationAuthRadiusServers", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/auth/radius/servers" + + return self._session.get(metadata, resource) + + def createOrganizationAuthRadiusServer(self, organizationId: str, address: str, secret: str, **kwargs): + """ + **Add an organization-wide RADIUS server** + https://developer.cisco.com/meraki/api-v1/#!create-organization-auth-radius-server + + - organizationId (string): Organization ID + - address (string): The IP address or FQDN of the RADIUS server + - secret (string): Shared secret of the RADIUS server + - name (string): The name of the RADIUS server + - modes (array): Available server modes """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], - "operation": "updateOrganizationDevicesCellularDataProfile", + "tags": ["organizations", "configure", "auth", "radius", "servers"], + "operation": "createOrganizationAuthRadiusServer", } organizationId = urllib.parse.quote(str(organizationId), safe="") - profileId = urllib.parse.quote(str(profileId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/{profileId}" + resource = f"/organizations/{organizationId}/auth/radius/servers" body_params = [ - "profileId", - "description", - "rules", + "name", + "address", + "modes", + "secret", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2990,318 +3593,170 @@ def updateOrganizationDevicesCellularDataProfile(self, organizationId: str, rule 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"updateOrganizationDevicesCellularDataProfile: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"createOrganizationAuthRadiusServer: ignoring unrecognized kwargs: {invalid}") - return self._session.put(metadata, resource, payload) + return self._session.post(metadata, resource, payload) - def deleteOrganizationDevicesCellularDataProfile(self, organizationId: str, profileId: str): + def getOrganizationAuthRadiusServersAssignments(self, organizationId: str): """ - **Delete a cellular data management profile from this organization** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-devices-cellular-data-profile + **Return list of network and policies that organization-wide RADIUS servers are bing used** + https://developer.cisco.com/meraki/api-v1/#!get-organization-auth-radius-servers-assignments - organizationId (string): Organization ID - - profileId (string): Profile ID """ metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], - "operation": "deleteOrganizationDevicesCellularDataProfile", + "tags": ["organizations", "configure", "auth", "radius", "servers", "assignments"], + "operation": "getOrganizationAuthRadiusServersAssignments", } organizationId = urllib.parse.quote(str(organizationId), safe="") - profileId = urllib.parse.quote(str(profileId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/{profileId}" + resource = f"/organizations/{organizationId}/auth/radius/servers/assignments" - return self._session.delete(metadata, resource) + return self._session.get(metadata, resource) - def getOrganizationDevicesCellularDataUsageByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAuthRadiusServer(self, organizationId: str, serverId: str): """ - **List current cellular data usage for devices in this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-usage-by-device + **Return an organization-wide RADIUS server** + https://developer.cisco.com/meraki/api-v1/#!get-organization-auth-radius-server - 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 - - serials (array): Filter the results by device serials. Maximum 1000 serials. - - 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. + - serverId (string): Server ID """ - kwargs.update(locals()) - metadata = { - "tags": ["organizations", "monitor", "devices", "cellular", "data", "usage", "byDevice"], - "operation": "getOrganizationDevicesCellularDataUsageByDevice", + "tags": ["organizations", "configure", "auth", "radius", "servers"], + "operation": "getOrganizationAuthRadiusServer", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/usage/byDevice" - - query_params = [ - "serials", - "perPage", - "startingAfter", - "endingBefore", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - - array_params = [ - "serials", - ] - 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"getOrganizationDevicesCellularDataUsageByDevice: ignoring unrecognized kwargs: {invalid}" - ) + serverId = urllib.parse.quote(str(serverId), safe="") + resource = f"/organizations/{organizationId}/auth/radius/servers/{serverId}" - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource) - def getOrganizationDevicesCellularDataUsageHistoryByDeviceByInterval( - self, organizationId: str, serials: list, total_pages=1, direction="next", **kwargs - ): + def updateOrganizationAuthRadiusServer(self, organizationId: str, serverId: str, **kwargs): """ - **List historical cellular data usage grouped by device and interval in this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-usage-history-by-device-by-interval + **Update an organization-wide RADIUS server** + https://developer.cisco.com/meraki/api-v1/#!update-organization-auth-radius-server - organizationId (string): Organization ID - - serials (array): Required parameter to filter the results by device serials. Maximum 10 serials. - - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10. Default is 5. - - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 366 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 86400. Interval is calculated if time params are provided. + - serverId (string): Server ID + - name (string): The name of the RADIUS server + - address (string): The IP address or FQDN of the RADIUS server + - modes (array): Available server modes + - secret (string): Shared secret of the RADIUS server """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "monitor", "devices", "cellular", "data", "usage", "history", "byDevice", "byInterval"], - "operation": "getOrganizationDevicesCellularDataUsageHistoryByDeviceByInterval", + "tags": ["organizations", "configure", "auth", "radius", "servers"], + "operation": "updateOrganizationAuthRadiusServer", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/usage/history/byDevice/byInterval" - - query_params = [ - "serials", - "perPage", - "startingAfter", - "endingBefore", - "t0", - "t1", - "timespan", - "interval", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + serverId = urllib.parse.quote(str(serverId), safe="") + resource = f"/organizations/{organizationId}/auth/radius/servers/{serverId}" - array_params = [ - "serials", + body_params = [ + "name", + "address", + "modes", + "secret", ] - for k, v in kwargs.items(): - if k.strip() in array_params: - params[f"{k.strip()}[]"] = kwargs[f"{k}"] - params.pop(k.strip()) + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationDevicesCellularDataUsageHistoryByDeviceByInterval: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"updateOrganizationAuthRadiusServer: ignoring unrecognized kwargs: {invalid}") - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.put(metadata, resource, payload) - def getOrganizationDevicesCellularGeolocations(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def deleteOrganizationAuthRadiusServer(self, organizationId: str, serverId: str): """ - **List the latest cellular geolocation telemetry for devices in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-geolocations + **Delete an organization-wide RADIUS server from a organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-auth-radius-server - 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 - - serials (array): Optional parameter to filter the results by device serials. Maximum 1000 serials. - - 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. + - serverId (string): Server ID """ - kwargs.update(locals()) - metadata = { - "tags": ["organizations", "monitor", "devices", "cellular", "geolocations"], - "operation": "getOrganizationDevicesCellularGeolocations", + "tags": ["organizations", "configure", "auth", "radius", "servers"], + "operation": "deleteOrganizationAuthRadiusServer", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/geolocations" - - query_params = [ - "serials", - "perPage", - "startingAfter", - "endingBefore", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - - array_params = [ - "serials", - ] - 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"getOrganizationDevicesCellularGeolocations: ignoring unrecognized kwargs: {invalid}" - ) + serverId = urllib.parse.quote(str(serverId), safe="") + resource = f"/organizations/{organizationId}/auth/radius/servers/{serverId}" - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.delete(metadata, resource) - def getOrganizationDevicesCellularUplinksBandsByDevice( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def codeOrganizationAutomateIdentity(self, organizationId: str): """ - **List the latest cellular uplink signal information for devices in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-uplinks-bands-by-device + **Generate a single use short lived code that can be used to retrieve the identity of the current user in the organization.** + https://developer.cisco.com/meraki/api-v1/#!code-organization-automate-identity - 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 - - serials (array): Optional parameter to filter the results by device serials. Maximum 1000 serials. - - 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. """ - kwargs.update(locals()) - metadata = { - "tags": ["organizations", "monitor", "devices", "cellular", "uplinks", "bands", "byDevice"], - "operation": "getOrganizationDevicesCellularUplinksBandsByDevice", + "tags": ["organizations", "configure", "automate", "identity"], + "operation": "codeOrganizationAutomateIdentity", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/uplinks/bands/byDevice" - - query_params = [ - "serials", - "perPage", - "startingAfter", - "endingBefore", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - - array_params = [ - "serials", - ] - 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"getOrganizationDevicesCellularUplinksBandsByDevice: ignoring unrecognized kwargs: {invalid}" - ) + resource = f"/organizations/{organizationId}/automate/identity/code" - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.post(metadata, resource) - def getOrganizationDevicesCellularUplinksTowersByDevice( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def getOrganizationBrandingPolicies(self, organizationId: str): """ - **List the latest cellular tower information for devices in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-uplinks-towers-by-device + **List the branding policies of an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-branding-policies - 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 - - serials (array): Optional parameter to filter the results by device serials. Maximum 1000 serials. - - 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. """ - kwargs.update(locals()) - metadata = { - "tags": ["organizations", "monitor", "devices", "cellular", "uplinks", "towers", "byDevice"], - "operation": "getOrganizationDevicesCellularUplinksTowersByDevice", + "tags": ["organizations", "configure", "brandingPolicies"], + "operation": "getOrganizationBrandingPolicies", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/uplinks/towers/byDevice" + resource = f"/organizations/{organizationId}/brandingPolicies" - query_params = [ - "serials", - "perPage", - "startingAfter", - "endingBefore", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + return self._session.get(metadata, resource) - array_params = [ - "serials", - ] - 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"getOrganizationDevicesCellularUplinksTowersByDevice: ignoring unrecognized kwargs: {invalid}" - ) - - return self._session.get_pages(metadata, resource, params, total_pages, direction) - - def createOrganizationDevicesControllerMigration(self, organizationId: str, serials: list, target: str, **kwargs): + def createOrganizationBrandingPolicy(self, organizationId: str, name: str, **kwargs): """ - **Migrate devices to another controller or management mode** - https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-controller-migration + **Add a new branding policy to an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-branding-policy - - organizationId (string): Organization ID - - serials (array): A list of Meraki Serials to migrate - - target (string): The controller or management mode to which the devices will be migrated + - organizationId (string): Organization ID + - name (string): Name of the Dashboard branding policy. + - enabled (boolean): Boolean indicating whether this policy is enabled. + - adminSettings (object): Settings for describing which kinds of admins this policy applies to. + - helpSettings (object): Settings for describing the modifications to various Help page features. Each property in this object accepts one of + 'default or inherit' (do not modify functionality), 'hide' (remove the section from Dashboard), or 'show' (always show + the section on Dashboard). Some properties in this object also accept custom HTML used to replace the section on + Dashboard; see the documentation for each property to see the allowed values. + Each property defaults to 'default or inherit' when not provided. + - customLogo (object): Properties describing the custom logo attached to the branding policy. """ - kwargs = locals() - - if "target" in kwargs: - options = ["wirelessController"] - assert kwargs["target"] in options, ( - f'''"target" cannot be "{kwargs["target"]}", & must be set to one of: {options}''' - ) + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "controller", "migrations"], - "operation": "createOrganizationDevicesControllerMigration", + "tags": ["organizations", "configure", "brandingPolicies"], + "operation": "createOrganizationBrandingPolicy", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/controller/migrations" + resource = f"/organizations/{organizationId}/brandingPolicies" body_params = [ - "serials", - "target", + "name", + "enabled", + "adminSettings", + "helpSettings", + "customLogo", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3309,94 +3764,114 @@ def createOrganizationDevicesControllerMigration(self, organizationId: str, seri 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"createOrganizationDevicesControllerMigration: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"createOrganizationBrandingPolicy: ignoring unrecognized kwargs: {invalid}") return self._session.post(metadata, resource, payload) - def getOrganizationDevicesControllerMigrations(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationBrandingPoliciesPriorities(self, organizationId: str): """ - **Retrieve device migration statuses in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-controller-migrations + **Return the branding policy IDs of an organization in priority order** + https://developer.cisco.com/meraki/api-v1/#!get-organization-branding-policies-priorities - 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 - - serials (array): A list of Meraki Serials for which to retrieve migrations - - networkIds (array): Filter device migrations by network IDs - - target (string): Filter device migrations by target destination - - 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. """ - kwargs.update(locals()) + metadata = { + "tags": ["organizations", "configure", "brandingPolicies", "priorities"], + "operation": "getOrganizationBrandingPoliciesPriorities", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/brandingPolicies/priorities" - if "target" in kwargs: - options = ["wirelessController"] - assert kwargs["target"] in options, ( - f'''"target" cannot be "{kwargs["target"]}", & must be set to one of: {options}''' - ) + return self._session.get(metadata, resource) + + def updateOrganizationBrandingPoliciesPriorities(self, organizationId: str, **kwargs): + """ + **Update the priority ordering of an organization's branding policies.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-branding-policies-priorities + + - organizationId (string): Organization ID + - brandingPolicyIds (array): An ordered list of branding policy IDs that determines the priority order of how to apply the policies + + """ + + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "controller", "migrations"], - "operation": "getOrganizationDevicesControllerMigrations", + "tags": ["organizations", "configure", "brandingPolicies", "priorities"], + "operation": "updateOrganizationBrandingPoliciesPriorities", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/controller/migrations" - - query_params = [ - "serials", - "networkIds", - "target", - "perPage", - "startingAfter", - "endingBefore", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + resource = f"/organizations/{organizationId}/brandingPolicies/priorities" - array_params = [ - "serials", - "networkIds", + body_params = [ + "brandingPolicyIds", ] - for k, v in kwargs.items(): - if k.strip() in array_params: - params[f"{k.strip()}[]"] = kwargs[f"{k}"] - params.pop(k.strip()) + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationDevicesControllerMigrations: ignoring unrecognized kwargs: {invalid}" + f"updateOrganizationBrandingPoliciesPriorities: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.put(metadata, resource, payload) - def bulkUpdateOrganizationDevicesDetails(self, organizationId: str, serials: list, details: list, **kwargs): + def getOrganizationBrandingPolicy(self, organizationId: str, brandingPolicyId: str): """ - **Updating device details (currently only used for Catalyst devices)** - https://developer.cisco.com/meraki/api-v1/#!bulk-update-organization-devices-details + **Return a branding policy** + https://developer.cisco.com/meraki/api-v1/#!get-organization-branding-policy - organizationId (string): Organization ID - - serials (array): A list of serials of devices to update - - details (array): An array of details + - brandingPolicyId (string): Branding policy ID """ - kwargs = locals() + metadata = { + "tags": ["organizations", "configure", "brandingPolicies"], + "operation": "getOrganizationBrandingPolicy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + brandingPolicyId = urllib.parse.quote(str(brandingPolicyId), safe="") + resource = f"/organizations/{organizationId}/brandingPolicies/{brandingPolicyId}" + + return self._session.get(metadata, resource) + + def updateOrganizationBrandingPolicy(self, organizationId: str, brandingPolicyId: str, name: str, **kwargs): + """ + **Update a branding policy** + https://developer.cisco.com/meraki/api-v1/#!update-organization-branding-policy + + - organizationId (string): Organization ID + - brandingPolicyId (string): Branding policy ID + - name (string): Name of the Dashboard branding policy. + - enabled (boolean): Boolean indicating whether this policy is enabled. + - adminSettings (object): Settings for describing which kinds of admins this policy applies to. + - helpSettings (object): Settings for describing the modifications to various Help page features. Each property in this object accepts one of + 'default or inherit' (do not modify functionality), 'hide' (remove the section from Dashboard), or 'show' (always show + the section on Dashboard). Some properties in this object also accept custom HTML used to replace the section on + Dashboard; see the documentation for each property to see the allowed values. + + - customLogo (object): Properties describing the custom logo attached to the branding policy. + """ + + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "details", "bulkUpdate"], - "operation": "bulkUpdateOrganizationDevicesDetails", + "tags": ["organizations", "configure", "brandingPolicies"], + "operation": "updateOrganizationBrandingPolicy", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/details/bulkUpdate" + brandingPolicyId = urllib.parse.quote(str(brandingPolicyId), safe="") + resource = f"/organizations/{organizationId}/brandingPolicies/{brandingPolicyId}" body_params = [ - "serials", - "details", + "name", + "enabled", + "adminSettings", + "helpSettings", + "customLogo", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3404,41 +3879,57 @@ def bulkUpdateOrganizationDevicesDetails(self, organizationId: str, serials: lis 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"bulkUpdateOrganizationDevicesDetails: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"updateOrganizationBrandingPolicy: ignoring unrecognized kwargs: {invalid}") - return self._session.post(metadata, resource, payload) + return self._session.put(metadata, resource, payload) - def getOrganizationDevicesOverviewByModel(self, organizationId: str, **kwargs): + def deleteOrganizationBrandingPolicy(self, organizationId: str, brandingPolicyId: str): """ - **Lists the count for each device model** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-overview-by-model + **Delete a branding policy** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-branding-policy - organizationId (string): Organization ID - - models (array): Optional parameter to filter devices by one or more models. All returned devices will have a model that is an exact match. - - networkIds (array): Optional parameter to filter devices by networkId. - - productTypes (array): Optional parameter to filter device by device product types. This filter uses multiple exact matches. + - brandingPolicyId (string): Branding policy ID + """ + + metadata = { + "tags": ["organizations", "configure", "brandingPolicies"], + "operation": "deleteOrganizationBrandingPolicy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + brandingPolicyId = urllib.parse.quote(str(brandingPolicyId), safe="") + resource = f"/organizations/{organizationId}/brandingPolicies/{brandingPolicyId}" + + return self._session.delete(metadata, resource) + + def getOrganizationCertificates(self, organizationId: str, **kwargs): + """ + **Gets all or specific certificates for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-certificates + + - organizationId (string): Organization ID + - certificateIds (array): List of ids for specific certificate retrieval + - certManagedBy (array): List of cert managed by types """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "overview", "byModel"], - "operation": "getOrganizationDevicesOverviewByModel", + "tags": ["organizations", "configure", "certificates"], + "operation": "getOrganizationCertificates", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/overview/byModel" + resource = f"/organizations/{organizationId}/certificates" query_params = [ - "models", - "networkIds", - "productTypes", + "certificateIds", + "certManagedBy", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "models", - "networkIds", - "productTypes", + "certificateIds", + "certManagedBy", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3449,213 +3940,109 @@ def getOrganizationDevicesOverviewByModel(self, organizationId: str, **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"getOrganizationDevicesOverviewByModel: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"getOrganizationCertificates: ignoring unrecognized kwargs: {invalid}") return self._session.get(metadata, resource, params) - def getOrganizationDevicesPacketCaptureCaptures(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def importOrganizationCertificates(self, organizationId: str, managedBy: str, contents: str, description: str, **kwargs): """ - **List Packet Captures** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-packet-capture-captures + **Import certificate for this organization** + https://developer.cisco.com/meraki/api-v1/#!import-organization-certificates - 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 - - captureIds (array): Return the packet captures of the specified capture ids - - networkIds (array): Return the packet captures of the specified network(s) - - serials (array): Return the packet captures of the specified device(s) - - process (array): Return the packet captures of the specified process - - captureStatus (array): Return the packet captures of the specified capture status - - name (array): Return the packet captures matching the specified name - - clientMac (array): Return the packet captures matching the specified client macs - - notes (string): Return the packet captures matching the specified notes - - deviceName (string): Return the packet captures matching the specified device name - - adminName (string): Return the packet captures matching the admin name - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 365 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 365 days. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. - - 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. - - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'descending'. + - 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 """ - kwargs.update(locals()) + kwargs = locals() - if "sortOrder" in kwargs: - options = ["ascending", "descending"] - assert kwargs["sortOrder"] in options, ( - f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + if "managedBy" in kwargs: + 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}''' ) metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], - "operation": "getOrganizationDevicesPacketCaptureCaptures", + "tags": ["organizations", "configure", "certificates"], + "operation": "importOrganizationCertificates", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures" - - query_params = [ - "captureIds", - "networkIds", - "serials", - "process", - "captureStatus", - "name", - "clientMac", - "notes", - "deviceName", - "adminName", - "t0", - "t1", - "timespan", - "perPage", - "startingAfter", - "endingBefore", - "sortOrder", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + resource = f"/organizations/{organizationId}/certificates/import" - array_params = [ - "captureIds", - "networkIds", - "serials", - "process", - "captureStatus", - "name", - "clientMac", + body_params = [ + "managedBy", + "contents", + "description", ] - for k, v in kwargs.items(): - if k.strip() in array_params: - params[f"{k.strip()}[]"] = kwargs[f"{k}"] - params.pop(k.strip()) + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationDevicesPacketCaptureCaptures: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"importOrganizationCertificates: ignoring unrecognized kwargs: {invalid}") - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.post(metadata, resource, payload) - def createOrganizationDevicesPacketCaptureCapture(self, organizationId: str, serials: list, name: str, **kwargs): + def getOrganizationCertificatesMerakiAuthContents(self, organizationId: str): """ - **Perform a packet capture on a device and store in Meraki Cloud** - https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-packet-capture-capture + **Download the public RADIUS certificate.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-certificates-meraki-auth-contents - organizationId (string): Organization ID - - serials (array): The serial(s) of the device(s) - - name (string): Name of packet capture file - - outputType (string): Output type of packet capture file. Possible values: text, pcap, cloudshark, or upload_to_cloud - - destination (string): Destination of packet capture file. Possible values: [upload_to_cloud] - - ports (string): Ports of packet capture file, comma-separated - - notes (string): Reason for taking the packet capture - - duration (integer): Duration in seconds of packet capture - - filterExpression (string): Filter expression for packet capture - - interface (string): Interface of the device - - advanced (object): Advanced filters for IOSXE devices (supported for Campus Gateway devices only) """ - kwargs.update(locals()) - metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], - "operation": "createOrganizationDevicesPacketCaptureCapture", + "tags": ["organizations", "monitor", "certificates", "merakiAuth", "contents"], + "operation": "getOrganizationCertificatesMerakiAuthContents", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures" - - body_params = [ - "serials", - "name", - "outputType", - "destination", - "ports", - "notes", - "duration", - "filterExpression", - "interface", - "advanced", - ] - 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"createOrganizationDevicesPacketCaptureCapture: ignoring unrecognized kwargs: {invalid}" - ) + resource = f"/organizations/{organizationId}/certificates/merakiAuth/contents" - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource) - def bulkOrganizationDevicesPacketCaptureCapturesCreate(self, organizationId: str, devices: list, name: str, **kwargs): + def deleteOrganizationCertificate(self, organizationId: str, certificateId: str): """ - **Perform a packet capture on multiple devices and store in Meraki Cloud.** - https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-packet-capture-captures-create + **Delete a certificate for an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-certificate - organizationId (string): Organization ID - - devices (array): Device details (maximum of 20 devices allowed) - - name (string): Name of packet capture file - - notes (string): Reason for capture - - duration (integer): Duration of the capture in seconds - - filterExpression (string): Filter expression for the capture - - advanced (object): Advanced capture options (optional) + - certificateId (string): Certificate ID """ - kwargs.update(locals()) - metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], - "operation": "bulkOrganizationDevicesPacketCaptureCapturesCreate", + "tags": ["organizations", "configure", "certificates"], + "operation": "deleteOrganizationCertificate", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures/bulkCreate" - - body_params = [ - "devices", - "notes", - "duration", - "filterExpression", - "name", - "advanced", - ] - 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"bulkOrganizationDevicesPacketCaptureCapturesCreate: ignoring unrecognized kwargs: {invalid}" - ) + certificateId = urllib.parse.quote(str(certificateId), safe="") + resource = f"/organizations/{organizationId}/certificates/{certificateId}" - return self._session.post(metadata, resource, payload) + return self._session.delete(metadata, resource) - def bulkOrganizationDevicesPacketCaptureCapturesDelete(self, organizationId: str, captureIds: list, **kwargs): + def updateOrganizationCertificate(self, organizationId: str, certificateId: str, **kwargs): """ - **BulkDelete packet captures from cloud** - https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-packet-capture-captures-delete + **Update a certificate's description for an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-certificate - organizationId (string): Organization ID - - captureIds (array): Delete the packet captures of the specified capture ids + - certificateId (string): Certificate ID + - description (string): Description of a certificate that already exist in your org """ - kwargs = locals() + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], - "operation": "bulkOrganizationDevicesPacketCaptureCapturesDelete", + "tags": ["organizations", "configure", "certificates"], + "operation": "updateOrganizationCertificate", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures/bulkDelete" + certificateId = urllib.parse.quote(str(certificateId), safe="") + resource = f"/organizations/{organizationId}/certificates/{certificateId}" body_params = [ - "captureIds", + "description", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3663,72 +4050,67 @@ def bulkOrganizationDevicesPacketCaptureCapturesDelete(self, organizationId: str 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"bulkOrganizationDevicesPacketCaptureCapturesDelete: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"updateOrganizationCertificate: ignoring unrecognized kwargs: {invalid}") - return self._session.post(metadata, resource, payload) + return self._session.put(metadata, resource, payload) - def deleteOrganizationDevicesPacketCaptureCapture(self, organizationId: str, captureId: str): + def getOrganizationCertificateContents(self, organizationId: str, certificateId: str, **kwargs): """ - **Delete a single packet capture from cloud using captureId** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-devices-packet-capture-capture + **Download the trusted certificate by certificate id.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-certificate-contents - organizationId (string): Organization ID - - captureId (string): Capture ID + - certificateId (string): Certificate ID + - chainId (string): chainId that represent which certificate chain is being requested """ + kwargs.update(locals()) + metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], - "operation": "deleteOrganizationDevicesPacketCaptureCapture", + "tags": ["organizations", "configure", "certificates", "contents"], + "operation": "getOrganizationCertificateContents", } organizationId = urllib.parse.quote(str(organizationId), safe="") - captureId = urllib.parse.quote(str(captureId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures/{captureId}" - - return self._session.delete(metadata, resource) - - def generateOrganizationDevicesPacketCaptureCaptureDownloadUrl(self, organizationId: str, captureId: str): - """ - **Get presigned download URL for given packet capture id** - https://developer.cisco.com/meraki/api-v1/#!generate-organization-devices-packet-capture-capture-download-url + certificateId = urllib.parse.quote(str(certificateId), safe="") + resource = f"/organizations/{organizationId}/certificates/{certificateId}/contents" - - organizationId (string): Organization ID - - captureId (string): Capture ID - """ + query_params = [ + "chainId", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures", "downloadUrl"], - "operation": "generateOrganizationDevicesPacketCaptureCaptureDownloadUrl", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - captureId = urllib.parse.quote(str(captureId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures/{captureId}/downloadUrl/generate" + if self._session._validate_kwargs: + all_params = query_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"getOrganizationCertificateContents: ignoring unrecognized kwargs: {invalid}") - return self._session.post(metadata, resource) + return self._session.get(metadata, resource, params) - def stopOrganizationDevicesPacketCaptureCapture(self, organizationId: str, captureId: str, serials: list, **kwargs): + def claimIntoOrganization(self, organizationId: str, **kwargs): """ - **Stop a specific packet capture (not supported for Catalyst devices)** - https://developer.cisco.com/meraki/api-v1/#!stop-organization-devices-packet-capture-capture + **Claim a list of devices, licenses, and/or orders into an organization inventory** + https://developer.cisco.com/meraki/api-v1/#!claim-into-organization - organizationId (string): Organization ID - - captureId (string): Capture ID - - serials (array): The serial(s) of the device(s) to stop the capture on + - orders (array): The numbers of the orders that should be claimed + - serials (array): The serials of the devices that should be claimed + - licenses (array): The licenses that should be claimed """ - kwargs = locals() + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], - "operation": "stopOrganizationDevicesPacketCaptureCapture", + "tags": ["organizations", "configure"], + "operation": "claimIntoOrganization", } organizationId = urllib.parse.quote(str(organizationId), safe="") - captureId = urllib.parse.quote(str(captureId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures/{captureId}/stop" + resource = f"/organizations/{organizationId}/claim" body_params = [ + "orders", "serials", + "licenses", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3736,171 +4118,151 @@ def stopOrganizationDevicesPacketCaptureCapture(self, organizationId: str, captu 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"stopOrganizationDevicesPacketCaptureCapture: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"claimIntoOrganization: ignoring unrecognized kwargs: {invalid}") return self._session.post(metadata, resource, payload) - def getOrganizationDevicesPacketCaptureSchedules(self, organizationId: str, **kwargs): + def getOrganizationClientsBandwidthUsageHistory(self, organizationId: str, **kwargs): """ - **List the Packet Capture Schedules** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-packet-capture-schedules + **Return data usage (in megabits per second) over time for all clients in the given organization within a given time range.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-clients-bandwidth-usage-history - organizationId (string): Organization ID - - scheduleIds (array): Return the packet captures schedules of the specified packet capture schedule ids - - networkIds (array): Return the scheduled packet captures of the specified network(s) - - deviceIds (array): Return the scheduled packet captures of the specified device(s) + - networkTag (string): Match result to an exact network tag + - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id + - ssidName (string): Filter results by ssid name + - usageUplink (string): Filter results by usage uplink + - t0 (string): The beginning of the timespan for the data. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 186 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 186 days. The default is 1 day. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], - "operation": "getOrganizationDevicesPacketCaptureSchedules", + "tags": ["organizations", "monitor", "clients", "bandwidthUsageHistory"], + "operation": "getOrganizationClientsBandwidthUsageHistory", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/schedules" + resource = f"/organizations/{organizationId}/clients/bandwidthUsageHistory" query_params = [ - "scheduleIds", - "networkIds", - "deviceIds", + "networkTag", + "deviceTag", + "networkId", + "ssidName", + "usageUplink", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - array_params = [ - "scheduleIds", - "networkIds", - "deviceIds", - ] - 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 + all_params = query_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"getOrganizationDevicesPacketCaptureSchedules: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationClientsBandwidthUsageHistory: ignoring unrecognized kwargs: {invalid}" ) return self._session.get(metadata, resource, params) - def createOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, devices: list, **kwargs): + def getOrganizationClientsOverview(self, organizationId: str, **kwargs): """ - **Create a schedule for packet capture** - https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-packet-capture-schedule + **Return summary information around client data usage (in kb) across the given organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-clients-overview - organizationId (string): Organization ID - - devices (array): device details - - name (string): Name of the packet capture file - - notes (string): Reason for capture - - duration (integer): Duration of the capture in seconds - - filterExpression (string): Filter expression for the capture - - enabled (boolean): Enable or disable the schedule - - schedule (object): Schedule details + - t0 (string): The beginning of the timespan for the data. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], - "operation": "createOrganizationDevicesPacketCaptureSchedule", + "tags": ["organizations", "monitor", "clients", "overview"], + "operation": "getOrganizationClientsOverview", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/schedules" + resource = f"/organizations/{organizationId}/clients/overview" - body_params = [ - "devices", - "name", - "notes", - "duration", - "filterExpression", - "enabled", - "schedule", + query_params = [ + "t0", + "t1", + "timespan", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} if self._session._validate_kwargs: - all_params = [] + body_params + all_params = query_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"createOrganizationDevicesPacketCaptureSchedule: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"getOrganizationClientsOverview: ignoring unrecognized kwargs: {invalid}") - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def reorderOrganizationDevicesPacketCaptureSchedules(self, organizationId: str, order: list, **kwargs): + def getOrganizationClientsSearch(self, organizationId: str, mac: str, total_pages=1, direction="next", **kwargs): """ - **Bulk update priorities of pcap schedules** - https://developer.cisco.com/meraki/api-v1/#!reorder-organization-devices-packet-capture-schedules + **Return the client details in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-clients-search - organizationId (string): Organization ID - - order (array): Array of schedule IDs and their priorities to reorder. + - mac (string): The MAC address of the client. Required. + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5. Default is 5. + - 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 = locals() + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], - "operation": "reorderOrganizationDevicesPacketCaptureSchedules", + "tags": ["organizations", "configure", "clients", "search"], + "operation": "getOrganizationClientsSearch", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/reorder" + resource = f"/organizations/{organizationId}/clients/search" - body_params = [ - "order", + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "mac", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} if self._session._validate_kwargs: - all_params = [] + body_params + all_params = query_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"reorderOrganizationDevicesPacketCaptureSchedules: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"getOrganizationClientsSearch: ignoring unrecognized kwargs: {invalid}") - return self._session.post(metadata, resource, payload) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def updateOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, scheduleId: str, devices: list, **kwargs): + def cloneOrganization(self, organizationId: str, name: str, **kwargs): """ - **Update a schedule for packet capture** - https://developer.cisco.com/meraki/api-v1/#!update-organization-devices-packet-capture-schedule + **Create a new organization by cloning the addressed organization** + https://developer.cisco.com/meraki/api-v1/#!clone-organization - organizationId (string): Organization ID - - scheduleId (string): Schedule ID - - devices (array): device details - - name (string): Name of the packet capture file - - notes (string): Reason for capture - - duration (integer): Duration of the capture in seconds - - filterExpression (string): Filter expression for the capture - - enabled (boolean): Enable or disable the schedule - - schedule (object): Schedule details + - name (string): The name of the new organization """ - kwargs.update(locals()) + kwargs = locals() metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], - "operation": "updateOrganizationDevicesPacketCaptureSchedule", + "tags": ["organizations", "configure"], + "operation": "cloneOrganization", } organizationId = urllib.parse.quote(str(organizationId), safe="") - scheduleId = urllib.parse.quote(str(scheduleId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/{scheduleId}" + resource = f"/organizations/{organizationId}/clone" body_params = [ - "devices", "name", - "notes", - "duration", - "filterExpression", - "enabled", - "schedule", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3908,192 +4270,224 @@ def updateOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, sc 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"updateOrganizationDevicesPacketCaptureSchedule: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"cloneOrganization: ignoring unrecognized kwargs: {invalid}") - return self._session.put(metadata, resource, payload) + return self._session.post(metadata, resource, payload) - def deleteOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, scheduleId: str): + def getOrganizationCloudConnectivityRequirements(self, organizationId: str): """ - **Delete schedule from cloud** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-devices-packet-capture-schedule + **List of source/destination traffic rules** + https://developer.cisco.com/meraki/api-v1/#!get-organization-cloud-connectivity-requirements - organizationId (string): Organization ID - - scheduleId (string): Delete the capture schedules of the specified capture schedule id """ - kwargs = locals() + metadata = { + "tags": ["organizations", "monitor", "cloud", "connectivity", "requirements"], + "operation": "getOrganizationCloudConnectivityRequirements", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/cloud/connectivity/requirements" + + return self._session.get(metadata, resource) + + def getOrganizationConfigTemplates(self, organizationId: str): + """ + **List the configuration templates for this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-config-templates + + - organizationId (string): Organization ID + """ metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], - "operation": "deleteOrganizationDevicesPacketCaptureSchedule", + "tags": ["organizations", "configure", "configTemplates"], + "operation": "getOrganizationConfigTemplates", } organizationId = urllib.parse.quote(str(organizationId), safe="") - scheduleId = urllib.parse.quote(str(scheduleId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/{scheduleId}" + resource = f"/organizations/{organizationId}/configTemplates" - return self._session.delete(metadata, resource) + return self._session.get(metadata, resource) - def getOrganizationDevicesPowerModulesStatusesByDevice( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def createOrganizationConfigTemplate(self, organizationId: str, name: str, **kwargs): """ - **List the most recent status information for power modules in rackmount MX and MS devices that support them** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-power-modules-statuses-by-device + **Create a new configuration template** + https://developer.cisco.com/meraki/api-v1/#!create-organization-config-template - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - - 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. - - networkIds (array): Optional parameter to filter device availabilities by network ID. This filter uses multiple exact matches. - - productTypes (array): Optional parameter to filter device availabilities by device product types. This filter uses multiple exact matches. - - serials (array): Optional parameter to filter device availabilities by device serial numbers. This filter uses multiple exact matches. - - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). This filter uses multiple exact matches. - - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - name (string): The name of the configuration template + - timeZone (string): The timezone of the configuration template. For a list of allowed timezones, please see the 'TZ' column in the table in this article. Not applicable if copying from existing network or template + - copyFromNetworkId (string): The ID of the network or config template to copy configuration from """ kwargs.update(locals()) - if "tagsFilterType" in kwargs: - options = ["withAllTags", "withAnyTags"] - assert kwargs["tagsFilterType"] in options, ( - f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["organizations", "monitor", "devices", "powerModules", "statuses", "byDevice"], - "operation": "getOrganizationDevicesPowerModulesStatusesByDevice", + "tags": ["organizations", "configure", "configTemplates"], + "operation": "createOrganizationConfigTemplate", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/powerModules/statuses/byDevice" - - query_params = [ - "perPage", - "startingAfter", - "endingBefore", - "networkIds", - "productTypes", - "serials", - "tags", - "tagsFilterType", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + resource = f"/organizations/{organizationId}/configTemplates" - array_params = [ - "networkIds", - "productTypes", - "serials", - "tags", + body_params = [ + "name", + "timeZone", + "copyFromNetworkId", ] - for k, v in kwargs.items(): - if k.strip() in array_params: - params[f"{k.strip()}[]"] = kwargs[f"{k}"] - params.pop(k.strip()) + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationDevicesPowerModulesStatusesByDevice: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"createOrganizationConfigTemplate: ignoring unrecognized kwargs: {invalid}") - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.post(metadata, resource, payload) - def getOrganizationDevicesProvisioningStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationConfigTemplate(self, organizationId: str, configTemplateId: str): """ - **List the provisioning statuses information for devices in an organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-provisioning-statuses + **Return a single configuration template** + https://developer.cisco.com/meraki/api-v1/#!get-organization-config-template - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - - 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. - - networkIds (array): Optional parameter to filter device by network ID. This filter uses multiple exact matches. - - productTypes (array): Optional parameter to filter device by device product types. This filter uses multiple exact matches. - - serials (array): Optional parameter to filter device by device serial numbers. This filter uses multiple exact matches. - - status (string): An optional parameter to filter devices by the provisioning status. Accepted statuses: unprovisioned, incomplete, complete. - - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). This filter uses multiple exact matches. - - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - configTemplateId (string): Config template ID """ - kwargs.update(locals()) - - if "status" in kwargs: - options = ["complete", "incomplete", "unprovisioned"] - assert kwargs["status"] in options, ( - f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' - ) - if "tagsFilterType" in kwargs: - options = ["withAllTags", "withAnyTags"] - assert kwargs["tagsFilterType"] in options, ( - f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["organizations", "monitor", "devices", "provisioning", "statuses"], - "operation": "getOrganizationDevicesProvisioningStatuses", + "tags": ["organizations", "configure", "configTemplates"], + "operation": "getOrganizationConfigTemplate", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/provisioning/statuses" + configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") + resource = f"/organizations/{organizationId}/configTemplates/{configTemplateId}" - query_params = [ - "perPage", - "startingAfter", - "endingBefore", - "networkIds", - "productTypes", - "serials", - "status", - "tags", - "tagsFilterType", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + return self._session.get(metadata, resource) - array_params = [ - "networkIds", - "productTypes", - "serials", - "tags", + def updateOrganizationConfigTemplate(self, organizationId: str, configTemplateId: str, **kwargs): + """ + **Update a configuration template** + https://developer.cisco.com/meraki/api-v1/#!update-organization-config-template + + - organizationId (string): Organization ID + - configTemplateId (string): Config template ID + - name (string): The name of the configuration template + - timeZone (string): The timezone of the configuration template. For a list of allowed timezones, please see the 'TZ' column in the table in this article. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "configTemplates"], + "operation": "updateOrganizationConfigTemplate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") + resource = f"/organizations/{organizationId}/configTemplates/{configTemplateId}" + + body_params = [ + "name", + "timeZone", ] - for k, v in kwargs.items(): - if k.strip() in array_params: - params[f"{k.strip()}[]"] = kwargs[f"{k}"] - params.pop(k.strip()) + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationDevicesProvisioningStatuses: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"updateOrganizationConfigTemplate: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationConfigTemplate(self, organizationId: str, configTemplateId: str): + """ + **Remove a configuration template** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-config-template + + - organizationId (string): Organization ID + - configTemplateId (string): Config template ID + """ + + metadata = { + "tags": ["organizations", "configure", "configTemplates"], + "operation": "deleteOrganizationConfigTemplate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") + resource = f"/organizations/{organizationId}/configTemplates/{configTemplateId}" + + return self._session.delete(metadata, resource) + + def getOrganizationConfigurationChanges(self, organizationId: str, total_pages=1, direction="prev", **kwargs): + """ + **View the Change Log for your organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-configuration-changes + + - 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" or "prev" (default) page + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 365 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 365 days. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100000. Default is 5000. + - 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. + - networkId (string): Filters on the given network + - adminId (string): Filters on the given Admin + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "configurationChanges"], + "operation": "getOrganizationConfigurationChanges", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/configurationChanges" + + query_params = [ + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + "networkId", + "adminId", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationConfigurationChanges: ignoring unrecognized kwargs: {invalid}") return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationDevices(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the status of every Meraki device in the organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-statuses + **List the devices in an organization that have been assigned to a network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5000. Default is 1000. - 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. - - networkIds (array): Optional parameter to filter devices by network ids. - - serials (array): Optional parameter to filter devices by serials. - - statuses (array): Optional parameter to filter devices by statuses. Valid statuses are ["online", "alerting", "offline", "dormant"]. - - productTypes (array): An optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. - - models (array): Optional parameter to filter devices by models. - - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). - - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - configurationUpdatedAfter (string): Filter results by whether or not the device's configuration has been updated after the given timestamp + - networkIds (array): Optional parameter to filter devices by network. + - productTypes (array): Optional parameter to filter devices by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - tags (array): Optional parameter to filter devices by tags. + - tagsFilterType (string): Optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return networks which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - name (string): Optional parameter to filter devices by name. All returned devices will have a name that contains the search term or is an exact match. + - mac (string): Optional parameter to filter devices by MAC address. All returned devices will have a MAC address that contains the search term or is an exact match. + - serial (string): Optional parameter to filter devices by serial number. All returned devices will have a serial number that contains the search term or is an exact match. + - model (string): Optional parameter to filter devices by model. All returned devices will have a model that contains the search term or is an exact match. + - macs (array): Optional parameter to filter devices by one or more MAC addresses. All returned devices will have a MAC address that is an exact match. + - serials (array): Optional parameter to filter devices by one or more serial numbers. All returned devices will have a serial number that is an exact match. + - sensorMetrics (array): Optional parameter to filter devices by the metrics that they provide. Only applies to sensor devices. + - sensorAlertProfileIds (array): Optional parameter to filter devices by the alert profiles that are bound to them. Only applies to sensor devices. + - models (array): Optional parameter to filter devices by one or more models. All returned devices will have a model that is an exact match. """ kwargs.update(locals()) @@ -4105,33 +4499,42 @@ def getOrganizationDevicesStatuses(self, organizationId: str, total_pages=1, dir ) metadata = { - "tags": ["organizations", "monitor", "devices", "statuses"], - "operation": "getOrganizationDevicesStatuses", + "tags": ["organizations", "configure", "devices"], + "operation": "getOrganizationDevices", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/statuses" + resource = f"/organizations/{organizationId}/devices" query_params = [ "perPage", "startingAfter", "endingBefore", + "configurationUpdatedAfter", "networkIds", - "serials", - "statuses", "productTypes", - "models", "tags", "tagsFilterType", + "name", + "mac", + "serial", + "model", + "macs", + "serials", + "sensorMetrics", + "sensorAlertProfileIds", + "models", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", - "serials", - "statuses", "productTypes", - "models", "tags", + "macs", + "serials", + "sensorMetrics", + "sensorAlertProfileIds", + "models", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4142,38 +4545,63 @@ def getOrganizationDevicesStatuses(self, organizationId: str, total_pages=1, dir 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"getOrganizationDevicesStatuses: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"getOrganizationDevices: ignoring unrecognized kwargs: {invalid}") return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesStatusesOverview(self, organizationId: str, **kwargs): + def getOrganizationDevicesAvailabilities(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Return an overview of current device statuses** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-statuses-overview + **List the availability information for devices in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-availabilities - organizationId (string): Organization ID - - productTypes (array): An optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. - - networkIds (array): An optional parameter to filter device statuses by network. + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter device availabilities by network ID. This filter uses multiple exact matches. + - productTypes (array): Optional parameter to filter device availabilities by device product types. This filter uses multiple exact matches. Valid types are wireless, appliance, switch, camera, cellularGateway, sensor, wirelessController, and campusGateway + - serials (array): Optional parameter to filter device availabilities by device serial numbers. This filter uses multiple exact matches. + - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). This filter uses multiple exact matches. + - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - statuses (array): Optional parameter to filter device availabilities by device status. This filter uses multiple exact matches. """ kwargs.update(locals()) + if "tagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["tagsFilterType"] in options, ( + f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["organizations", "monitor", "devices", "statuses", "overview"], - "operation": "getOrganizationDevicesStatusesOverview", + "tags": ["organizations", "monitor", "devices", "availabilities"], + "operation": "getOrganizationDevicesAvailabilities", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/statuses/overview" + resource = f"/organizations/{organizationId}/devices/availabilities" query_params = [ - "productTypes", + "perPage", + "startingAfter", + "endingBefore", "networkIds", + "productTypes", + "serials", + "tags", + "tagsFilterType", + "statuses", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "productTypes", "networkIds", + "productTypes", + "serials", + "tags", + "statuses", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4184,42 +4612,56 @@ def getOrganizationDevicesStatusesOverview(self, organizationId: str, **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"getOrganizationDevicesStatusesOverview: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"getOrganizationDevicesAvailabilities: ignoring unrecognized kwargs: {invalid}") - return self._session.get(metadata, resource, params) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesSystemMemoryUsageHistoryByInterval( + def getOrganizationDevicesAvailabilitiesChangeHistory( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Return the memory utilization history in kB for devices in the organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-system-memory-usage-history-by-interval + **List the availability history information for devices in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-availabilities-change-history - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 3600, 14400. The default is 300. Interval is calculated if time params are provided. - - networkIds (array): Optional parameter to filter the result set by the included set of network IDs + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. - serials (array): Optional parameter to filter device availabilities history by device serial numbers - - productTypes (array): Optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - productTypes (array): Optional parameter to filter device availabilities history by device product types + - networkIds (array): Optional parameter to filter device availabilities history by network IDs + - statuses (array): Optional parameter to filter device availabilities history by device statuses + - categories (array): Optional parameter to filter device availabilities history by categories of status, reboot, or upgrade + - networkTags (array): Optional parameter to filter device availabilities history by network tags. The filtering is case-sensitive. If tags are included, 'networkTagsFilterType' should also be included (see below). + - networkTagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return networks which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - deviceTags (array): Optional parameter to filter device availabilities history by device tags. The filtering is case-sensitive. If tags are included, 'deviceTagsFilterType' should also be included (see below). + - deviceTagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. """ kwargs.update(locals()) + if "networkTagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["networkTagsFilterType"] in options, ( + f'''"networkTagsFilterType" cannot be "{kwargs["networkTagsFilterType"]}", & must be set to one of: {options}''' + ) + if "deviceTagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["deviceTagsFilterType"] in options, ( + f'''"deviceTagsFilterType" cannot be "{kwargs["deviceTagsFilterType"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["organizations", "monitor", "devices", "system", "memory", "usage", "history", "byInterval"], - "operation": "getOrganizationDevicesSystemMemoryUsageHistoryByInterval", + "tags": ["organizations", "monitor", "devices", "availabilities", "changeHistory"], + "operation": "getOrganizationDevicesAvailabilitiesChangeHistory", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/system/memory/usage/history/byInterval" + resource = f"/organizations/{organizationId}/devices/availabilities/changeHistory" query_params = [ "perPage", @@ -4228,17 +4670,26 @@ def getOrganizationDevicesSystemMemoryUsageHistoryByInterval( "t0", "t1", "timespan", - "interval", - "networkIds", "serials", "productTypes", + "networkIds", + "statuses", + "categories", + "networkTags", + "networkTagsFilterType", + "deviceTags", + "deviceTagsFilterType", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "networkIds", "serials", "productTypes", + "networkIds", + "statuses", + "categories", + "networkTags", + "deviceTags", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4250,15 +4701,2460 @@ def getOrganizationDevicesSystemMemoryUsageHistoryByInterval( 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"getOrganizationDevicesSystemMemoryUsageHistoryByInterval: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationDevicesAvailabilitiesChangeHistory: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesUplinksAddressesByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationDevicesBootsHistory(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the current uplink addresses for devices in an organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-uplinks-addresses-by-device + **Returns the history of device boots in reverse chronological order (most recent first)** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-boots-history + + - 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 + - t0 (string): The beginning of the timespan for the data. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 730 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 730 days. + - serials (array): Optional parameter to filter device by device serial numbers. This filter uses multiple exact matches. + - productTypes (array): Optional parameter to filter devices by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - mostRecentPerDevice (boolean): If true, only the most recent boot for each device is returned. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'descending'. + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "devices", "boots", "history"], + "operation": "getOrganizationDevicesBootsHistory", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/boots/history" + + query_params = [ + "t0", + "t1", + "timespan", + "serials", + "productTypes", + "mostRecentPerDevice", + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + "productTypes", + ] + 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"getOrganizationDevicesBootsHistory: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesBootsOverviewByDevice(self, organizationId: str, **kwargs): + """ + **Summarizes device reboots across an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-boots-overview-by-device + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - productTypes (array): An optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "boots", "overview", "byDevice"], + "operation": "getOrganizationDevicesBootsOverviewByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/boots/overview/byDevice" + + query_params = [ + "networkIds", + "productTypes", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "productTypes", + ] + 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"getOrganizationDevicesBootsOverviewByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationDevicesCellularDataDevices(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List devices eligible for Cellular Data Management profile assignment in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-devices + + - 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 + - includeAssigned (boolean): Whether to include devices that have already been assigned to a Cellular Data Management Profile + - includedSerials (array): List of device serials to force-include in the response when the devices would otherwise be filtered out. This override is primarily useful for keeping selected devices visible while paging through results. Maximum 1000 serials. + - excludedSerials (array): List of device serials to force-exclude from the response when the devices would otherwise be returned. This override is primarily useful for hiding selected devices while paging through results. Maximum 1000 serials. + - includedProfileIds (array): List of Cellular Data Management Profile IDs to include in the results. Maximum 1000 profile IDs. + - excludedProfileIds (array): List of Cellular Data Management Profile IDs to exclude from the results. Maximum 1000 profile IDs. + - deviceTypes (array): List of device types to filter by. Maximum 1000 device types. + - slots (array): List of SIM slot types that devices must support. Accepted values are sim1, sim2, and esim. Maximum 3 slots. + - name (string): Name of the device to filter by (partial matches allowed) + - serials (array): List of device serials to filter by. Maximum 1000 serials. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "cellular", "data"], + "operation": "getOrganizationDevicesCellularDataDevices", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/devices" + + query_params = [ + "includeAssigned", + "includedSerials", + "excludedSerials", + "includedProfileIds", + "excludedProfileIds", + "deviceTypes", + "slots", + "name", + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "includedSerials", + "excludedSerials", + "includedProfileIds", + "excludedProfileIds", + "deviceTypes", + "slots", + "serials", + ] + 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"getOrganizationDevicesCellularDataDevices: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCellularDataProfiles(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List cellular data management profiles in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-profiles + + - 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 + - profileIds (array): Optional parameter to filter the results by Data Management Profile ID. + - serials (array): Devices to find Cellular Data Management Profiles for. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], + "operation": "getOrganizationDevicesCellularDataProfiles", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles" + + query_params = [ + "profileIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "profileIds", + "serials", + ] + 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"getOrganizationDevicesCellularDataProfiles: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationDevicesCellularDataProfile( + self, organizationId: str, name: str, description: str, rules: list, **kwargs + ): + """ + **Add a cellular data management profile to this organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-cellular-data-profile + + - organizationId (string): Organization ID + - name (string): Name of the profile to be added. This must be unique. + - description (string): Description of the profile to be added. + - rules (array): The rules associated with this profile. At least one rule and no more than two rules may be defined for a profile. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], + "operation": "createOrganizationDevicesCellularDataProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles" + + body_params = [ + "name", + "description", + "rules", + ] + 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"createOrganizationDevicesCellularDataProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationDevicesCellularDataProfilesAssignments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List Cellular Data Management Profile assignments in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-profiles-assignments + + - 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 + - profileIds (array): Optional parameter to find assignments by Profile IDs. Maximum 1000 profile IDs. + - serials (array): Optional parameter to find assignments by Device Serials. Maximum 1000 serials. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles", "assignments"], + "operation": "getOrganizationDevicesCellularDataProfilesAssignments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/assignments" + + query_params = [ + "profileIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "profileIds", + "serials", + ] + 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"getOrganizationDevicesCellularDataProfilesAssignments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def batchOrganizationDevicesCellularDataProfilesAssignmentsCreate(self, organizationId: str, items: list, **kwargs): + """ + **Assign devices to a Cellular Data Management Profile in batch** + https://developer.cisco.com/meraki/api-v1/#!batch-organization-devices-cellular-data-profiles-assignments-create + + - organizationId (string): Organization ID + - items (array): List of device-to-profile assignments to create. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles", "assignments"], + "operation": "batchOrganizationDevicesCellularDataProfilesAssignmentsCreate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/assignments/batchCreate" + + 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"batchOrganizationDevicesCellularDataProfilesAssignmentsCreate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def bulkOrganizationDevicesCellularDataProfilesAssignmentsDelete(self, organizationId: str, items: list, **kwargs): + """ + **Unassign devices from a Cellular Data Management Profile in batch** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-cellular-data-profiles-assignments-delete + + - organizationId (string): Organization ID + - items (array): List of device-to-profile assignments to remove. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles", "assignments"], + "operation": "bulkOrganizationDevicesCellularDataProfilesAssignmentsDelete", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/assignments/bulkDelete" + + 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"bulkOrganizationDevicesCellularDataProfilesAssignmentsDelete: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationDevicesCellularDataProfile(self, organizationId: str, rules: list, profileId: str, **kwargs): + """ + **Update a Cellular Data Management Profile** + https://developer.cisco.com/meraki/api-v1/#!update-organization-devices-cellular-data-profile + + - organizationId (string): Organization ID + - rules (array): The rules associated with this profile. At least one rule and no more than two rules may be defined for a profile. + - profileId (string): ID of the profile. + - description (string): New description of the profile. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], + "operation": "updateOrganizationDevicesCellularDataProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + profileId = urllib.parse.quote(str(profileId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/{profileId}" + + body_params = [ + "profileId", + "description", + "rules", + ] + 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"updateOrganizationDevicesCellularDataProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationDevicesCellularDataProfile(self, organizationId: str, profileId: str): + """ + **Delete a cellular data management profile from this organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-devices-cellular-data-profile + + - organizationId (string): Organization ID + - profileId (string): Profile ID + """ + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], + "operation": "deleteOrganizationDevicesCellularDataProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + profileId = urllib.parse.quote(str(profileId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/{profileId}" + + return self._session.delete(metadata, resource) + + def getOrganizationDevicesCellularDataUsageByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List current cellular data usage for devices in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-usage-by-device + + - 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 + - serials (array): Filter the results by device serials. Maximum 1000 serials. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "cellular", "data", "usage", "byDevice"], + "operation": "getOrganizationDevicesCellularDataUsageByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/usage/byDevice" + + query_params = [ + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCellularDataUsageByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCellularDataUsageHistoryByDeviceByInterval( + self, organizationId: str, serials: list, total_pages=1, direction="next", **kwargs + ): + """ + **List historical cellular data usage grouped by device and interval in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-usage-history-by-device-by-interval + + - organizationId (string): Organization ID + - serials (array): Required parameter to filter the results by device serials. Maximum 10 serials. + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10. Default is 5. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 366 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 86400. Interval is calculated if time params are provided. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "cellular", "data", "usage", "history", "byDevice", "byInterval"], + "operation": "getOrganizationDevicesCellularDataUsageHistoryByDeviceByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/usage/history/byDevice/byInterval" + + query_params = [ + "serials", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCellularDataUsageHistoryByDeviceByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCellularGeolocations(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the latest cellular geolocation telemetry for devices in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-geolocations + + - 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 + - serials (array): Optional parameter to filter the results by device serials. Maximum 1000 serials. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "cellular", "geolocations"], + "operation": "getOrganizationDevicesCellularGeolocations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/geolocations" + + query_params = [ + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCellularGeolocations: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCellularUplinksBandsByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the latest cellular uplink signal information for devices in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-uplinks-bands-by-device + + - 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 + - serials (array): Optional parameter to filter the results by device serials. Maximum 1000 serials. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "cellular", "uplinks", "bands", "byDevice"], + "operation": "getOrganizationDevicesCellularUplinksBandsByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/uplinks/bands/byDevice" + + query_params = [ + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCellularUplinksBandsByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCellularUplinksTowersByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the latest cellular tower information for devices in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-uplinks-towers-by-device + + - 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 + - serials (array): Optional parameter to filter the results by device serials. Maximum 1000 serials. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "cellular", "uplinks", "towers", "byDevice"], + "operation": "getOrganizationDevicesCellularUplinksTowersByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/uplinks/towers/byDevice" + + query_params = [ + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCellularUplinksTowersByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCliConfigs(self, organizationId: str, serials: list, total_pages=1, direction="next", **kwargs): + """ + **Retrieve the history of running configurations for IOS-XE devices** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cli-configs + + - organizationId (string): Organization ID + - serials (array): Device serials to include in the response + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 20. + - 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. + - isFavorite (boolean): Whether to return only favorited configs + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "cli", "configs"], + "operation": "getOrganizationDevicesCliConfigs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cli/configs" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "serials", + "isFavorite", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCliConfigs: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCliConfigsDetails( + self, organizationId: str, configId: str, serials: list, total_pages=1, direction="next", **kwargs + ): + """ + **Retrieve the full contents for a given IOS-XE device configuration** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cli-configs-details + + - organizationId (string): Organization ID + - configId (string): Config ID + - serials (array): Device serials to use when locating the config record + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5. Default is 5. + - 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": ["organizations", "configure", "devices", "cli", "configs", "details"], + "operation": "getOrganizationDevicesCliConfigsDetails", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cli/configs/details" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "configId", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCliConfigsDetails: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getDeviceConfigRestores(self, organizationId: str, serials: list, **kwargs): + """ + **Return restore status entries for IOS-XE device configurations** + https://developer.cisco.com/meraki/api-v1/#!get-device-config-restores + + - organizationId (string): Organization ID + - serials (array): Device serial numbers + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "cli", "configs", "restores"], + "operation": "getDeviceConfigRestores", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cli/configs/restores" + + query_params = [ + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getDeviceConfigRestores: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def createOrganizationDevicesControllerMigration(self, organizationId: str, serials: list, target: str, **kwargs): + """ + **Migrate devices to another controller or management mode** + https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-controller-migration + + - organizationId (string): Organization ID + - serials (array): A list of Meraki Serials to migrate + - target (string): The controller or management mode to which the devices will be migrated + """ + + kwargs = locals() + + if "target" in kwargs: + options = ["wirelessController"] + assert kwargs["target"] in options, ( + f'''"target" cannot be "{kwargs["target"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "devices", "controller", "migrations"], + "operation": "createOrganizationDevicesControllerMigration", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/controller/migrations" + + body_params = [ + "serials", + "target", + ] + 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"createOrganizationDevicesControllerMigration: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationDevicesControllerMigrations(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Retrieve device migration statuses in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-controller-migrations + + - 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 + - serials (array): A list of Meraki Serials for which to retrieve migrations + - networkIds (array): Filter device migrations by network IDs + - target (string): Filter device migrations by target destination + - 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. + """ + + kwargs.update(locals()) + + if "target" in kwargs: + options = ["wirelessController"] + assert kwargs["target"] in options, ( + f'''"target" cannot be "{kwargs["target"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "devices", "controller", "migrations"], + "operation": "getOrganizationDevicesControllerMigrations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/controller/migrations" + + query_params = [ + "serials", + "networkIds", + "target", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + "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"getOrganizationDevicesControllerMigrations: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def bulkUpdateOrganizationDevicesDetails(self, organizationId: str, serials: list, details: list, **kwargs): + """ + **Updating device details (currently only used for Catalyst devices)** + https://developer.cisco.com/meraki/api-v1/#!bulk-update-organization-devices-details + + - organizationId (string): Organization ID + - serials (array): A list of serials of devices to update + - details (array): An array of details + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "details", "bulkUpdate"], + "operation": "bulkUpdateOrganizationDevicesDetails", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/details/bulkUpdate" + + body_params = [ + "serials", + "details", + ] + 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"bulkUpdateOrganizationDevicesDetails: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationDevicesMemoryByDevice(self, organizationId: str, networkIds: list, productTypes: list, **kwargs): + """ + **Summarizes memory status across devices of a given network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-memory-by-device + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - productTypes (array): Parameter to filter device availabilities by device product types. This filter uses multiple exact matches. + - usageThreshold (number): Threshold of device memory utilization expressed as a percent. Filters out all devices below this value. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 1 hour and be less than or equal to 7 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "memory", "byDevice"], + "operation": "getOrganizationDevicesMemoryByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/memory/byDevice" + + query_params = [ + "networkIds", + "productTypes", + "usageThreshold", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "productTypes", + ] + 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"getOrganizationDevicesMemoryByDevice: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getOrganizationDevicesOverviewByModel(self, organizationId: str, **kwargs): + """ + **Lists the count for each device model** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-overview-by-model + + - organizationId (string): Organization ID + - models (array): Optional parameter to filter devices by one or more models. All returned devices will have a model that is an exact match. + - networkIds (array): Optional parameter to filter devices by networkId. + - productTypes (array): Optional parameter to filter device by device product types. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "overview", "byModel"], + "operation": "getOrganizationDevicesOverviewByModel", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/overview/byModel" + + query_params = [ + "models", + "networkIds", + "productTypes", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "models", + "networkIds", + "productTypes", + ] + 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"getOrganizationDevicesOverviewByModel: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationDevicesPacketCaptureCaptures(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List Packet Captures** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-packet-capture-captures + + - 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 + - captureIds (array): Return the packet captures of the specified capture ids + - networkIds (array): Return the packet captures of the specified network(s) + - serials (array): Return the packet captures of the specified device(s) + - process (array): Return the packet captures of the specified process + - captureStatus (array): Return the packet captures of the specified capture status + - name (array): Return the packet captures matching the specified name + - clientMac (array): Return the packet captures matching the specified client macs + - notes (string): Return the packet captures matching the specified notes + - deviceName (string): Return the packet captures matching the specified device name + - adminName (string): Return the packet captures matching the admin name + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 365 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 365 days. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'descending'. + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], + "operation": "getOrganizationDevicesPacketCaptureCaptures", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures" + + query_params = [ + "captureIds", + "networkIds", + "serials", + "process", + "captureStatus", + "name", + "clientMac", + "notes", + "deviceName", + "adminName", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "captureIds", + "networkIds", + "serials", + "process", + "captureStatus", + "name", + "clientMac", + ] + 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"getOrganizationDevicesPacketCaptureCaptures: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationDevicesPacketCaptureCapture(self, organizationId: str, serials: list, name: str, **kwargs): + """ + **Perform a packet capture on a device and store in Meraki Cloud** + https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-packet-capture-capture + + - organizationId (string): Organization ID + - serials (array): The serial(s) of the device(s) + - name (string): Name of packet capture file + - outputType (string): Output type of packet capture file. Possible values: text, pcap, cloudshark, or upload_to_cloud + - destination (string): Destination of packet capture file. Possible values: [upload_to_cloud] + - ports (string): Ports of packet capture file, comma-separated + - notes (string): Reason for taking the packet capture + - duration (integer): Duration in seconds of packet capture + - filterExpression (string): Filter expression for packet capture + - interface (string): Interface of the device + - advanced (object): Advanced filters for IOSXE devices (supported for Campus Gateway devices only) + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], + "operation": "createOrganizationDevicesPacketCaptureCapture", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures" + + body_params = [ + "serials", + "name", + "outputType", + "destination", + "ports", + "notes", + "duration", + "filterExpression", + "interface", + "advanced", + ] + 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"createOrganizationDevicesPacketCaptureCapture: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def bulkOrganizationDevicesPacketCaptureCapturesCreate(self, organizationId: str, devices: list, name: str, **kwargs): + """ + **Perform a packet capture on multiple devices and store in Meraki Cloud.** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-packet-capture-captures-create + + - organizationId (string): Organization ID + - devices (array): Device details (maximum of 20 devices allowed) + - name (string): Name of packet capture file + - notes (string): Reason for capture + - duration (integer): Duration of the capture in seconds + - filterExpression (string): Filter expression for the capture + - advanced (object): Advanced capture options (optional) + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], + "operation": "bulkOrganizationDevicesPacketCaptureCapturesCreate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures/bulkCreate" + + body_params = [ + "devices", + "notes", + "duration", + "filterExpression", + "name", + "advanced", + ] + 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"bulkOrganizationDevicesPacketCaptureCapturesCreate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def bulkOrganizationDevicesPacketCaptureCapturesDelete(self, organizationId: str, captureIds: list, **kwargs): + """ + **BulkDelete packet captures from cloud** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-packet-capture-captures-delete + + - organizationId (string): Organization ID + - captureIds (array): Delete the packet captures of the specified capture ids + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], + "operation": "bulkOrganizationDevicesPacketCaptureCapturesDelete", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures/bulkDelete" + + body_params = [ + "captureIds", + ] + 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"bulkOrganizationDevicesPacketCaptureCapturesDelete: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def deleteOrganizationDevicesPacketCaptureCapture(self, organizationId: str, captureId: str): + """ + **Delete a single packet capture from cloud using captureId** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-devices-packet-capture-capture + + - organizationId (string): Organization ID + - captureId (string): Capture ID + """ + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], + "operation": "deleteOrganizationDevicesPacketCaptureCapture", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + captureId = urllib.parse.quote(str(captureId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures/{captureId}" + + return self._session.delete(metadata, resource) + + def generateOrganizationDevicesPacketCaptureCaptureDownloadUrl(self, organizationId: str, captureId: str): + """ + **Get presigned download URL for given packet capture id** + https://developer.cisco.com/meraki/api-v1/#!generate-organization-devices-packet-capture-capture-download-url + + - organizationId (string): Organization ID + - captureId (string): Capture ID + """ + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures", "downloadUrl"], + "operation": "generateOrganizationDevicesPacketCaptureCaptureDownloadUrl", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + captureId = urllib.parse.quote(str(captureId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures/{captureId}/downloadUrl/generate" + + return self._session.post(metadata, resource) + + def stopOrganizationDevicesPacketCaptureCapture(self, organizationId: str, captureId: str, serials: list, **kwargs): + """ + **Stop a specific packet capture (not supported for Catalyst devices)** + https://developer.cisco.com/meraki/api-v1/#!stop-organization-devices-packet-capture-capture + + - organizationId (string): Organization ID + - captureId (string): Capture ID + - serials (array): The serial(s) of the device(s) to stop the capture on + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], + "operation": "stopOrganizationDevicesPacketCaptureCapture", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + captureId = urllib.parse.quote(str(captureId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures/{captureId}/stop" + + body_params = [ + "serials", + ] + 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"stopOrganizationDevicesPacketCaptureCapture: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationDevicesPacketCaptureOpportunisticByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the Opportunistic Pcap settings of an organization by network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-packet-capture-opportunistic-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 results by network. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'descending'. + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "opportunistic", "byNetwork"], + "operation": "getOrganizationDevicesPacketCaptureOpportunisticByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/opportunistic/byNetwork" + + query_params = [ + "networkIds", + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + ] + 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"getOrganizationDevicesPacketCaptureOpportunisticByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesPacketCaptureSchedules(self, organizationId: str, **kwargs): + """ + **List the Packet Capture Schedules** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-packet-capture-schedules + + - organizationId (string): Organization ID + - scheduleIds (array): Return the packet captures schedules of the specified packet capture schedule ids + - networkIds (array): Return the scheduled packet captures of the specified network(s) + - deviceIds (array): Return the scheduled packet captures of the specified device(s) + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], + "operation": "getOrganizationDevicesPacketCaptureSchedules", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules" + + query_params = [ + "scheduleIds", + "networkIds", + "deviceIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "scheduleIds", + "networkIds", + "deviceIds", + ] + 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"getOrganizationDevicesPacketCaptureSchedules: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def createOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, devices: list, **kwargs): + """ + **Create a schedule for packet capture** + https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-packet-capture-schedule + + - organizationId (string): Organization ID + - devices (array): device details + - name (string): Name of the packet capture file + - notes (string): Reason for capture + - duration (integer): Duration of the capture in seconds + - filterExpression (string): Filter expression for the capture + - enabled (boolean): Enable or disable the schedule + - schedule (object): Schedule details + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], + "operation": "createOrganizationDevicesPacketCaptureSchedule", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules" + + body_params = [ + "devices", + "name", + "notes", + "duration", + "filterExpression", + "enabled", + "schedule", + ] + 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"createOrganizationDevicesPacketCaptureSchedule: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def bulkOrganizationDevicesPacketCaptureSchedulesDelete(self, organizationId: str, scheduleIds: list, **kwargs): + """ + **Delete packet capture schedules** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-packet-capture-schedules-delete + + - organizationId (string): Organization ID + - scheduleIds (array): Delete the packet capture schedules of the specified schedule ids + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], + "operation": "bulkOrganizationDevicesPacketCaptureSchedulesDelete", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/bulkDelete" + + body_params = [ + "scheduleIds", + ] + 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"bulkOrganizationDevicesPacketCaptureSchedulesDelete: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def reorderOrganizationDevicesPacketCaptureSchedules(self, organizationId: str, order: list, **kwargs): + """ + **Bulk update priorities of pcap schedules** + https://developer.cisco.com/meraki/api-v1/#!reorder-organization-devices-packet-capture-schedules + + - organizationId (string): Organization ID + - order (array): Array of schedule IDs and their priorities to reorder. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], + "operation": "reorderOrganizationDevicesPacketCaptureSchedules", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/reorder" + + body_params = [ + "order", + ] + 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"reorderOrganizationDevicesPacketCaptureSchedules: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, scheduleId: str, devices: list, **kwargs): + """ + **Update a schedule for packet capture** + https://developer.cisco.com/meraki/api-v1/#!update-organization-devices-packet-capture-schedule + + - organizationId (string): Organization ID + - scheduleId (string): Schedule ID + - devices (array): device details + - name (string): Name of the packet capture file + - notes (string): Reason for capture + - duration (integer): Duration of the capture in seconds + - filterExpression (string): Filter expression for the capture + - enabled (boolean): Enable or disable the schedule + - schedule (object): Schedule details + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], + "operation": "updateOrganizationDevicesPacketCaptureSchedule", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + scheduleId = urllib.parse.quote(str(scheduleId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/{scheduleId}" + + body_params = [ + "devices", + "name", + "notes", + "duration", + "filterExpression", + "enabled", + "schedule", + ] + 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"updateOrganizationDevicesPacketCaptureSchedule: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, scheduleId: str): + """ + **Delete schedule from cloud** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-devices-packet-capture-schedule + + - organizationId (string): Organization ID + - scheduleId (string): Delete the capture schedules of the specified capture schedule id + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], + "operation": "deleteOrganizationDevicesPacketCaptureSchedule", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + scheduleId = urllib.parse.quote(str(scheduleId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/{scheduleId}" + + return self._session.delete(metadata, resource) + + def tasksOrganizationDevicesPacketCapture(self, organizationId: str, packetId: str, task: str, **kwargs): + """ + **Enqueues a task for a specific packet capture** + https://developer.cisco.com/meraki/api-v1/#!tasks-organization-devices-packet-capture + + - organizationId (string): Organization ID + - packetId (string): Packet ID + - task (string): Type of task to enqueue. It can be one of: ["analysis", "reasoning", "summary", "highlights", "title", "flow"] + - networkId (string): Parameter to validate authorization by network access + """ + + kwargs.update(locals()) + + if "task" in kwargs: + options = ["analysis", "flow", "highlights", "reasoning", "summary", "title"] + assert kwargs["task"] in options, f'''"task" cannot be "{kwargs["task"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCaptures"], + "operation": "tasksOrganizationDevicesPacketCapture", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + packetId = urllib.parse.quote(str(packetId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCaptures/{packetId}/tasks" + + body_params = [ + "networkId", + "task", + ] + 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"tasksOrganizationDevicesPacketCapture: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationDevicesPacketCaptureTask(self, organizationId: str, packetId: str, id: str, **kwargs): + """ + **Retrieves packet capture analysis result for a specific packet capture task.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-packet-capture-task + + - organizationId (string): Organization ID + - packetId (string): Packet ID + - id (string): ID + - networkId (string): Optional parameter to validate authorization by network access + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCaptures", "tasks"], + "operation": "getOrganizationDevicesPacketCaptureTask", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + packetId = urllib.parse.quote(str(packetId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/devices/packetCaptures/{packetId}/tasks/{id}" + + query_params = [ + "networkId", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationDevicesPacketCaptureTask: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def bulkOrganizationDevicesPlacementPositionsUpdate(self, organizationId: str, serials: list, **kwargs): + """ + **Bulk update the attributes related to positions for provided devices** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-placement-positions-update + + - organizationId (string): Organization ID + - serials (array): List of device serials on a floor plan to update + - height (object): Height of the devices on the floor plan + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "placement", "positions"], + "operation": "bulkOrganizationDevicesPlacementPositionsUpdate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/placement/positions/bulkUpdate" + + body_params = [ + "serials", + "height", + ] + 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"bulkOrganizationDevicesPlacementPositionsUpdate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationDevicesPowerModulesStatusesByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the most recent status information for power modules in rackmount MX and MS devices that support them** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-power-modules-statuses-by-device + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter device availabilities by network ID. This filter uses multiple exact matches. + - productTypes (array): Optional parameter to filter device availabilities by device product types. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter device availabilities by device serial numbers. This filter uses multiple exact matches. + - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). This filter uses multiple exact matches. + - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + """ + + kwargs.update(locals()) + + if "tagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["tagsFilterType"] in options, ( + f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "monitor", "devices", "powerModules", "statuses", "byDevice"], + "operation": "getOrganizationDevicesPowerModulesStatusesByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/powerModules/statuses/byDevice" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "productTypes", + "serials", + "tags", + "tagsFilterType", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "productTypes", + "serials", + "tags", + ] + 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"getOrganizationDevicesPowerModulesStatusesByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesProvisioningStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the provisioning statuses information for devices in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-provisioning-statuses + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter device by network ID. This filter uses multiple exact matches. + - productTypes (array): Optional parameter to filter device by device product types. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter device by device serial numbers. This filter uses multiple exact matches. + - status (string): An optional parameter to filter devices by the provisioning status. Accepted statuses: unprovisioned, incomplete, complete. + - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). This filter uses multiple exact matches. + - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + """ + + kwargs.update(locals()) + + if "status" in kwargs: + options = ["complete", "incomplete", "unprovisioned"] + assert kwargs["status"] in options, ( + f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' + ) + if "tagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["tagsFilterType"] in options, ( + f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "monitor", "devices", "provisioning", "statuses"], + "operation": "getOrganizationDevicesProvisioningStatuses", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/provisioning/statuses" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "productTypes", + "serials", + "status", + "tags", + "tagsFilterType", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "productTypes", + "serials", + "tags", + ] + 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"getOrganizationDevicesProvisioningStatuses: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesSoftwareUpdatesOverviewsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns details about software updates for networks within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-software-updates-overviews-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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 30. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'ascending'. + - sortKey (string): Specify key to order the list of networks. + - configSource (string): Limit the list of networks to those that contain devices with the specified config source + - networkIds (array): Limit the list of networks to those that match the provided network IDs + - networkGroupIds (array): Limit the list of networks to those that belong to one of the provided network group IDs. + - productTypes (array): Limit the list of product types included for each network + - networkName (string): Limit the list of networks to those whose name contains the given search string. + - versionIds (array): Limit the list of networks to those that are currently on one of the provided version IDs. + - firmwareStatus (string): Limit the list of networks to those whose current firmware version has the specified end-of-support status. + - firmwareType (string): Limit the list of networks to those whose current firmware version has the specified release type. + - upgradeDependencyIds (array): Limit the list of networks to those that belong to one of the provided upgrade dependencies. + - upgradeAvailable (boolean): Limit the list of networks by upgrade availability. + - templateRole (string): Limit the list of networks by config template role: non-template only, templates only, or templates and bound networks. + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + if "sortKey" in kwargs: + options = [ + "availability", + "currentVersion", + "firmwareStatus", + "firmwareType", + "lastUpgrade", + "networkGroup", + "networkName", + "networkType", + "scheduledTime", + "scheduledUpgradeVersion", + "upgradeDependency", + ] + assert kwargs["sortKey"] in options, ( + f'''"sortKey" cannot be "{kwargs["sortKey"]}", & must be set to one of: {options}''' + ) + if "configSource" in kwargs: + options = ["cloud", "local"] + assert kwargs["configSource"] in options, ( + f'''"configSource" cannot be "{kwargs["configSource"]}", & must be set to one of: {options}''' + ) + if "firmwareStatus" in kwargs: + options = ["critical", "good", "warning"] + assert kwargs["firmwareStatus"] in options, ( + f'''"firmwareStatus" cannot be "{kwargs["firmwareStatus"]}", & must be set to one of: {options}''' + ) + if "firmwareType" in kwargs: + options = ["beta", "candidate", "stable"] + assert kwargs["firmwareType"] in options, ( + f'''"firmwareType" cannot be "{kwargs["firmwareType"]}", & must be set to one of: {options}''' + ) + if "templateRole" in kwargs: + options = ["bound-templates", "non-template", "templates"] + assert kwargs["templateRole"] in options, ( + f'''"templateRole" cannot be "{kwargs["templateRole"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "devices", "software", "updates", "overviews", "byNetwork"], + "operation": "getOrganizationDevicesSoftwareUpdatesOverviewsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/software/updates/overviews/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + "sortKey", + "configSource", + "networkIds", + "networkGroupIds", + "productTypes", + "networkName", + "versionIds", + "firmwareStatus", + "firmwareType", + "upgradeDependencyIds", + "upgradeAvailable", + "templateRole", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "networkGroupIds", + "productTypes", + "versionIds", + "upgradeDependencyIds", + ] + 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"getOrganizationDevicesSoftwareUpdatesOverviewsByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the status of every Meraki device in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-statuses + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter devices by network ids. + - serials (array): Optional parameter to filter devices by serials. + - statuses (array): Optional parameter to filter devices by statuses. Valid statuses are ["online", "alerting", "offline", "dormant"]. + - productTypes (array): An optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - models (array): Optional parameter to filter devices by models. + - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). + - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - configurationUpdatedAfter (string): Optional parameter to filter results by whether or not the device's configuration has been updated after the given timestamp + """ + + kwargs.update(locals()) + + if "tagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["tagsFilterType"] in options, ( + f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "monitor", "devices", "statuses"], + "operation": "getOrganizationDevicesStatuses", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/statuses" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + "statuses", + "productTypes", + "models", + "tags", + "tagsFilterType", + "configurationUpdatedAfter", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "statuses", + "productTypes", + "models", + "tags", + ] + 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"getOrganizationDevicesStatuses: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesStatusesOverview(self, organizationId: str, **kwargs): + """ + **Return an overview of current device statuses** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-statuses-overview + + - organizationId (string): Organization ID + - productTypes (array): An optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - networkIds (array): An optional parameter to filter device statuses by network. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "statuses", "overview"], + "operation": "getOrganizationDevicesStatusesOverview", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/statuses/overview" + + query_params = [ + "productTypes", + "networkIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "productTypes", + "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"getOrganizationDevicesStatusesOverview: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationDevicesSyslogServersByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Returns syslog servers configured for the networks within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-syslog-servers-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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - networkIds (array): IDs of the networks for which to fetch syslog servers; suggested maximum array size is 100 + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "syslog", "servers", "byNetwork"], + "operation": "getOrganizationDevicesSyslogServersByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/syslog/servers/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationDevicesSyslogServersByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesSyslogServersRolesByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns roles that can be assigned to a syslog server for a given network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-syslog-servers-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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - networkIds (array): IDs of the networks for which to fetch valid syslog server roles; suggested maximum array size is 100 + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "syslog", "servers", "roles", "byNetwork"], + "operation": "getOrganizationDevicesSyslogServersRolesByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/syslog/servers/roles/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationDevicesSyslogServersRolesByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesSystemMemoryUsageHistoryByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Return the memory utilization history in kB for devices in the organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-system-memory-usage-history-by-interval + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 3600, 14400. The default is 300. Interval is calculated if time params are provided. + - networkIds (array): Optional parameter to filter the result set by the included set of network IDs + - serials (array): Optional parameter to filter device availabilities history by device serial numbers + - productTypes (array): Optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "system", "memory", "usage", "history", "byInterval"], + "operation": "getOrganizationDevicesSystemMemoryUsageHistoryByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/system/memory/usage/history/byInterval" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "serials", + "productTypes", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "productTypes", + ] + 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"getOrganizationDevicesSystemMemoryUsageHistoryByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesTopologyInterfaces(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List topology interfaces in an organization, including layer 2 and layer 3 metadata when available.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-topology-interfaces + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter interfaces by network ID. This filter uses multiple exact matches. Query array syntax follows the standard bracket form, for example: networkIds[]=L_1234&networkIds[]=L_5678. + - serials (array): Optional parameter to filter interfaces by device serial. This filter uses multiple exact matches. Query array syntax follows the standard bracket form, for example: serials[]=Q234-ABCD-5678&serials[]=Q234-ABCD-9012. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "topology", "interfaces"], + "operation": "getOrganizationDevicesTopologyInterfaces", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/topology/interfaces" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationDevicesTopologyInterfaces: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesTopologyL2Links(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List layer 2 topology links originating from devices in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-topology-l-2-links + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 500. Default is 500. + - 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": ["organizations", "monitor", "devices", "topology", "l2", "links"], + "operation": "getOrganizationDevicesTopologyL2Links", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/topology/l2/links" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationDevicesTopologyL2Links: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesTopologyNodesDiscovered(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List topology nodes discovered by LLDP/CDP from devices in an organization, including reported metadata when available.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-topology-nodes-discovered + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 500. Default is 500. + - 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": ["organizations", "monitor", "devices", "topology", "nodes", "discovered"], + "operation": "getOrganizationDevicesTopologyNodesDiscovered", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/topology/nodes/discovered" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationDevicesTopologyNodesDiscovered: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesUplinksAddressesByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the current uplink addresses for devices in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-uplinks-addresses-by-device - 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 @@ -4312,49 +7208,327 @@ def getOrganizationDevicesUplinksAddressesByDevice(self, organizationId: str, to params.pop(k.strip()) if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationDevicesUplinksAddressesByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesUplinksLossAndLatency(self, organizationId: str, **kwargs): + """ + **Return the uplink loss and latency for every MX in the organization from at latest 2 minutes ago** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-uplinks-loss-and-latency + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 60 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 5 minutes after t0. The latest possible time that t1 can be is 2 minutes into the past. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 5 minutes. The default is 5 minutes. + - uplink (string): Optional filter for a specific WAN uplink. Valid uplinks are wan1, wan2, wan3, cellular. Default will return all uplinks. + - ip (string): Optional filter for a specific destination IP. Default will return all destination IPs. + """ + + kwargs.update(locals()) + + if "uplink" in kwargs: + options = ["cellular", "wan1", "wan2", "wan3"] + assert kwargs["uplink"] in options, ( + f'''"uplink" cannot be "{kwargs["uplink"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "monitor", "devices", "uplinks", "uplinksLossAndLatency"], + "operation": "getOrganizationDevicesUplinksLossAndLatency", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/uplinksLossAndLatency" + + query_params = [ + "t0", + "t1", + "timespan", + "uplink", + "ip", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationDevicesUplinksLossAndLatency: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationEarlyAccessFeatures(self, organizationId: str): + """ + **List the available early access features for organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-early-access-features + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "earlyAccess", "features"], + "operation": "getOrganizationEarlyAccessFeatures", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/earlyAccess/features" + + return self._session.get(metadata, resource) + + def getOrganizationEarlyAccessFeaturesOptIns(self, organizationId: str): + """ + **List the early access feature opt-ins for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-early-access-features-opt-ins + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], + "operation": "getOrganizationEarlyAccessFeaturesOptIns", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/earlyAccess/features/optIns" + + return self._session.get(metadata, resource) + + def createOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, shortName: str, **kwargs): + """ + **Create a new early access feature opt-in for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-early-access-features-opt-in + + - organizationId (string): Organization ID + - shortName (string): Short name of the early access feature + - limitScopeToNetworks (array): A list of network IDs to apply the opt-in to + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], + "operation": "createOrganizationEarlyAccessFeaturesOptIn", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/earlyAccess/features/optIns" + + body_params = [ + "shortName", + "limitScopeToNetworks", + ] + 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"createOrganizationEarlyAccessFeaturesOptIn: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str): + """ + **Show an early access feature opt-in for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-early-access-features-opt-in + + - organizationId (string): Organization ID + - optInId (string): Opt in ID + """ + + metadata = { + "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], + "operation": "getOrganizationEarlyAccessFeaturesOptIn", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + optInId = urllib.parse.quote(str(optInId), safe="") + resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" + + return self._session.get(metadata, resource) + + def updateOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str, **kwargs): + """ + **Update an early access feature opt-in for an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-early-access-features-opt-in + + - organizationId (string): Organization ID + - optInId (string): Opt in ID + - limitScopeToNetworks (array): A list of network IDs to apply the opt-in to + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], + "operation": "updateOrganizationEarlyAccessFeaturesOptIn", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + optInId = urllib.parse.quote(str(optInId), safe="") + resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" + + body_params = [ + "limitScopeToNetworks", + ] + 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"updateOrganizationEarlyAccessFeaturesOptIn: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str): + """ + **Delete an early access feature opt-in** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-early-access-features-opt-in + + - organizationId (string): Organization ID + - optInId (string): Opt in ID + """ + + metadata = { + "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], + "operation": "deleteOrganizationEarlyAccessFeaturesOptIn", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + optInId = urllib.parse.quote(str(optInId), safe="") + resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" + + return self._session.delete(metadata, resource) + + def updateOrganizationExtensionsSdwanmanagerInterconnect( + self, organizationId: str, interconnectId: str, name: str, status: str, **kwargs + ): + """ + **Update name and status of an Interconnect** + https://developer.cisco.com/meraki/api-v1/#!update-organization-extensions-sdwanmanager-interconnect + + - organizationId (string): Organization ID + - interconnectId (string): Interconnect ID + - name (string): Interconnect name + - status (string): Interconnect status + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "extensions", "sdwanmanager", "interconnects"], + "operation": "updateOrganizationExtensionsSdwanmanagerInterconnect", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + interconnectId = urllib.parse.quote(str(interconnectId), safe="") + resource = f"/organizations/{organizationId}/extensions/sdwanmanager/interconnects/{interconnectId}" + + body_params = [ + "name", + "status", + ] + 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"updateOrganizationExtensionsSdwanmanagerInterconnect: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def getOrganizationExtensionsThousandEyesNetworks(self, organizationId: str): + """ + **List the ThousandEyes agent configurations under this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-extensions-thousand-eyes-networks + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "extensions", "thousandEyes", "networks"], + "operation": "getOrganizationExtensionsThousandEyesNetworks", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks" + + return self._session.get(metadata, resource) + + def createOrganizationExtensionsThousandEyesNetwork(self, organizationId: str, enabled: bool, networkId: str, **kwargs): + """ + **Add a ThousandEyes agent for this network** + https://developer.cisco.com/meraki/api-v1/#!create-organization-extensions-thousand-eyes-network + + - organizationId (string): Organization ID + - enabled (boolean): Whether or not the ThousandEyes agent is enabled for the network. + - networkId (string): Network that will have the ThousandEyes agent installed on. + - tests (array): An array of tests to be created + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "extensions", "thousandEyes", "networks"], + "operation": "createOrganizationExtensionsThousandEyesNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks" + + body_params = [ + "enabled", + "networkId", + "tests", + ] + 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"getOrganizationDevicesUplinksAddressesByDevice: ignoring unrecognized kwargs: {invalid}" + f"createOrganizationExtensionsThousandEyesNetwork: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.post(metadata, resource, payload) - def getOrganizationDevicesUplinksLossAndLatency(self, organizationId: str, **kwargs): + def getOrganizationExtensionsThousandEyesNetworksSupported( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Return the uplink loss and latency for every MX in the organization from at latest 2 minutes ago** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-uplinks-loss-and-latency + **List all the networks eligible for ThousandEyes agent activation under this organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-extensions-thousand-eyes-networks-supported - organizationId (string): Organization ID - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 60 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 5 minutes after t0. The latest possible time that t1 can be is 2 minutes into the past. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 5 minutes. The default is 5 minutes. - - uplink (string): Optional filter for a specific WAN uplink. Valid uplinks are wan1, wan2, wan3, cellular. Default will return all uplinks. - - ip (string): Optional filter for a specific destination IP. Default will return all destination IPs. + - 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 + - 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. + - agentInstalled (boolean): Set to true to get only networks with installed ThousandEyes agent; set to false to get networks without agents. """ kwargs.update(locals()) - if "uplink" in kwargs: - options = ["cellular", "wan1", "wan2", "wan3"] - assert kwargs["uplink"] in options, ( - f'''"uplink" cannot be "{kwargs["uplink"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["organizations", "monitor", "devices", "uplinks", "uplinksLossAndLatency"], - "operation": "getOrganizationDevicesUplinksLossAndLatency", + "tags": ["organizations", "configure", "extensions", "thousandEyes", "networks", "supported"], + "operation": "getOrganizationExtensionsThousandEyesNetworksSupported", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/uplinksLossAndLatency" + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks/supported" query_params = [ - "t0", - "t1", - "timespan", - "uplink", - "ip", + "perPage", + "startingAfter", + "endingBefore", + "agentInstalled", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} @@ -4363,67 +7537,52 @@ def getOrganizationDevicesUplinksLossAndLatency(self, organizationId: str, **kwa 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"getOrganizationDevicesUplinksLossAndLatency: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationExtensionsThousandEyesNetworksSupported: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get(metadata, resource, params) - - def getOrganizationEarlyAccessFeatures(self, organizationId: str): - """ - **List the available early access features for organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-early-access-features - - - organizationId (string): Organization ID - """ - - metadata = { - "tags": ["organizations", "configure", "earlyAccess", "features"], - "operation": "getOrganizationEarlyAccessFeatures", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/earlyAccess/features" - - return self._session.get(metadata, resource) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationEarlyAccessFeaturesOptIns(self, organizationId: str): + def getOrganizationExtensionsThousandEyesNetwork(self, organizationId: str, networkId: str): """ - **List the early access feature opt-ins for an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-early-access-features-opt-ins + **List the ThousandEyes agent configuration under this network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-extensions-thousand-eyes-network - organizationId (string): Organization ID + - networkId (string): Network ID """ metadata = { - "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], - "operation": "getOrganizationEarlyAccessFeaturesOptIns", + "tags": ["organizations", "configure", "extensions", "thousandEyes", "networks"], + "operation": "getOrganizationExtensionsThousandEyesNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/earlyAccess/features/optIns" + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks/{networkId}" return self._session.get(metadata, resource) - def createOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, shortName: str, **kwargs): + def updateOrganizationExtensionsThousandEyesNetwork(self, organizationId: str, networkId: str, enabled: bool, **kwargs): """ - **Create a new early access feature opt-in for an organization** - https://developer.cisco.com/meraki/api-v1/#!create-organization-early-access-features-opt-in + **Update a ThousandEyes agent from this network** + https://developer.cisco.com/meraki/api-v1/#!update-organization-extensions-thousand-eyes-network - organizationId (string): Organization ID - - shortName (string): Short name of the early access feature - - limitScopeToNetworks (array): A list of network IDs to apply the opt-in to + - networkId (string): Network ID + - enabled (boolean): Whether or not the ThousandEyes agent is enabled for the network. """ - kwargs.update(locals()) + kwargs = locals() metadata = { - "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], - "operation": "createOrganizationEarlyAccessFeaturesOptIn", + "tags": ["organizations", "configure", "extensions", "thousandEyes", "networks"], + "operation": "updateOrganizationExtensionsThousandEyesNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/earlyAccess/features/optIns" + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks/{networkId}" body_params = [ - "shortName", - "limitScopeToNetworks", + "enabled", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -4432,52 +7591,50 @@ def createOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, shortN 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"createOrganizationEarlyAccessFeaturesOptIn: ignoring unrecognized kwargs: {invalid}" + f"updateOrganizationExtensionsThousandEyesNetwork: ignoring unrecognized kwargs: {invalid}" ) - return self._session.post(metadata, resource, payload) + return self._session.put(metadata, resource, payload) - def getOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str): + def deleteOrganizationExtensionsThousandEyesNetwork(self, organizationId: str, networkId: str): """ - **Show an early access feature opt-in for an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-early-access-features-opt-in + **Delete a ThousandEyes agent from this network** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-extensions-thousand-eyes-network - organizationId (string): Organization ID - - optInId (string): Opt in ID + - networkId (string): Network ID """ metadata = { - "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], - "operation": "getOrganizationEarlyAccessFeaturesOptIn", + "tags": ["organizations", "configure", "extensions", "thousandEyes", "networks"], + "operation": "deleteOrganizationExtensionsThousandEyesNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - optInId = urllib.parse.quote(str(optInId), safe="") - resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks/{networkId}" - return self._session.get(metadata, resource) + return self._session.delete(metadata, resource) - def updateOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str, **kwargs): + def createOrganizationExtensionsThousandEyesTest(self, organizationId: str, **kwargs): """ - **Update an early access feature opt-in for an organization** - https://developer.cisco.com/meraki/api-v1/#!update-organization-early-access-features-opt-in + **Create a ThousandEyes test based on a provided test template** + https://developer.cisco.com/meraki/api-v1/#!create-organization-extensions-thousand-eyes-test - organizationId (string): Organization ID - - optInId (string): Opt in ID - - limitScopeToNetworks (array): A list of network IDs to apply the opt-in to + - tests (array): An array of tests to be created """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], - "operation": "updateOrganizationEarlyAccessFeaturesOptIn", + "tags": ["organizations", "configure", "extensions", "thousandEyes", "tests"], + "operation": "createOrganizationExtensionsThousandEyesTest", } organizationId = urllib.parse.quote(str(organizationId), safe="") - optInId = urllib.parse.quote(str(optInId), safe="") - resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" + resource = f"/organizations/{organizationId}/extensions/thousandEyes/tests" body_params = [ - "limitScopeToNetworks", + "tests", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -4486,29 +7643,10 @@ def updateOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInI 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"updateOrganizationEarlyAccessFeaturesOptIn: ignoring unrecognized kwargs: {invalid}" + f"createOrganizationExtensionsThousandEyesTest: ignoring unrecognized kwargs: {invalid}" ) - return self._session.put(metadata, resource, payload) - - def deleteOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str): - """ - **Delete an early access feature opt-in** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-early-access-features-opt-in - - - organizationId (string): Organization ID - - optInId (string): Opt in ID - """ - - metadata = { - "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], - "operation": "deleteOrganizationEarlyAccessFeaturesOptIn", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - optInId = urllib.parse.quote(str(optInId), safe="") - resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" - - return self._session.delete(metadata, resource) + return self._session.post(metadata, resource, payload) def getOrganizationFirmwareUpgrades(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ @@ -4729,6 +7867,94 @@ def getOrganizationFloorPlansAutoLocateStatuses(self, organizationId: str, total return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationAccessGroups(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List effective Catalyst Center access groups for the requested Catalyst Center administrators in the specified organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-access-groups + + - 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 + - perPage (integer): Number of access groups to return per page. Range: 1-50. Defaults to 50 when omitted. + - startingAfter (string): Cursor token to retrieve access groups after the specified access group identifier. + - endingBefore (string): Cursor token to retrieve access groups before the specified access group identifier. + - assignedAdminEmails (array): Catalyst Center administrator email addresses used by federation to filter access groups for the requested administrators. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "iam", "admins", "accessGroups"], + "operation": "getOrganizationAccessGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/admins/accessGroups" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "assignedAdminEmails", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "assignedAdminEmails", + ] + 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"getOrganizationAccessGroups: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def resolveOrganizationIamAdminsAdministratorsMePermissions( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the authenticated caller admin's permissions for an organization** + https://developer.cisco.com/meraki/api-v1/#!resolve-organization-iam-admins-administrators-me-permissions + + - 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 + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "iam", "admins", "administrators", "me", "permissions"], + "operation": "resolveOrganizationIamAdminsAdministratorsMePermissions", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/admins/administrators/me/permissions/resolve" + + body_params = [ + "perPage", + "startingAfter", + "endingBefore", + ] + 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"resolveOrganizationIamAdminsAdministratorsMePermissions: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + def getOrganizationIntegrationsDeployable(self, organizationId: str): """ **Provides a list of integrations that can be enabled for an Organization.** @@ -4939,51 +8165,104 @@ def getOrganizationInventoryDevices(self, organizationId: str, total_pages=1, di kwargs.update(locals()) - if "usedState" in kwargs: - options = ["unused", "used"] - assert kwargs["usedState"] in options, ( - f'''"usedState" cannot be "{kwargs["usedState"]}", & must be set to one of: {options}''' - ) - if "tagsFilterType" in kwargs: - options = ["withAllTags", "withAnyTags"] - assert kwargs["tagsFilterType"] in options, ( - f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' - ) - + if "usedState" in kwargs: + options = ["unused", "used"] + assert kwargs["usedState"] in options, ( + f'''"usedState" cannot be "{kwargs["usedState"]}", & must be set to one of: {options}''' + ) + if "tagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["tagsFilterType"] in options, ( + f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "inventory", "devices"], + "operation": "getOrganizationInventoryDevices", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/inventory/devices" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "usedState", + "search", + "macs", + "networkIds", + "serials", + "models", + "orderNumbers", + "tags", + "tagsFilterType", + "productTypes", + "eoxStatuses", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "macs", + "networkIds", + "serials", + "models", + "orderNumbers", + "tags", + "productTypes", + "eoxStatuses", + ] + 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"getOrganizationInventoryDevices: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationInventoryDevicesDetails(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return inventory devices with additional site, geolocation, software, licensing, lifecycle, and Catalyst Center-specific fields** + https://developer.cisco.com/meraki/api-v1/#!get-organization-inventory-devices-details + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. 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. + - networkIds (array): Optional parameter to filter devices by network IDs. Matches devices in any of the provided network IDs. When multiple filter parameters are provided, a device must match each provided filter. Query array syntax follows the standard bracket form, for example: networkIds[]=L_1234&networkIds[]=L_5678. Maximum 100 network IDs. + - serials (array): Optional parameter to filter devices by serials. Matches devices with any of the provided serials. When multiple filter parameters are provided, a device must match each provided filter. Query array syntax follows the standard bracket form, for example: serials[]=Q234-ABCD-5678&serials[]=Q234-ABCD-9012. Maximum 100 serials. + - productTypes (array): Optional parameter to filter devices by product type. Matches devices with any of the provided product types. When multiple filter parameters are provided, a device must match each provided filter. Query array syntax follows the standard bracket form, for example: productTypes[]=switch&productTypes[]=wireless. Maximum 100 product types. + """ + + kwargs.update(locals()) + metadata = { - "tags": ["organizations", "configure", "inventory", "devices"], - "operation": "getOrganizationInventoryDevices", + "tags": ["organizations", "monitor", "inventory", "devices", "details"], + "operation": "getOrganizationInventoryDevicesDetails", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/inventory/devices" + resource = f"/organizations/{organizationId}/inventory/devices/details" query_params = [ "perPage", "startingAfter", "endingBefore", - "usedState", - "search", - "macs", "networkIds", "serials", - "models", - "orderNumbers", - "tags", - "tagsFilterType", "productTypes", - "eoxStatuses", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "macs", "networkIds", "serials", - "models", - "orderNumbers", - "tags", "productTypes", - "eoxStatuses", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4994,7 +8273,9 @@ def getOrganizationInventoryDevices(self, organizationId: str, total_pages=1, di 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"getOrganizationInventoryDevices: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationInventoryDevicesDetails: ignoring unrecognized kwargs: {invalid}" + ) return self._session.get_pages(metadata, resource, params, total_pages, direction) @@ -5536,71 +8817,318 @@ def getOrganizationNetworks(self, organizationId: str, total_pages=1, direction= ) metadata = { - "tags": ["organizations", "configure", "networks"], - "operation": "getOrganizationNetworks", + "tags": ["organizations", "configure", "networks"], + "operation": "getOrganizationNetworks", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/networks" + + query_params = [ + "configTemplateId", + "isBoundToConfigTemplate", + "tags", + "tagsFilterType", + "productTypes", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "tags", + "productTypes", + ] + 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"getOrganizationNetworks: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationNetwork(self, organizationId: str, name: str, productTypes: list, **kwargs): + """ + **Create a network** + https://developer.cisco.com/meraki/api-v1/#!create-organization-network + + - organizationId (string): Organization ID + - name (string): The name of the new network + - productTypes (array): The product type(s) of the new network. If more than one type is included, the network will be a combined network. + - tags (array): A list of tags to be applied to the network + - timeZone (string): The timezone of the network. For a list of allowed timezones, please see the 'TZ' column in the table in this article. + - copyFromNetworkId (string): The ID of the network to copy configuration from. Other provided parameters will override the copied configuration, except type which must match this network's type exactly. + - notes (string): Add any notes or additional information about this network here. + - details (array): An array of details + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "networks"], + "operation": "createOrganizationNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/networks" + + body_params = [ + "name", + "productTypes", + "tags", + "timeZone", + "copyFromNetworkId", + "notes", + "details", + ] + 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"createOrganizationNetwork: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def combineOrganizationNetworks(self, organizationId: str, name: str, networkIds: list, **kwargs): + """ + **Combine multiple networks into a single network** + https://developer.cisco.com/meraki/api-v1/#!combine-organization-networks + + - organizationId (string): Organization ID + - name (string): The name of the combined network + - networkIds (array): A list of the network IDs that will be combined. If an ID of a combined network is included in this list, the other networks in the list will be grouped into that network + - enrollmentString (string): A unique identifier which can be used for device enrollment or easy access through the Meraki SM Registration page or the Self Service Portal. Please note that changing this field may cause existing bookmarks to break. All networks that are part of this combined network will have their enrollment string appended by '-network_type'. If left empty, all exisitng enrollment strings will be deleted. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "networks"], + "operation": "combineOrganizationNetworks", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/networks/combine" + + body_params = [ + "name", + "networkIds", + "enrollmentString", + ] + 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"combineOrganizationNetworks: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationNetworksGroups(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the network groups in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-networks-groups + + - 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 + - groupIds (array): Optional parameter to filter network groups by ID + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "networks", "groups"], + "operation": "getOrganizationNetworksGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/networks/groups" + + query_params = [ + "groupIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "groupIds", + ] + 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"getOrganizationNetworksGroups: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationNetworksGroup(self, organizationId: str, name: str, **kwargs): + """ + **Create a network group** + https://developer.cisco.com/meraki/api-v1/#!create-organization-networks-group + + - organizationId (string): Organization ID + - name (string): The name of the network group + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "networks", "groups"], + "operation": "createOrganizationNetworksGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/networks/groups" + + body_params = [ + "name", + ] + 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"createOrganizationNetworksGroup: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationNetworksGroupsOverviewByGroup(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the client and status overview information for the network groups in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-networks-groups-overview-by-group + + - 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 + - sortBy (string): Field by which to sort the results + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5000. + - 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()) + + if "sortBy" in kwargs: + options = ["status"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "monitor", "networks", "groups", "overview", "byGroup"], + "operation": "getOrganizationNetworksGroupsOverviewByGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/networks/groups/overview/byGroup" + + query_params = [ + "sortBy", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationNetworksGroupsOverviewByGroup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def updateOrganizationNetworksGroup(self, organizationId: str, groupId: str, name: str, **kwargs): + """ + **Update a network group** + https://developer.cisco.com/meraki/api-v1/#!update-organization-networks-group + + - organizationId (string): Organization ID + - groupId (string): Group ID + - name (string): The new name of the network group + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "networks", "groups"], + "operation": "updateOrganizationNetworksGroup", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/networks" - - query_params = [ - "configTemplateId", - "isBoundToConfigTemplate", - "tags", - "tagsFilterType", - "productTypes", - "perPage", - "startingAfter", - "endingBefore", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + groupId = urllib.parse.quote(str(groupId), safe="") + resource = f"/organizations/{organizationId}/networks/groups/{groupId}" - array_params = [ - "tags", - "productTypes", + body_params = [ + "name", ] - for k, v in kwargs.items(): - if k.strip() in array_params: - params[f"{k.strip()}[]"] = kwargs[f"{k}"] - params.pop(k.strip()) + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationNetworks: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"updateOrganizationNetworksGroup: ignoring unrecognized kwargs: {invalid}") - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.put(metadata, resource, payload) - def createOrganizationNetwork(self, organizationId: str, name: str, productTypes: list, **kwargs): + def deleteOrganizationNetworksGroup(self, organizationId: str, groupId: str): """ - **Create a network** - https://developer.cisco.com/meraki/api-v1/#!create-organization-network + **Delete a network group** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-networks-group - organizationId (string): Organization ID - - name (string): The name of the new network - - productTypes (array): The product type(s) of the new network. If more than one type is included, the network will be a combined network. - - tags (array): A list of tags to be applied to the network - - timeZone (string): The timezone of the network. For a list of allowed timezones, please see the 'TZ' column in the table in this article. - - copyFromNetworkId (string): The ID of the network to copy configuration from. Other provided parameters will override the copied configuration, except type which must match this network's type exactly. - - notes (string): Add any notes or additional information about this network here. + - groupId (string): Group ID """ - kwargs.update(locals()) + metadata = { + "tags": ["organizations", "configure", "networks", "groups"], + "operation": "deleteOrganizationNetworksGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + groupId = urllib.parse.quote(str(groupId), safe="") + resource = f"/organizations/{organizationId}/networks/groups/{groupId}" + + return self._session.delete(metadata, resource) + + def bulkOrganizationNetworksGroupAssign(self, organizationId: str, groupId: str, networkIds: list, **kwargs): + """ + **Add networks to a network group** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-networks-group-assign + + - organizationId (string): Organization ID + - groupId (string): Group ID + - networkIds (array): A list of network IDs to add to the network group + """ + + kwargs = locals() metadata = { - "tags": ["organizations", "configure", "networks"], - "operation": "createOrganizationNetwork", + "tags": ["organizations", "configure", "networks", "groups"], + "operation": "bulkOrganizationNetworksGroupAssign", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/networks" + groupId = urllib.parse.quote(str(groupId), safe="") + resource = f"/organizations/{organizationId}/networks/groups/{groupId}/bulkAssign" body_params = [ - "name", - "productTypes", - "tags", - "timeZone", - "copyFromNetworkId", - "notes", + "networkIds", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -5608,34 +9136,32 @@ def createOrganizationNetwork(self, organizationId: str, name: str, productTypes 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"createOrganizationNetwork: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"bulkOrganizationNetworksGroupAssign: ignoring unrecognized kwargs: {invalid}") return self._session.post(metadata, resource, payload) - def combineOrganizationNetworks(self, organizationId: str, name: str, networkIds: list, **kwargs): + def bulkOrganizationNetworksGroupUnassign(self, organizationId: str, groupId: str, networkIds: list, **kwargs): """ - **Combine multiple networks into a single network** - https://developer.cisco.com/meraki/api-v1/#!combine-organization-networks + **Remove networks from a network group** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-networks-group-unassign - organizationId (string): Organization ID - - name (string): The name of the combined network - - networkIds (array): A list of the network IDs that will be combined. If an ID of a combined network is included in this list, the other networks in the list will be grouped into that network - - enrollmentString (string): A unique identifier which can be used for device enrollment or easy access through the Meraki SM Registration page or the Self Service Portal. Please note that changing this field may cause existing bookmarks to break. All networks that are part of this combined network will have their enrollment string appended by '-network_type'. If left empty, all exisitng enrollment strings will be deleted. + - groupId (string): Group ID + - networkIds (array): A list of network IDs to remove from the network group """ - kwargs.update(locals()) + kwargs = locals() metadata = { - "tags": ["organizations", "configure", "networks"], - "operation": "combineOrganizationNetworks", + "tags": ["organizations", "configure", "networks", "groups"], + "operation": "bulkOrganizationNetworksGroupUnassign", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/networks/combine" + groupId = urllib.parse.quote(str(groupId), safe="") + resource = f"/organizations/{organizationId}/networks/groups/{groupId}/bulkUnassign" body_params = [ - "name", "networkIds", - "enrollmentString", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -5643,7 +9169,9 @@ def combineOrganizationNetworks(self, organizationId: str, name: str, networkIds 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"combineOrganizationNetworks: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"bulkOrganizationNetworksGroupUnassign: ignoring unrecognized kwargs: {invalid}" + ) return self._session.post(metadata, resource, payload) @@ -5729,6 +9257,25 @@ def getNetworkMoves(self, organizationId: str, total_pages=1, direction="next", return self._session.get_pages(metadata, resource, params, total_pages, direction) + def deleteOrganizationOpenRoamingCertificate(self, organizationId: str, id: str): + """ + **Delete an open roaming certificate.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-open-roaming-certificate + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["organizations", "configure", "openRoaming", "certificates"], + "operation": "deleteOrganizationOpenRoamingCertificate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/openRoaming/certificates/{id}" + + return self._session.delete(metadata, resource) + def getOrganizationOpenapiSpec(self, organizationId: str, **kwargs): """ **Return the OpenAPI Specification of the organization's API documentation in JSON** @@ -6761,40 +10308,218 @@ def getOrganizationPolicyObjectsGroup(self, organizationId: str, policyObjectGro - policyObjectGroupId (string): Policy object group ID """ - metadata = { - "tags": ["organizations", "configure", "policyObjects", "groups"], - "operation": "getOrganizationPolicyObjectsGroup", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - policyObjectGroupId = urllib.parse.quote(str(policyObjectGroupId), safe="") - resource = f"/organizations/{organizationId}/policyObjects/groups/{policyObjectGroupId}" + metadata = { + "tags": ["organizations", "configure", "policyObjects", "groups"], + "operation": "getOrganizationPolicyObjectsGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyObjectGroupId = urllib.parse.quote(str(policyObjectGroupId), safe="") + resource = f"/organizations/{organizationId}/policyObjects/groups/{policyObjectGroupId}" + + return self._session.get(metadata, resource) + + def updateOrganizationPolicyObjectsGroup(self, organizationId: str, policyObjectGroupId: str, **kwargs): + """ + **Updates a Policy Object Group.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-policy-objects-group + + - organizationId (string): Organization ID + - policyObjectGroupId (string): Policy object group ID + - name (string): A name for the group of network addresses, unique within the organization (alphanumeric, space, dash, or underscore characters only) + - objectIds (array): A list of Policy Object ID's that this NetworkObjectGroup should be associated to (note: these ID's will replace the existing associated Policy Objects) + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "policyObjects", "groups"], + "operation": "updateOrganizationPolicyObjectsGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyObjectGroupId = urllib.parse.quote(str(policyObjectGroupId), safe="") + resource = f"/organizations/{organizationId}/policyObjects/groups/{policyObjectGroupId}" + + body_params = [ + "name", + "objectIds", + ] + 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"updateOrganizationPolicyObjectsGroup: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationPolicyObjectsGroup(self, organizationId: str, policyObjectGroupId: str): + """ + **Deletes a Policy Object Group.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-policy-objects-group + + - organizationId (string): Organization ID + - policyObjectGroupId (string): Policy object group ID + """ + + metadata = { + "tags": ["organizations", "configure", "policyObjects", "groups"], + "operation": "deleteOrganizationPolicyObjectsGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyObjectGroupId = urllib.parse.quote(str(policyObjectGroupId), safe="") + resource = f"/organizations/{organizationId}/policyObjects/groups/{policyObjectGroupId}" + + return self._session.delete(metadata, resource) + + def getOrganizationPolicyObject(self, organizationId: str, policyObjectId: str): + """ + **Shows details of a Policy Object.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-policy-object + + - organizationId (string): Organization ID + - policyObjectId (string): Policy object ID + """ + + metadata = { + "tags": ["organizations", "configure", "policyObjects"], + "operation": "getOrganizationPolicyObject", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyObjectId = urllib.parse.quote(str(policyObjectId), safe="") + resource = f"/organizations/{organizationId}/policyObjects/{policyObjectId}" + + return self._session.get(metadata, resource) + + def updateOrganizationPolicyObject(self, organizationId: str, policyObjectId: str, **kwargs): + """ + **Updates a Policy Object.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-policy-object + + - organizationId (string): Organization ID + - policyObjectId (string): Policy object ID + - name (string): Name of a policy object, unique within the organization (alphanumeric, space, dash, or underscore characters only) + - cidr (string): CIDR Value of a policy object (e.g. 10.11.12.1/24") + - fqdn (string): Fully qualified domain name of policy object (e.g. "example.com") + - mask (string): Mask of a policy object (e.g. "255.255.0.0") + - ip (string): IP Address of a policy object (e.g. "1.2.3.4") + - groupIds (array): The IDs of policy object groups the policy object belongs to + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "policyObjects"], + "operation": "updateOrganizationPolicyObject", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyObjectId = urllib.parse.quote(str(policyObjectId), safe="") + resource = f"/organizations/{organizationId}/policyObjects/{policyObjectId}" + + body_params = [ + "name", + "cidr", + "fqdn", + "mask", + "ip", + "groupIds", + ] + 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"updateOrganizationPolicyObject: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationPolicyObject(self, organizationId: str, policyObjectId: str): + """ + **Deletes a Policy Object.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-policy-object + + - organizationId (string): Organization ID + - policyObjectId (string): Policy object ID + """ + + metadata = { + "tags": ["organizations", "configure", "policyObjects"], + "operation": "deleteOrganizationPolicyObject", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyObjectId = urllib.parse.quote(str(policyObjectId), safe="") + resource = f"/organizations/{organizationId}/policyObjects/{policyObjectId}" + + return self._session.delete(metadata, resource) + + def getOrganizationRoutingVrfs(self, organizationId: str, **kwargs): + """ + **List existing organization-wide VRFs (Virtual Routing and Forwarding).** + https://developer.cisco.com/meraki/api-v1/#!get-organization-routing-vrfs + + - organizationId (string): Organization ID + - vrfIds (array): IDs of the desired VRFs. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "routing", "vrfs"], + "operation": "getOrganizationRoutingVrfs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/routing/vrfs" + + query_params = [ + "vrfIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "vrfIds", + ] + 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"getOrganizationRoutingVrfs: ignoring unrecognized kwargs: {invalid}") - return self._session.get(metadata, resource) + return self._session.get(metadata, resource, params) - def updateOrganizationPolicyObjectsGroup(self, organizationId: str, policyObjectGroupId: str, **kwargs): + def createOrganizationRoutingVrf(self, organizationId: str, name: str, **kwargs): """ - **Updates a Policy Object Group.** - https://developer.cisco.com/meraki/api-v1/#!update-organization-policy-objects-group + **Add an organization-wide VRF (Virtual Routing and Forwarding)** + https://developer.cisco.com/meraki/api-v1/#!create-organization-routing-vrf - organizationId (string): Organization ID - - policyObjectGroupId (string): Policy object group ID - - name (string): A name for the group of network addresses, unique within the organization (alphanumeric, space, dash, or underscore characters only) - - objectIds (array): A list of Policy Object ID's that this NetworkObjectGroup should be associated to (note: these ID's will replace the existing associated Policy Objects) + - name (string): The name of the VRF (Virtual Routing and Forwarding) + - description (string): Description of the VRF (Virtual Routing and Forwarding) + - routeDistinguisher (string): RD (Route Distinguisher) for the VRF (Virtual Routing and Forwarding) + - routeTarget (string): Route target are used to control the import and export of routes between VRFs + - appliance (object): This parameter is used to enable or disable the VRF on the WAN appliance """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "policyObjects", "groups"], - "operation": "updateOrganizationPolicyObjectsGroup", + "tags": ["organizations", "configure", "routing", "vrfs"], + "operation": "createOrganizationRoutingVrf", } organizationId = urllib.parse.quote(str(organizationId), safe="") - policyObjectGroupId = urllib.parse.quote(str(policyObjectGroupId), safe="") - resource = f"/organizations/{organizationId}/policyObjects/groups/{policyObjectGroupId}" + resource = f"/organizations/{organizationId}/routing/vrfs" body_params = [ "name", - "objectIds", + "description", + "routeDistinguisher", + "routeTarget", + "appliance", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -6802,80 +10527,81 @@ def updateOrganizationPolicyObjectsGroup(self, organizationId: str, policyObject 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"updateOrganizationPolicyObjectsGroup: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"createOrganizationRoutingVrf: ignoring unrecognized kwargs: {invalid}") - return self._session.put(metadata, resource, payload) + return self._session.post(metadata, resource, payload) - def deleteOrganizationPolicyObjectsGroup(self, organizationId: str, policyObjectGroupId: str): + def getOrganizationRoutingVrfsOverviewByVrf(self, organizationId: str, **kwargs): """ - **Deletes a Policy Object Group.** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-policy-objects-group + **List existing organization-wide VRFs (Virtual Routing and Forwarding) overviews.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-routing-vrfs-overview-by-vrf - organizationId (string): Organization ID - - policyObjectGroupId (string): Policy object group ID + - vrfIds (array): IDs of the desired VRFs. """ + kwargs.update(locals()) + metadata = { - "tags": ["organizations", "configure", "policyObjects", "groups"], - "operation": "deleteOrganizationPolicyObjectsGroup", + "tags": ["organizations", "monitor", "routing", "vrfs", "overview", "byVrf"], + "operation": "getOrganizationRoutingVrfsOverviewByVrf", } organizationId = urllib.parse.quote(str(organizationId), safe="") - policyObjectGroupId = urllib.parse.quote(str(policyObjectGroupId), safe="") - resource = f"/organizations/{organizationId}/policyObjects/groups/{policyObjectGroupId}" - - return self._session.delete(metadata, resource) + resource = f"/organizations/{organizationId}/routing/vrfs/overview/byVrf" - def getOrganizationPolicyObject(self, organizationId: str, policyObjectId: str): - """ - **Shows details of a Policy Object.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-policy-object + query_params = [ + "vrfIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - - organizationId (string): Organization ID - - policyObjectId (string): Policy object ID - """ + array_params = [ + "vrfIds", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) - metadata = { - "tags": ["organizations", "configure", "policyObjects"], - "operation": "getOrganizationPolicyObject", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - policyObjectId = urllib.parse.quote(str(policyObjectId), safe="") - resource = f"/organizations/{organizationId}/policyObjects/{policyObjectId}" + 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"getOrganizationRoutingVrfsOverviewByVrf: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get(metadata, resource) + return self._session.get(metadata, resource, params) - def updateOrganizationPolicyObject(self, organizationId: str, policyObjectId: str, **kwargs): + def updateOrganizationRoutingVrf(self, organizationId: str, vrfId: str, **kwargs): """ - **Updates a Policy Object.** - https://developer.cisco.com/meraki/api-v1/#!update-organization-policy-object + **Update an organization-wide VRF (Virtual Routing and Forwarding)** + https://developer.cisco.com/meraki/api-v1/#!update-organization-routing-vrf - organizationId (string): Organization ID - - policyObjectId (string): Policy object ID - - name (string): Name of a policy object, unique within the organization (alphanumeric, space, dash, or underscore characters only) - - cidr (string): CIDR Value of a policy object (e.g. 10.11.12.1/24") - - fqdn (string): Fully qualified domain name of policy object (e.g. "example.com") - - mask (string): Mask of a policy object (e.g. "255.255.0.0") - - ip (string): IP Address of a policy object (e.g. "1.2.3.4") - - groupIds (array): The IDs of policy object groups the policy object belongs to + - vrfId (string): Vrf ID + - name (string): The name of the VRF (Virtual Routing and Forwarding) + - description (string): Description of the VRF (Virtual Routing and Forwarding) + - routeDistinguisher (string): RD (Route Distinguisher) for the VRF (Virtual Routing and Forwarding) + - routeTarget (string): Route target are used to control the import and export of routes between VRFs + - appliance (object): This parameter is used to enable or disable the VRF on the WAN appliance """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "policyObjects"], - "operation": "updateOrganizationPolicyObject", + "tags": ["organizations", "configure", "routing", "vrfs"], + "operation": "updateOrganizationRoutingVrf", } organizationId = urllib.parse.quote(str(organizationId), safe="") - policyObjectId = urllib.parse.quote(str(policyObjectId), safe="") - resource = f"/organizations/{organizationId}/policyObjects/{policyObjectId}" + vrfId = urllib.parse.quote(str(vrfId), safe="") + resource = f"/organizations/{organizationId}/routing/vrfs/{vrfId}" body_params = [ "name", - "cidr", - "fqdn", - "mask", - "ip", - "groupIds", + "description", + "routeDistinguisher", + "routeTarget", + "appliance", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -6883,26 +10609,26 @@ def updateOrganizationPolicyObject(self, organizationId: str, policyObjectId: st 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"updateOrganizationPolicyObject: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"updateOrganizationRoutingVrf: ignoring unrecognized kwargs: {invalid}") return self._session.put(metadata, resource, payload) - def deleteOrganizationPolicyObject(self, organizationId: str, policyObjectId: str): + def deleteOrganizationRoutingVrf(self, organizationId: str, vrfId: str): """ - **Deletes a Policy Object.** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-policy-object + **Delete a VRF (Virtual Routing and Forwarding) from a organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-routing-vrf - organizationId (string): Organization ID - - policyObjectId (string): Policy object ID + - vrfId (string): Vrf ID """ metadata = { - "tags": ["organizations", "configure", "policyObjects"], - "operation": "deleteOrganizationPolicyObject", + "tags": ["organizations", "configure", "routing", "vrfs"], + "operation": "deleteOrganizationRoutingVrf", } organizationId = urllib.parse.quote(str(organizationId), safe="") - policyObjectId = urllib.parse.quote(str(policyObjectId), safe="") - resource = f"/organizations/{organizationId}/policyObjects/{policyObjectId}" + vrfId = urllib.parse.quote(str(vrfId), safe="") + resource = f"/organizations/{organizationId}/routing/vrfs/{vrfId}" return self._session.delete(metadata, resource) @@ -7214,6 +10940,72 @@ def deleteOrganizationSamlRole(self, organizationId: str, samlRoleId: str): return self._session.delete(metadata, resource) + def getOrganizationSaseBatch(self, organizationId: str, batchId: str): + """ + **Retrieves a batch summary with aggregated job status counts** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sase-batch + + - organizationId (string): Organization ID + - batchId (string): Batch ID + """ + + metadata = { + "tags": ["organizations", "configure", "sase", "batches"], + "operation": "getOrganizationSaseBatch", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + batchId = urllib.parse.quote(str(batchId), safe="") + resource = f"/organizations/{organizationId}/sase/batches/{batchId}" + + return self._session.get(metadata, resource) + + def getOrganizationSaseBatchJobs(self, organizationId: str, batchId: str, total_pages=1, direction="next", **kwargs): + """ + **List jobs within a batch, with optional status filtering** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sase-batch-jobs + + - organizationId (string): Organization ID + - batchId (string): Batch 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - status (string): If provided, filters jobs by status + """ + + kwargs.update(locals()) + + if "status" in kwargs: + options = ["complete", "deferred", "failed", "new", "ready", "running", "scheduled"] + assert kwargs["status"] in options, ( + f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "sase", "batches", "jobs"], + "operation": "getOrganizationSaseBatchJobs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + batchId = urllib.parse.quote(str(batchId), safe="") + resource = f"/organizations/{organizationId}/sase/batches/{batchId}/jobs" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "status", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSaseBatchJobs: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationSaseConnectors(self, organizationId: str): """ **List SSE Connectors for an organization** @@ -7552,6 +11344,39 @@ def detachOrganizationSaseSites(self, organizationId: str, **kwargs): return self._session.delete(metadata, resource) + def enrollOrganizationSaseSites(self, organizationId: str, **kwargs): + """ + **Enroll sites in this organization to Secure Access** + https://developer.cisco.com/meraki/api-v1/#!enroll-organization-sase-sites + + - organizationId (string): Organization ID + - items (array): List of Meraki SD-WAN sites with the associated regions to be enrolled. + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "sase", "sites"], + "operation": "enrollOrganizationSaseSites", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sase/sites/enroll" + + body_params = [ + "items", + "callback", + ] + 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"enrollOrganizationSaseSites: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + def updateOrganizationSaseSite(self, organizationId: str, siteId: str, **kwargs): """ **Update the configuration for a site** @@ -7582,9 +11407,114 @@ def updateOrganizationSaseSite(self, organizationId: str, siteId: str, **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"updateOrganizationSaseSite: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"updateOrganizationSaseSite: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getOrganizationSites(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Lists unified site resources for an organization across Meraki networks and Catalyst Center sites** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sites + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 500. Default is 500. + - 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. + - ids (array): Optional parameter to filter resources by unified resource ID. This filter uses multiple exact matches. + - resourceTypes (array): Optional parameter to filter resources by returned resource type. + - resourceTags (array): Optional parameter to filter resources by tag. By default all provided tags must match. + - resourceName (string): Optional parameter to filter resources by case-insensitive partial name match. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "sites"], + "operation": "getOrganizationSites", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sites" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "ids", + "resourceTypes", + "resourceTags", + "resourceName", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "ids", + "resourceTypes", + "resourceTags", + ] + 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"getOrganizationSites: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSitesBuildings(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the buildings belonging to the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sites-buildings + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter buildings by one or more network IDs + - buildingIds (array): Optional parameter to filter buildings by one or more building IDs + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "sites", "buildings"], + "operation": "getOrganizationSitesBuildings", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sites/buildings" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "buildingIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "buildingIds", + ] + 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"getOrganizationSitesBuildings: ignoring unrecognized kwargs: {invalid}") - return self._session.put(metadata, resource, payload) + return self._session.get_pages(metadata, resource, params, total_pages, direction) def getOrganizationSnmp(self, organizationId: str): """ @@ -7657,6 +11587,45 @@ def updateOrganizationSnmp(self, organizationId: str, **kwargs): return self._session.put(metadata, resource, payload) + def getOrganizationSnmpTrapsByNetwork(self, organizationId: str, **kwargs): + """ + **Retrieve the SNMP trap configuration for the networks in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-snmp-traps-by-network + + - organizationId (string): Organization ID + - networkIds (array): An optional parameter to filter SNMP trap configs by network IDs + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "snmp", "traps", "byNetwork"], + "operation": "getOrganizationSnmpTrapsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/snmp/traps/byNetwork" + + query_params = [ + "networkIds", + ] + 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"getOrganizationSnmpTrapsByNetwork: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + def getOrganizationSplashAsset(self, organizationId: str, id: str): """ **Get a Splash Theme Asset** @@ -7807,6 +11776,7 @@ def getOrganizationSummaryTopAppliancesByUtilization(self, organizationId: str, - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -7827,6 +11797,7 @@ def getOrganizationSummaryTopAppliancesByUtilization(self, organizationId: str, query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -7952,6 +11923,7 @@ def getOrganizationSummaryTopClientsByUsage(self, organizationId: str, **kwargs) - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -7972,6 +11944,7 @@ def getOrganizationSummaryTopClientsByUsage(self, organizationId: str, **kwargs) query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -7999,6 +11972,7 @@ def getOrganizationSummaryTopClientsManufacturersByUsage(self, organizationId: s - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -8019,6 +11993,7 @@ def getOrganizationSummaryTopClientsManufacturersByUsage(self, organizationId: s query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -8046,6 +12021,7 @@ def getOrganizationSummaryTopDevicesByUsage(self, organizationId: str, **kwargs) - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -8066,6 +12042,7 @@ def getOrganizationSummaryTopDevicesByUsage(self, organizationId: str, **kwargs) query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -8093,6 +12070,7 @@ def getOrganizationSummaryTopDevicesModelsByUsage(self, organizationId: str, **k - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -8113,6 +12091,7 @@ def getOrganizationSummaryTopDevicesModelsByUsage(self, organizationId: str, **k query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -8142,6 +12121,7 @@ def getOrganizationSummaryTopNetworksByStatus(self, organizationId: str, total_p - direction (string): direction to paginate, either "next" (default) or "prev" page - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -8162,6 +12142,7 @@ def getOrganizationSummaryTopNetworksByStatus(self, organizationId: str, total_p query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -8189,6 +12170,7 @@ def getOrganizationSummaryTopSsidsByUsage(self, organizationId: str, **kwargs): - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -8209,6 +12191,7 @@ def getOrganizationSummaryTopSsidsByUsage(self, organizationId: str, **kwargs): query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -8236,6 +12219,7 @@ def getOrganizationSummaryTopSwitchesByEnergyUsage(self, organizationId: str, ** - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -8256,6 +12240,7 @@ def getOrganizationSummaryTopSwitchesByEnergyUsage(self, organizationId: str, ** query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -8384,6 +12369,137 @@ def getOrganizationWebhooksCallbacksStatus(self, organizationId: str, callbackId return self._session.get(metadata, resource) + def getOrganizationWebhooksHttpServers(self, organizationId: str): + """ + **List the HTTP servers for this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-webhooks-http-servers + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "httpServers"], + "operation": "getOrganizationWebhooksHttpServers", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/webhooks/httpServers" + + return self._session.get(metadata, resource) + + def createOrganizationWebhooksHttpServer(self, organizationId: str, name: str, url: str, **kwargs): + """ + **Add an HTTP server to an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-webhooks-http-server + + - organizationId (string): Organization ID + - name (string): A name for easy reference to the HTTP server + - url (string): The URL of the HTTP server + - sharedSecret (string): A shared secret that will be included in POSTs sent to the HTTP server. This secret can be used to verify that the request was sent by Meraki. + - payloadTemplate (object): The payload template to use when posting data to the HTTP server. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "webhooks", "httpServers"], + "operation": "createOrganizationWebhooksHttpServer", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/webhooks/httpServers" + + body_params = [ + "name", + "url", + "sharedSecret", + "payloadTemplate", + ] + 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"createOrganizationWebhooksHttpServer: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationWebhooksHttpServer(self, organizationId: str, id: str): + """ + **Return an HTTP server for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-webhooks-http-server + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "httpServers"], + "operation": "getOrganizationWebhooksHttpServer", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/webhooks/httpServers/{id}" + + return self._session.get(metadata, resource) + + def updateOrganizationWebhooksHttpServer(self, organizationId: str, id: str, **kwargs): + """ + **Update an HTTP server for an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-webhooks-http-server + + - organizationId (string): Organization ID + - id (string): ID + - name (string): A name for easy reference to the HTTP server + - url (string): The URL of the HTTP server + - sharedSecret (string): A shared secret that will be included in POSTs sent to the HTTP server. This secret can be used to verify that the request was sent by Meraki. + - payloadTemplate (object): The payload template to use when posting data to the HTTP server. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "webhooks", "httpServers"], + "operation": "updateOrganizationWebhooksHttpServer", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/webhooks/httpServers/{id}" + + body_params = [ + "name", + "url", + "sharedSecret", + "payloadTemplate", + ] + 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"updateOrganizationWebhooksHttpServer: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationWebhooksHttpServer(self, organizationId: str, id: str): + """ + **Delete an HTTP server from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-webhooks-http-server + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "httpServers"], + "operation": "deleteOrganizationWebhooksHttpServer", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/webhooks/httpServers/{id}" + + return self._session.delete(metadata, resource) + def getOrganizationWebhooksLogs(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Return the log of webhook POSTs sent** @@ -8428,3 +12544,206 @@ def getOrganizationWebhooksLogs(self, organizationId: str, total_pages=1, direct self._session._logger.warning(f"getOrganizationWebhooksLogs: ignoring unrecognized kwargs: {invalid}") return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWebhooksPayloadTemplates(self, organizationId: str): + """ + **List the webhook payload templates for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-webhooks-payload-templates + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "payloadTemplates"], + "operation": "getOrganizationWebhooksPayloadTemplates", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/webhooks/payloadTemplates" + + return self._session.get(metadata, resource) + + def createOrganizationWebhooksPayloadTemplate(self, organizationId: str, name: str, **kwargs): + """ + **Create a webhook payload template for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-webhooks-payload-template + + - organizationId (string): Organization ID + - name (string): The name of the new template + - body (string): The liquid template used for the body of the webhook message. Either `body` or `bodyFile` must be specified. + - headers (array): The liquid template used with the webhook headers. + - bodyFile (string): A file containing liquid template used for the body of the webhook message. Either `body` or `bodyFile` must be specified. + - headersFile (string): A file containing the liquid template used with the webhook headers. + - sharing (object): Information on which entities have access to the template + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "webhooks", "payloadTemplates"], + "operation": "createOrganizationWebhooksPayloadTemplate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/webhooks/payloadTemplates" + + body_params = [ + "name", + "body", + "headers", + "bodyFile", + "headersFile", + "sharing", + ] + 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"createOrganizationWebhooksPayloadTemplate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationWebhooksPayloadTemplate(self, organizationId: str, payloadTemplateId: str): + """ + **Get the webhook payload template for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-webhooks-payload-template + + - organizationId (string): Organization ID + - payloadTemplateId (string): Payload template ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "payloadTemplates"], + "operation": "getOrganizationWebhooksPayloadTemplate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + payloadTemplateId = urllib.parse.quote(str(payloadTemplateId), safe="") + resource = f"/organizations/{organizationId}/webhooks/payloadTemplates/{payloadTemplateId}" + + return self._session.get(metadata, resource) + + def deleteOrganizationWebhooksPayloadTemplate(self, organizationId: str, payloadTemplateId: str): + """ + **Destroy a webhook payload template for an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-webhooks-payload-template + + - organizationId (string): Organization ID + - payloadTemplateId (string): Payload template ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "payloadTemplates"], + "operation": "deleteOrganizationWebhooksPayloadTemplate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + payloadTemplateId = urllib.parse.quote(str(payloadTemplateId), safe="") + resource = f"/organizations/{organizationId}/webhooks/payloadTemplates/{payloadTemplateId}" + + return self._session.delete(metadata, resource) + + def updateOrganizationWebhooksPayloadTemplate(self, organizationId: str, payloadTemplateId: str, **kwargs): + """ + **Update a webhook payload template for an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-webhooks-payload-template + + - organizationId (string): Organization ID + - payloadTemplateId (string): Payload template ID + - name (string): The name of the template + - body (string): The liquid template used for the body of the webhook message. + - headers (array): The liquid template used with the webhook headers. + - bodyFile (string): A file containing liquid template used for the body of the webhook message. + - headersFile (string): A file containing the liquid template used with the webhook headers. + - sharing (object): Information on which entities have access to the template + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "webhooks", "payloadTemplates"], + "operation": "updateOrganizationWebhooksPayloadTemplate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + payloadTemplateId = urllib.parse.quote(str(payloadTemplateId), safe="") + resource = f"/organizations/{organizationId}/webhooks/payloadTemplates/{payloadTemplateId}" + + body_params = [ + "name", + "body", + "headers", + "bodyFile", + "headersFile", + "sharing", + ] + 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"updateOrganizationWebhooksPayloadTemplate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def createOrganizationWebhooksWebhookTest(self, organizationId: str, url: str, **kwargs): + """ + **Send a test webhook for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-webhooks-webhook-test + + - organizationId (string): Organization ID + - url (string): The URL where the test webhook will be sent + - sharedSecret (string): The shared secret the test webhook will send. Optional. Defaults to HTTP server's shared secret. Otherwise, defaults to an empty string. + - payloadTemplateId (string): The ID of the payload template of the test webhook. Defaults to the HTTP server's template ID if one exists for the given URL, or Generic template ID otherwise + - payloadTemplateName (string): The name of the payload template. + - alertTypeId (string): The type of alert which the test webhook will send. Optional. Defaults to insight_app_outage_start. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "webhooks", "webhookTests"], + "operation": "createOrganizationWebhooksWebhookTest", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/webhooks/webhookTests" + + body_params = [ + "url", + "sharedSecret", + "payloadTemplateId", + "payloadTemplateName", + "alertTypeId", + ] + 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"createOrganizationWebhooksWebhookTest: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationWebhooksWebhookTest(self, organizationId: str, webhookTestId: str): + """ + **Return the status of a webhook test for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-webhooks-webhook-test + + - organizationId (string): Organization ID + - webhookTestId (string): Webhook test ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "webhookTests"], + "operation": "getOrganizationWebhooksWebhookTest", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + webhookTestId = urllib.parse.quote(str(webhookTestId), safe="") + resource = f"/organizations/{organizationId}/webhooks/webhookTests/{webhookTestId}" + + return self._session.get(metadata, resource) diff --git a/meraki/aio/api/secureConnect.py b/meraki/aio/api/secureConnect.py new file mode 100644 index 0000000..4700317 --- /dev/null +++ b/meraki/aio/api/secureConnect.py @@ -0,0 +1,1084 @@ +import urllib + + +class AsyncSecureConnect: + def __init__(self, session): + super().__init__() + self._session = session + + def getOrganizationSecureConnectPrivateApplicationGroups( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Provides a list of private application groups for an Organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-private-application-groups + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - nameIncludes (string): Optional parameter to search the application group list by group name, case is ignored + - applicationGroupIds (array): List of application group ids attached to fetch + - sortBy (string): Optional parameter to specify the field used to sort objects. + - sortOrder (string): Optional parameter to specify the sort order. Default value is asc. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["applicationGroupId", "modifiedAt", "name"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplicationGroups"], + "operation": "getOrganizationSecureConnectPrivateApplicationGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplicationGroups" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "nameIncludes", + "applicationGroupIds", + "sortBy", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "applicationGroupIds", + ] + 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"getOrganizationSecureConnectPrivateApplicationGroups: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSecureConnectPrivateApplicationGroup(self, organizationId: str, name: str, **kwargs): + """ + **Creates a group of private applications to apply to policy** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-private-application-group + + - organizationId (string): Organization ID + - name (string): Application Group Name. This is required and cannot have any special characters other than spaces and hyphens + - description (string): Optional short description for application group + - applicationIds (array): List of application ids attached to this Private Application Group + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplicationGroups"], + "operation": "createOrganizationSecureConnectPrivateApplicationGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplicationGroups" + + body_params = [ + "name", + "description", + "applicationIds", + ] + 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"createOrganizationSecureConnectPrivateApplicationGroup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationSecureConnectPrivateApplicationGroup(self, organizationId: str, id: str, name: str, **kwargs): + """ + **Update an application group in an Organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-secure-connect-private-application-group + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Application Group Name. This is required and cannot have any special characters other than spaces and hyphens + - description (string): Optional short description for application group + - applicationIds (array): List of application ids attached to this Private Application Group + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplicationGroups"], + "operation": "updateOrganizationSecureConnectPrivateApplicationGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplicationGroups/{id}" + + body_params = [ + "name", + "description", + "applicationIds", + ] + 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"updateOrganizationSecureConnectPrivateApplicationGroup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSecureConnectPrivateApplicationGroup(self, organizationId: str, id: str, **kwargs): + """ + **Deletes private application group from an Organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-secure-connect-private-application-group + + - organizationId (string): Organization ID + - id (string): ID + - force (boolean): Boolean flag to force delete application group, even if application group is in use by one or more rules. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplicationGroups"], + "operation": "deleteOrganizationSecureConnectPrivateApplicationGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplicationGroups/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSecureConnectPrivateApplicationGroup(self, organizationId: str, id: str): + """ + **Return the details of a specific private application group** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-private-application-group + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["secureConnect", "configure", "privateApplicationGroups"], + "operation": "getOrganizationSecureConnectPrivateApplicationGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplicationGroups/{id}" + + return self._session.get(metadata, resource) + + def getOrganizationSecureConnectPrivateApplications(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Provides a list of private applications for an Organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-private-applications + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - nameIncludes (string): Optional parameter to filter the private applications list by application and associated application group names, case is ignored + - applicationGroupIds (array): Optional parameter for filtering the list of private applications belonging to the application group identified by the given IDs. + - appTypes (array): Optional parameter for filtering the list of private applications by applications that contain at least one destination with the specified accessType value. + - sortBy (string): Optional parameter to specify the field used to sort objects. + - sortOrder (string): Optional parameter to specify the sort order. Default value is asc. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["modifiedAt", "name"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplications"], + "operation": "getOrganizationSecureConnectPrivateApplications", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplications" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "nameIncludes", + "applicationGroupIds", + "appTypes", + "sortBy", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "applicationGroupIds", + "appTypes", + ] + 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"getOrganizationSecureConnectPrivateApplications: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSecureConnectPrivateApplication(self, organizationId: str, name: str, destinations: list, **kwargs): + """ + **Adds a new private application to the Organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-private-application + + - organizationId (string): Organization ID + - name (string): Name of Application. This is required and should be unique across all applications for a given organization. Name cannot have any special characters other than spaces and hyphens. + - destinations (array): List of IP address destinations. + - description (string): Optional Text description for Application + - appProtocol (string): Protocol for communication between proxy to private application. Applicable for Browser Based Access only. + - sni (string): Optional SNI. Applicable for Browser Based Access only. SNI should be a valid domain. + - externalFQDN (string): Cisco or Customer Managed URL for Application. Applicable for Browser Based Access only. This field is system generated based on the application name and organization ID and overrides user input in payload. This value must be unique across all applications for a given organization. + - sslVerificationEnabled (boolean): Enable Upstream SSL verification for the internally hosted URL by the customer. Applicable for Browser Based Access only. Default is true. + - applicationGroupIds (array): List of application group ids attached to this Private Application + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplications"], + "operation": "createOrganizationSecureConnectPrivateApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplications" + + body_params = [ + "name", + "description", + "destinations", + "appProtocol", + "sni", + "externalFQDN", + "sslVerificationEnabled", + "applicationGroupIds", + ] + 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"createOrganizationSecureConnectPrivateApplication: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationSecureConnectPrivateApplication( + self, organizationId: str, id: str, name: str, destinations: list, **kwargs + ): + """ + **Updates a specific private application** + https://developer.cisco.com/meraki/api-v1/#!update-organization-secure-connect-private-application + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of Application. This is required and should be unique across all applications for a given organization. Name cannot have any special characters other than spaces and hyphens. + - destinations (array): List of IP address destinations. + - description (string): Optional Text description for Application + - appProtocol (string): Protocol for communication between proxy to private application. Applicable for Browser Based Access only. + - sni (string): Optional SNI. Applicable for Browser Based Access only. SNI should be a valid domain. + - externalFQDN (string): Cisco or Customer Managed URL for Application. Applicable for Browser Based Access only. This field is system generated based on the application name and organization ID and overrides user input in payload. This value must be unique across all applications for a given organization. + - sslVerificationEnabled (boolean): Enable Upstream SSL verification for the internally hosted URL by the customer. Applicable for Browser Based Access only. Default is true. + - applicationGroupIds (array): List of application group ids attached to this Private Application + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplications"], + "operation": "updateOrganizationSecureConnectPrivateApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplications/{id}" + + body_params = [ + "name", + "description", + "destinations", + "appProtocol", + "sni", + "externalFQDN", + "sslVerificationEnabled", + "applicationGroupIds", + ] + 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"updateOrganizationSecureConnectPrivateApplication: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSecureConnectPrivateApplication(self, organizationId: str, id: str, **kwargs): + """ + **Deletes a specific private application** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-secure-connect-private-application + + - organizationId (string): Organization ID + - id (string): ID + - force (boolean): Boolean flag to force delete application, even if application is in use by one or more rules. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplications"], + "operation": "deleteOrganizationSecureConnectPrivateApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplications/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSecureConnectPrivateApplication(self, organizationId: str, id: str): + """ + **Return the details of a specific private application** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-private-application + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["secureConnect", "configure", "privateApplications"], + "operation": "getOrganizationSecureConnectPrivateApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplications/{id}" + + return self._session.get(metadata, resource) + + def getOrganizationSecureConnectPrivateResourceGroups(self, organizationId: str): + """ + **Provides a list of the private resource groups in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-private-resource-groups + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["secureConnect", "configure", "privateResourceGroups"], + "operation": "getOrganizationSecureConnectPrivateResourceGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResourceGroups" + + return self._session.get(metadata, resource) + + def createOrganizationSecureConnectPrivateResourceGroup(self, organizationId: str, name: str, **kwargs): + """ + **Adds a new private resource group to an organization.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-private-resource-group + + - organizationId (string): Organization ID + - name (string): Name of group. This is required and should be unique across all groups for a given organization. Name cannot have any special characters other than spaces and hyphens. + - description (string): Optional text description for a group. + - resourceIds (array): List of resource ids assigned to this group. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateResourceGroups"], + "operation": "createOrganizationSecureConnectPrivateResourceGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResourceGroups" + + body_params = [ + "name", + "description", + "resourceIds", + ] + 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"createOrganizationSecureConnectPrivateResourceGroup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationSecureConnectPrivateResourceGroup(self, organizationId: str, id: str, name: str, **kwargs): + """ + **Updates a specific private resource group.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-secure-connect-private-resource-group + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of group. This is required and should be unique across all groups for a given organization. Name cannot have any special characters other than spaces and hyphens. + - description (string): Optional text description for a group. + - resourceIds (array): List of resource ids assigned to this group. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateResourceGroups"], + "operation": "updateOrganizationSecureConnectPrivateResourceGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResourceGroups/{id}" + + body_params = [ + "name", + "description", + "resourceIds", + ] + 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"updateOrganizationSecureConnectPrivateResourceGroup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSecureConnectPrivateResourceGroup(self, organizationId: str, id: str): + """ + **Deletes a specific private resource group.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-secure-connect-private-resource-group + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["secureConnect", "configure", "privateResourceGroups"], + "operation": "deleteOrganizationSecureConnectPrivateResourceGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResourceGroups/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSecureConnectPrivateResources(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Provides a list of private resources for an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-private-resources + + - 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 + - perPage (string): Number of resources to return for a paginated response. + - startingAfter (string): The name of the resource to start after for a paginated response. Use '' for the first page. + - endingBefore (string): The name of the resource to end before for a paginated response. Use '' for the final page. + - sortBy (string): Parameter to specify the field used to sort objects, by default, resources are returned by name asc. + - sortOrder (string): Parameter to specify the direction used to sort objects, by default, resources are returned by name asc. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateResources"], + "operation": "getOrganizationSecureConnectPrivateResources", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResources" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortBy", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSecureConnectPrivateResources: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSecureConnectPrivateResource( + self, organizationId: str, name: str, accessTypes: list, resourceAddresses: list, **kwargs + ): + """ + **Adds a new private resource to the organization.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-private-resource + + - organizationId (string): Organization ID + - name (string): Name of resource. This is required and should be unique across all resources for a given organization. Name cannot have any special characters other than spaces and hyphens. + - accessTypes (array): List of access types. + - resourceAddresses (array): List of resource addresses Protocols must be unique in this list. + - description (string): Optional text description for a resource. + - resourceGroupIds (array): List of resource group ids attached to this resource. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateResources"], + "operation": "createOrganizationSecureConnectPrivateResource", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResources" + + body_params = [ + "name", + "description", + "accessTypes", + "resourceAddresses", + "resourceGroupIds", + ] + 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"createOrganizationSecureConnectPrivateResource: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationSecureConnectPrivateResource( + self, organizationId: str, id: str, name: str, accessTypes: list, resourceAddresses: list, **kwargs + ): + """ + **Updates a specific private resource.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-secure-connect-private-resource + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of resource. This is required and should be unique across all resources for a given organization.Name cannot have any special characters other than spaces and hyphens. + - accessTypes (array): List of access types. + - resourceAddresses (array): List of resource addresses Protocols must be unique in this list. + - description (string): Optional text description for resource. + - resourceGroupIds (array): List of resource group ids attached to this resource. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateResources"], + "operation": "updateOrganizationSecureConnectPrivateResource", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResources/{id}" + + body_params = [ + "name", + "description", + "accessTypes", + "resourceAddresses", + "resourceGroupIds", + ] + 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"updateOrganizationSecureConnectPrivateResource: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSecureConnectPrivateResource(self, organizationId: str, id: str): + """ + **Deletes a specific private resource** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-secure-connect-private-resource + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["secureConnect", "configure", "privateResources"], + "operation": "deleteOrganizationSecureConnectPrivateResource", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResources/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSecureConnectPublicApplications(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Provides a list of public applications for an Organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-public-applications + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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. + - nameIncludes (string): Optional parameter to filter the public applications list by application name, case is ignored + - risks (array): List of risk levels to filter by + - categories (array): List of categories to filter by + - appTypes (array): List of app types to filter by + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + - sortBy (string): Optional parameter to specify the field used to sort objects, by default, applications are returned by lastDetected desc + - sortOrder (string): Optional parameter to specify the sort order. Default value is desc. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["appType", "category", "lastDetected", "name", "risk"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "configure", "publicApplications"], + "operation": "getOrganizationSecureConnectPublicApplications", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/publicApplications" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "nameIncludes", + "risks", + "categories", + "appTypes", + "t0", + "t1", + "timespan", + "sortBy", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "risks", + "categories", + "appTypes", + ] + 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"getOrganizationSecureConnectPublicApplications: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSecureConnectRegions(self, organizationId: str, **kwargs): + """ + **List deployed cloud hubs and regions in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-regions + + - organizationId (string): Organization ID + - regionType (string): Filter results by region type + """ + + kwargs.update(locals()) + + if "regionType" in kwargs: + options = ["CNHE", "CloudHub", "Region", "ThirdParty"] + assert kwargs["regionType"] in options, ( + f'''"regionType" cannot be "{kwargs["regionType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "configure", "regions"], + "operation": "getOrganizationSecureConnectRegions", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/regions" + + query_params = [ + "regionType", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSecureConnectRegions: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getOrganizationSecureConnectRemoteAccessLog(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the latest 5000 events logged by remote access.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-remote-access-log + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5000. Default is 50. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + - identityids (string): An identity ID or comma-delimited list of identity ID. + - identitytypes (string): An identity type or comma-delimited list of identity type. + - connectionevent (string): Specify the type of connection event. + - anyconnectversions (string): Specify a comma-separated list of AnyConnect Roaming Security module + versions to filter the data. + - osversions (string): Specify a comma-separated list of OS versions to filter the data. + """ + + kwargs.update(locals()) + + if "connectionevent" in kwargs: + options = ["connected", "disconnected", "failed"] + assert kwargs["connectionevent"] in options, ( + f'''"connectionevent" cannot be "{kwargs["connectionevent"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "monitor", "remoteAccessLog"], + "operation": "getOrganizationSecureConnectRemoteAccessLog", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/remoteAccessLog" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "identityids", + "identitytypes", + "connectionevent", + "anyconnectversions", + "osversions", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSecureConnectRemoteAccessLog: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSecureConnectRemoteAccessLogsExports( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Provides a list of remote access logs exports for an Organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-remote-access-logs-exports + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - status (string): Filter exports by status. + """ + + kwargs.update(locals()) + + if "status" in kwargs: + options = ["complete", "continue", "error", "in_progress", "new", "zip"] + assert kwargs["status"] in options, ( + f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "configure", "remoteAccessLogsExports"], + "operation": "getOrganizationSecureConnectRemoteAccessLogsExports", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/remoteAccessLogsExports" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "status", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSecureConnectRemoteAccessLogsExports: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSecureConnectRemoteAccessLogsExport(self, organizationId: str, **kwargs): + """ + **Creates an export for a provided timestamp interval.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-remote-access-logs-export + + - organizationId (string): Organization ID + - t0 (string): The start of the interval, must be within the past 30 days. Must be provided with t1. + - t1 (string): The end of the interval, must not exceed the current date. Must be provided with t0. + - from (integer): Legacy start of the interval in epoch seconds, must be within the past 30 days. Must be provided with to. + - to (integer): Legacy end of the interval in epoch seconds, must not exceed the current date. Must be provided with from. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "remoteAccessLogsExports"], + "operation": "createOrganizationSecureConnectRemoteAccessLogsExport", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/remoteAccessLogsExports" + + body_params = [ + "t0", + "t1", + "from", + "to", + ] + 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"createOrganizationSecureConnectRemoteAccessLogsExport: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSecureConnectRemoteAccessLogsExportsDownload( + self, organizationId: str, id: str, fileType: str, **kwargs + ): + """ + **Redirects to the download link of the completed export.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-remote-access-logs-exports-download + + - organizationId (string): Organization ID + - id (string): Export ID. + - fileType (string): Export download file type. + """ + + kwargs = locals() + + metadata = { + "tags": ["secureConnect", "configure", "remoteAccessLogsExports", "download"], + "operation": "getOrganizationSecureConnectRemoteAccessLogsExportsDownload", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/remoteAccessLogsExports/download" + + query_params = [ + "id", + "fileType", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSecureConnectRemoteAccessLogsExportsDownload: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationSecureConnectRemoteAccessLogsExport(self, organizationId: str, id: str): + """ + **Return the details of a specific remote access logs export** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-remote-access-logs-export + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["secureConnect", "configure", "remoteAccessLogsExports"], + "operation": "getOrganizationSecureConnectRemoteAccessLogsExport", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/remoteAccessLogsExports/{id}" + + return self._session.get(metadata, resource) + + def getOrganizationSecureConnectSites(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List sites in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-sites + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - search (string): If provided, filters results by search string + - enrolledState (string): Filter results by sites that have already been enrolled or can be enrolled. Acceptable values are 'enrolled' or 'enrollable + """ + + kwargs.update(locals()) + + if "enrolledState" in kwargs: + options = ["enrollable", "enrolled"] + assert kwargs["enrolledState"] in options, ( + f'''"enrolledState" cannot be "{kwargs["enrolledState"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "configure", "sites"], + "operation": "getOrganizationSecureConnectSites", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/sites" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "search", + "enrolledState", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSecureConnectSites: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSecureConnectSite(self, organizationId: str, **kwargs): + """ + **Enroll sites in this organization to Secure Connect** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-site + + - organizationId (string): Organization ID + - enrollments (array): List of Meraki SD-WAN sites with the associated regions to be enrolled. + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "sites"], + "operation": "createOrganizationSecureConnectSite", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/sites" + + body_params = [ + "enrollments", + "callback", + ] + 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"createOrganizationSecureConnectSite: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def deleteOrganizationSecureConnectSites(self, organizationId: str, **kwargs): + """ + **Detach given sites from Secure Connect** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-secure-connect-sites + + - organizationId (string): Organization ID + - sites (array): List of site IDs to detach + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "sites"], + "operation": "deleteOrganizationSecureConnectSites", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/sites" + + return self._session.delete(metadata, resource) diff --git a/meraki/aio/api/sensor.py b/meraki/aio/api/sensor.py index 115465f..9e18e0d 100644 --- a/meraki/aio/api/sensor.py +++ b/meraki/aio/api/sensor.py @@ -74,9 +74,10 @@ def createDeviceSensorCommand(self, serial: str, operation: str, **kwargs): - serial (string): Serial - operation (string): Operation to run on the sensor. 'enableDownstreamPower', 'disableDownstreamPower', and 'cycleDownstreamPower' turn power on/off to the device that is connected downstream of an MT40 power monitor. 'refreshData' causes an MT15 or MT40 device to upload its latest readings so that they are immediately available in the Dashboard API. + - arguments (array): Additional options to provide to commands run on the sensor, each with a corresponding 'name' and 'value'. """ - kwargs = locals() + kwargs.update(locals()) if "operation" in kwargs: options = ["cycleDownstreamPower", "disableDownstreamPower", "enableDownstreamPower", "refreshData"] @@ -92,6 +93,7 @@ def createDeviceSensorCommand(self, serial: str, operation: str, **kwargs): resource = f"/devices/{serial}/sensor/commands" body_params = [ + "arguments", "operation", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -456,6 +458,103 @@ def getNetworkSensorRelationships(self, networkId: str): return self._session.get(metadata, resource) + def getNetworkSensorSchedules(self, networkId: str): + """ + **Returns a list of all sensor schedules.** + https://developer.cisco.com/meraki/api-v1/#!get-network-sensor-schedules + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["sensor", "configure", "schedules"], + "operation": "getNetworkSensorSchedules", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sensor/schedules" + + return self._session.get(metadata, resource) + + def getOrganizationSensorAlerts(self, organizationId: str, networkIds: list, total_pages=1, direction="next", **kwargs): + """ + **Return a list of sensor alert events** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sensor-alerts + + - organizationId (string): Organization ID + - networkIds (array): Filters alerts by network. For now, this must be a single network 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 365 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 365 days. + - sensorSerial (string): Filters alerts to those triggered by this sensor. + - triggerMetric (string): Filters alerts to those triggered by this metric. + """ + + kwargs.update(locals()) + + if "triggerMetric" in kwargs: + options = [ + "apparentPower", + "co2", + "current", + "door", + "frequency", + "humidity", + "indoorAirQuality", + "noise", + "pm25", + "powerFactor", + "realPower", + "temperature", + "tvoc", + "upstreamPower", + "voltage", + "water", + ] + assert kwargs["triggerMetric"] in options, ( + f'''"triggerMetric" cannot be "{kwargs["triggerMetric"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["sensor", "monitor", "alerts"], + "operation": "getOrganizationSensorAlerts", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sensor/alerts" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "sensorSerial", + "networkIds", + "triggerMetric", + ] + 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"getOrganizationSensorAlerts: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationSensorGatewaysConnectionsLatest(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Returns latest sensor-gateway connectivity data.** @@ -564,6 +663,72 @@ def getOrganizationSensorReadingsHistory(self, organizationId: str, total_pages= return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationSensorReadingsHistoryByInterval(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return all reported readings from sensors in a given timespan, summarized as a series of intervals, sorted by interval start time in descending order** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sensor-readings-history-by-interval + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 730 days, 11 hours, 38 minutes, and 24 seconds from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 730 days, 11 hours, 38 minutes, and 24 seconds after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 730 days, 11 hours, 38 minutes, and 24 seconds. The default is 7 days. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 15, 120, 300, 900, 3600, 14400, 86400, 604800. The default is 86400. Interval is calculated if time params are provided. + - networkIds (array): Optional parameter to filter readings by network. + - serials (array): Optional parameter to filter readings by sensor. + - metrics (array): Types of sensor readings to retrieve. If no metrics are supplied, all available types of readings will be retrieved. + - models (array): Optional parameter to filter readings by one or more models. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["sensor", "monitor", "readings", "history", "byInterval"], + "operation": "getOrganizationSensorReadingsHistoryByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sensor/readings/history/byInterval" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "serials", + "metrics", + "models", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "metrics", + "models", + ] + 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"getOrganizationSensorReadingsHistoryByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationSensorReadingsLatest(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Return the latest available reading for each metric from each sensor, sorted by sensor serial** diff --git a/meraki/aio/api/sm.py b/meraki/aio/api/sm.py index 26075e3..263da77 100644 --- a/meraki/aio/api/sm.py +++ b/meraki/aio/api/sm.py @@ -894,6 +894,379 @@ def getNetworkSmProfiles(self, networkId: str, **kwargs): return self._session.get(metadata, resource, params) + def getNetworkSmScripts(self, networkId: str): + """ + **List the scripts for this network** + https://developer.cisco.com/meraki/api-v1/#!get-network-sm-scripts + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["sm", "configure", "scripts"], + "operation": "getNetworkSmScripts", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sm/scripts" + + return self._session.get(metadata, resource) + + def createNetworkSmScript(self, networkId: str, name: str, platform: str, **kwargs): + """ + **Create a new script** + https://developer.cisco.com/meraki/api-v1/#!create-network-sm-script + + - networkId (string): Network ID + - name (string): Unique name to identify this script. + - platform (string): Platform that this script will run on. + - scope (string): The target scope of the script. (Either scope or targetGroupId must be present.) + - tags (array): The target tags of the script as an array of strings. Required if scope is one of withAny, withoutAny, withAll, withoutAll. + - targetGroupId (string): The tag target group ID that should be used to scope devices. Either scope or targetGroupId must be present. + - description (string): Description of this script. + - runAsUsername (string): Username that script should run as. + - externalSource (object): Properties for a script provided by a url instead of an upload + - upload (object): Properties for a script provided as an upload instead of a url + - schedule (object): When the script is intended to run + """ + + kwargs.update(locals()) + + if "platform" in kwargs and kwargs["platform"] is not None: + options = ["Windows", "macOS"] + assert kwargs["platform"] in options, ( + f'''"platform" cannot be "{kwargs["platform"]}", & must be set to one of: {options}''' + ) + if "scope" in kwargs: + options = ["all", "none", "withAll", "withAny", "withoutAll", "withoutAny"] + assert kwargs["scope"] in options, f'''"scope" cannot be "{kwargs["scope"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["sm", "configure", "scripts"], + "operation": "createNetworkSmScript", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sm/scripts" + + body_params = [ + "name", + "platform", + "scope", + "tags", + "targetGroupId", + "description", + "runAsUsername", + "externalSource", + "upload", + "schedule", + ] + 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"createNetworkSmScript: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def createNetworkSmScriptsJob(self, networkId: str, scriptId: str, **kwargs): + """ + **Create a job that will run a script on a set of devices** + https://developer.cisco.com/meraki/api-v1/#!create-network-sm-scripts-job + + - networkId (string): Network ID + - scriptId (string): ID of script that should be run on the matching devices + - deviceIds (array): List of device IDs to run that should run this script + - deviceFilter (string): Create job on all devices in-scope or devices that have failed to run this script + """ + + kwargs.update(locals()) + + if "deviceFilter" in kwargs: + options = ["All", "Failed"] + assert kwargs["deviceFilter"] in options, ( + f'''"deviceFilter" cannot be "{kwargs["deviceFilter"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["sm", "configure", "scripts", "jobs"], + "operation": "createNetworkSmScriptsJob", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sm/scripts/jobs" + + body_params = [ + "scriptId", + "deviceIds", + "deviceFilter", + ] + 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"createNetworkSmScriptsJob: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getNetworkSmScriptsJobsStatusesLatestByScriptByInterval(self, networkId: str, **kwargs): + """ + **List the latest script job statuses by script and by interval** + https://developer.cisco.com/meraki/api-v1/#!get-network-sm-scripts-jobs-statuses-latest-by-script-by-interval + + - networkId (string): Network ID + - scriptIds (array): List of script IDs to fetch statuses + - t0 (string): The beginning of the timespan for the data. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 180 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 180 days. The default is 1 day. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["sm", "configure", "scripts", "jobs", "statuses", "latest", "byScript", "byInterval"], + "operation": "getNetworkSmScriptsJobsStatusesLatestByScriptByInterval", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sm/scripts/jobs/statuses/latest/byScript/byInterval" + + query_params = [ + "scriptIds", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "scriptIds", + ] + 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"getNetworkSmScriptsJobsStatusesLatestByScriptByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getNetworkSmScriptsJobsStatusesLatestByScriptAndDevice( + self, networkId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List jobs for a given script and/or device** + https://developer.cisco.com/meraki/api-v1/#!get-network-sm-scripts-jobs-statuses-latest-by-script-and-device + + - networkId (string): Network 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 + - deviceId (string): Query parameter for filtering the list of script job statuses to those belonging to the specified deviceId. + - scriptId (string): Query parameter for filtering the list of script job statuses to those belonging to the specified script. + - inScopeOnly (boolean): If true, show only job statuses for scripts or devices that are in scope. This only applies when either deviceId or scriptId are given. + - status (string): Query parameter for filtering the list of job statuses to those having the specified status. + - sortOrder (string): Query parameter for specifying the direction of sorting to use for the given sortKey. This param is overridden if startingAfter or endingBefore is provided. + - sortKey (string): Query parameter to sort the script tasks by the value of the specified key. This param is overridden if startingAfter or endingBefore is provided. + - perPage (integer): Number of results to show per page. + - startingAfter (string): A statusId. Start the search cursor after the specified Status record. + - endingBefore (string): A statusId. Search backward with the cursor starting before the specified Status record. + """ + + kwargs.update(locals()) + + if "status" in kwargs: + options = [ + "cancelled", + "command failed", + "completed", + "created", + "enqueued", + "error", + "failed", + "pending", + "running", + "success", + "unknown", + ] + assert kwargs["status"] in options, ( + f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + if "sortKey" in kwargs: + options = ["completedAt", "createdAt", "enqueuedAt", "status", "updatedAt"] + assert kwargs["sortKey"] in options, ( + f'''"sortKey" cannot be "{kwargs["sortKey"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["sm", "configure", "scripts", "jobs", "statuses", "latest", "byScriptAndDevice"], + "operation": "getNetworkSmScriptsJobsStatusesLatestByScriptAndDevice", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sm/scripts/jobs/statuses/latest/byScriptAndDevice" + + query_params = [ + "deviceId", + "scriptId", + "inScopeOnly", + "status", + "sortOrder", + "sortKey", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getNetworkSmScriptsJobsStatusesLatestByScriptAndDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createNetworkSmScriptsUpload(self, networkId: str, size: str, **kwargs): + """ + **Creates an upload URL that can be used to upload a script** + https://developer.cisco.com/meraki/api-v1/#!create-network-sm-scripts-upload + + - networkId (string): Network ID + - size (string): Size of the file in bytes that will be uploaded. + """ + + kwargs = locals() + + metadata = { + "tags": ["sm", "configure", "scripts", "uploads"], + "operation": "createNetworkSmScriptsUpload", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sm/scripts/uploads" + + body_params = [ + "size", + ] + 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"createNetworkSmScriptsUpload: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getNetworkSmScript(self, networkId: str, scriptId: str): + """ + **Return a script** + https://developer.cisco.com/meraki/api-v1/#!get-network-sm-script + + - networkId (string): Network ID + - scriptId (string): Script ID + """ + + metadata = { + "tags": ["sm", "configure", "scripts"], + "operation": "getNetworkSmScript", + } + networkId = urllib.parse.quote(str(networkId), safe="") + scriptId = urllib.parse.quote(str(scriptId), safe="") + resource = f"/networks/{networkId}/sm/scripts/{scriptId}" + + return self._session.get(metadata, resource) + + def updateNetworkSmScript(self, networkId: str, scriptId: str, **kwargs): + """ + **Update an existing script** + https://developer.cisco.com/meraki/api-v1/#!update-network-sm-script + + - networkId (string): Network ID + - scriptId (string): Script ID + - name (string): Unique name to identify this script. + - platform (string): Platform that this script will run on. + - scope (string): The target scope of the script. (Either scope or targetGroupId must be present.) + - tags (array): The target tags of the script as an array of strings. Required if scope is one of withAny, withoutAny, withAll, withoutAll. + - targetGroupId (string): The tag target group ID that should be used to scope devices. Either scope or targetGroupId must be present. + - description (string): Description of this script. + - runAsUsername (string): Username that script should run as. + - externalSource (object): Properties for a script provided by a url instead of an upload + - upload (object): Properties for a script provided as an upload instead of a url + - schedule (object): When the script is intended to run + """ + + kwargs.update(locals()) + + if "platform" in kwargs and kwargs["platform"] is not None: + options = ["Windows", "macOS"] + assert kwargs["platform"] in options, ( + f'''"platform" cannot be "{kwargs["platform"]}", & must be set to one of: {options}''' + ) + if "scope" in kwargs: + options = ["all", "none", "withAll", "withAny", "withoutAll", "withoutAny"] + assert kwargs["scope"] in options, f'''"scope" cannot be "{kwargs["scope"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["sm", "configure", "scripts"], + "operation": "updateNetworkSmScript", + } + networkId = urllib.parse.quote(str(networkId), safe="") + scriptId = urllib.parse.quote(str(scriptId), safe="") + resource = f"/networks/{networkId}/sm/scripts/{scriptId}" + + body_params = [ + "name", + "platform", + "scope", + "tags", + "targetGroupId", + "description", + "runAsUsername", + "externalSource", + "upload", + "schedule", + ] + 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"updateNetworkSmScript: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteNetworkSmScript(self, networkId: str, scriptId: str): + """ + **Delete a script** + https://developer.cisco.com/meraki/api-v1/#!delete-network-sm-script + + - networkId (string): Network ID + - scriptId (string): Script ID + """ + + metadata = { + "tags": ["sm", "configure", "scripts"], + "operation": "deleteNetworkSmScript", + } + networkId = urllib.parse.quote(str(networkId), safe="") + scriptId = urllib.parse.quote(str(scriptId), safe="") + resource = f"/networks/{networkId}/sm/scripts/{scriptId}" + + return self._session.delete(metadata, resource) + def getNetworkSmTargetGroups(self, networkId: str, **kwargs): """ **List the target groups in this network** @@ -1396,6 +1769,187 @@ def getOrganizationSmApnsCert(self, organizationId: str): return self._session.get(metadata, resource) + def createOrganizationSmAppleCloudEnrollmentSyncJob(self, organizationId: str, **kwargs): + """ + **Enqueue a sync job for an ADE account** + https://developer.cisco.com/meraki/api-v1/#!create-organization-sm-apple-cloud-enrollment-sync-job + + - organizationId (string): Organization ID + - adeAccountId (string): ADE Account ID + - fullSync (boolean): Whether or not job is full sync (defaults to full sync) + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["sm", "configure", "apple", "cloudEnrollment", "syncJobs"], + "operation": "createOrganizationSmAppleCloudEnrollmentSyncJob", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sm/apple/cloudEnrollment/syncJobs" + + body_params = [ + "adeAccountId", + "fullSync", + ] + 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"createOrganizationSmAppleCloudEnrollmentSyncJob: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSmAppleCloudEnrollmentSyncJob(self, organizationId: str, syncJobId: str): + """ + **Retrieve the status of an ADE sync job** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sm-apple-cloud-enrollment-sync-job + + - organizationId (string): Organization ID + - syncJobId (string): Sync job ID + """ + + metadata = { + "tags": ["sm", "configure", "apple", "cloudEnrollment", "syncJobs"], + "operation": "getOrganizationSmAppleCloudEnrollmentSyncJob", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + syncJobId = urllib.parse.quote(str(syncJobId), safe="") + resource = f"/organizations/{organizationId}/sm/apple/cloudEnrollment/syncJobs/{syncJobId}" + + return self._session.get(metadata, resource) + + def createOrganizationSmBulkEnrollmentToken(self, organizationId: str, networkId: str, expiresAt: str, **kwargs): + """ + **Create a PccBulkEnrollmentToken** + https://developer.cisco.com/meraki/api-v1/#!create-organization-sm-bulk-enrollment-token + + - organizationId (string): Organization ID + - networkId (string): The id of the associated node_group. + - expiresAt (string): The expiration date. + """ + + kwargs = locals() + + metadata = { + "tags": ["sm", "configure", "bulkEnrollment", "token"], + "operation": "createOrganizationSmBulkEnrollmentToken", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sm/bulkEnrollment/token" + + body_params = [ + "networkId", + "expiresAt", + ] + 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"createOrganizationSmBulkEnrollmentToken: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSmBulkEnrollmentToken(self, organizationId: str, tokenId: str): + """ + **Return a BulkEnrollmentToken** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sm-bulk-enrollment-token + + - organizationId (string): Organization ID + - tokenId (string): Token ID + """ + + metadata = { + "tags": ["sm", "configure", "bulkEnrollment", "token"], + "operation": "getOrganizationSmBulkEnrollmentToken", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + tokenId = urllib.parse.quote(str(tokenId), safe="") + resource = f"/organizations/{organizationId}/sm/bulkEnrollment/token/{tokenId}" + + return self._session.get(metadata, resource) + + def updateOrganizationSmBulkEnrollmentToken(self, organizationId: str, tokenId: str, **kwargs): + """ + **Update a PccBulkEnrollmentToken** + https://developer.cisco.com/meraki/api-v1/#!update-organization-sm-bulk-enrollment-token + + - organizationId (string): Organization ID + - tokenId (string): Token ID + - networkId (string): The id of the associated node_group. + - expiresAt (string): The expiration date. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["sm", "configure", "bulkEnrollment", "token"], + "operation": "updateOrganizationSmBulkEnrollmentToken", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + tokenId = urllib.parse.quote(str(tokenId), safe="") + resource = f"/organizations/{organizationId}/sm/bulkEnrollment/token/{tokenId}" + + body_params = [ + "networkId", + "expiresAt", + ] + 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"updateOrganizationSmBulkEnrollmentToken: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSmBulkEnrollmentToken(self, organizationId: str, tokenId: str): + """ + **Delete a PccBulkEnrollmentToken** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-sm-bulk-enrollment-token + + - organizationId (string): Organization ID + - tokenId (string): Token ID + """ + + metadata = { + "tags": ["sm", "configure", "bulkEnrollment", "token"], + "operation": "deleteOrganizationSmBulkEnrollmentToken", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + tokenId = urllib.parse.quote(str(tokenId), safe="") + resource = f"/organizations/{organizationId}/sm/bulkEnrollment/token/{tokenId}" + + return self._session.delete(metadata, resource) + + def getOrganizationSmBulkEnrollmentTokens(self, organizationId: str): + """ + **List all BulkEnrollmentTokens for an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sm-bulk-enrollment-tokens + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["sm", "configure", "bulkEnrollment", "tokens"], + "operation": "getOrganizationSmBulkEnrollmentTokens", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sm/bulkEnrollment/tokens" + + return self._session.get(metadata, resource) + def updateOrganizationSmSentryPoliciesAssignments(self, organizationId: str, items: list, **kwargs): """ **Update an Organizations Sentry Policies using the provided list** diff --git a/meraki/aio/api/support.py b/meraki/aio/api/support.py new file mode 100644 index 0000000..721ee80 --- /dev/null +++ b/meraki/aio/api/support.py @@ -0,0 +1,24 @@ +import urllib + + +class AsyncSupport: + def __init__(self, session): + super().__init__() + self._session = session + + def getOrganizationSupportSalesRepresentatives(self, organizationId: str): + """ + **Returns the organization's sales representatives** + https://developer.cisco.com/meraki/api-v1/#!get-organization-support-sales-representatives + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["support", "monitor", "salesRepresentatives"], + "operation": "getOrganizationSupportSalesRepresentatives", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/support/salesRepresentatives" + + return self._session.get(metadata, resource) diff --git a/meraki/aio/api/switch.py b/meraki/aio/api/switch.py index b164485..746bbca 100644 --- a/meraki/aio/api/switch.py +++ b/meraki/aio/api/switch.py @@ -6,14 +6,17 @@ def __init__(self, session): super().__init__() self._session = session - def getDeviceSwitchPorts(self, serial: str): + def getDeviceSwitchPorts(self, serial: str, **kwargs): """ **List the switch ports for a switch** https://developer.cisco.com/meraki/api-v1/#!get-device-switch-ports - serial (string): Serial + - hideDefaultPorts (boolean): Optional flag that, when true, will hide modular switchports that may not be connected to the device at the moment """ + kwargs.update(locals()) + metadata = { "tags": ["switch", "configure", "ports"], "operation": "getDeviceSwitchPorts", @@ -21,7 +24,18 @@ def getDeviceSwitchPorts(self, serial: str): serial = urllib.parse.quote(str(serial), safe="") resource = f"/devices/{serial}/switch/ports" - return self._session.get(metadata, resource) + query_params = [ + "hideDefaultPorts", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getDeviceSwitchPorts: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) def cycleDeviceSwitchPorts(self, serial: str, ports: list, **kwargs): """ @@ -54,6 +68,46 @@ def cycleDeviceSwitchPorts(self, serial: str, ports: list, **kwargs): return self._session.post(metadata, resource, payload) + def updateDeviceSwitchPortsMirror(self, serial: str, source: dict, destination: dict, **kwargs): + """ + **Update a port mirror** + https://developer.cisco.com/meraki/api-v1/#!update-device-switch-ports-mirror + + - serial (string): The switch identifier + - source (object): Source ports mirror configuration + - destination (object): Destination port mirror configuration + - tags (array): Port mirror tags + - role (string): Switch role can be source or destination + - comment (string): My pretty comment + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "mirror"], + "operation": "updateDeviceSwitchPortsMirror", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/switch/ports/mirror" + + body_params = [ + "serial", + "source", + "destination", + "tags", + "role", + "comment", + ] + 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"updateDeviceSwitchPortsMirror: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getDeviceSwitchPortsStatuses(self, serial: str, **kwargs): """ **Return the status for all the ports of a switch** @@ -154,6 +208,7 @@ def updateDeviceSwitchPort(self, serial: str, portId: str, **kwargs): - vlan (integer): The VLAN of the switch port. For a trunk port, this is the native VLAN. A null value will clear the value set for trunk ports. - voiceVlan (integer): The voice VLAN of the switch port. Only applicable to access ports. - allowedVlans (string): The VLANs allowed on the switch port. Only applicable to trunk ports. + - activeVlans (string): The VLANs that are active on the switch port. Only applicable to trunk ports. - isolationEnabled (boolean): The isolation status of the switch port. - rstpEnabled (boolean): The rapid spanning tree protocol status. - stpGuard (string): The state of the STP guard ('disabled', 'root guard', 'bpdu guard' or 'loop guard'). @@ -214,6 +269,7 @@ def updateDeviceSwitchPort(self, serial: str, portId: str, **kwargs): "vlan", "voiceVlan", "allowedVlans", + "activeVlans", "isolationEnabled", "rstpEnabled", "stpGuard", @@ -303,6 +359,12 @@ def createDeviceSwitchRoutingInterface(self, serial: str, name: str, **kwargs): - multicastRouting (string): Enable multicast support if, multicast routing between VLANs is required. Options are: 'disabled', 'enabled' or 'IGMP snooping querier'. Default is 'disabled'. - vlanId (integer): The VLAN this L3 interface is on. VLAN must be between 1 and 4094. - defaultGateway (string): The next hop for any traffic that isn't going to a directly connected subnet or over a static route. This IP address must exist in a subnet with a L3 interface. Required if this is the first IPv4 interface. + - isSwitchDefaultGateway (boolean): When true, the switch uses the IPv4 uplink gateway as its IPv4 default gateway. This can only be set if the interface is designated as the IPv4 uplink and the switch is running IOS XE version >= 17.18.3. + - uplinkV4 (boolean): When true, this interface is used as static IPv4 uplink. + - candidateUplinkV4 (boolean): When true, this interface is a UAC candidate for IPv4 Uplink. + - uplinkV6 (boolean): When true, this interface is used as static IPv6 uplink. + - staticV4Dns1 (string): Primary IPv4 DNS server address + - staticV4Dns2 (string): Secondary IPv4 DNS server address - ospfSettings (object): The OSPF routing settings of the interface. - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher @@ -337,6 +399,12 @@ def createDeviceSwitchRoutingInterface(self, serial: str, name: str, **kwargs): "multicastRouting", "vlanId", "defaultGateway", + "isSwitchDefaultGateway", + "uplinkV4", + "candidateUplinkV4", + "uplinkV6", + "staticV4Dns1", + "staticV4Dns2", "ospfSettings", "ipv6", "vrf", @@ -386,6 +454,12 @@ def updateDeviceSwitchRoutingInterface(self, serial: str, interfaceId: str, **kw - multicastRouting (string): Enable multicast support if, multicast routing between VLANs is required. Options are: 'disabled', 'enabled' or 'IGMP snooping querier'. Default is 'disabled'. - vlanId (integer): The VLAN this L3 interface is on. VLAN must be between 1 and 4094. - defaultGateway (string): The next hop for any traffic that isn't going to a directly connected subnet or over a static route. This IP address must exist in a subnet with a L3 interface. Required if this is the first IPv4 interface. + - isSwitchDefaultGateway (boolean): When true, the switch uses the IPv4 uplink gateway as its IPv4 default gateway. This can only be set if the interface is designated as the IPv4 uplink and the switch is running IOS XE version >= 17.18.3. + - uplinkV4 (boolean): When true, this interface is used as static IPv4 uplink. + - candidateUplinkV4 (boolean): When true, this interface is a UAC candidate for IPv4 Uplink. + - uplinkV6 (boolean): When true, this interface is used as static IPv6 uplink. + - staticV4Dns1 (string): Primary IPv4 DNS server address + - staticV4Dns2 (string): Secondary IPv4 DNS server address - ospfSettings (object): The OSPF routing settings of the interface. - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher @@ -417,6 +491,12 @@ def updateDeviceSwitchRoutingInterface(self, serial: str, interfaceId: str, **kw "multicastRouting", "vlanId", "defaultGateway", + "isSwitchDefaultGateway", + "uplinkV4", + "candidateUplinkV4", + "uplinkV6", + "staticV4Dns1", + "staticV4Dns2", "ospfSettings", "ipv6", "vrf", @@ -1388,14 +1468,17 @@ def updateNetworkSwitchDscpToCosMappings(self, networkId: str, mappings: list, * return self._session.put(metadata, resource, payload) - def getNetworkSwitchLinkAggregations(self, networkId: str): + def getNetworkSwitchLinkAggregations(self, networkId: str, **kwargs): """ **List link aggregation groups** https://developer.cisco.com/meraki/api-v1/#!get-network-switch-link-aggregations - networkId (string): Network ID + - serials (array): Optional parameter to filter by device serial numbers. Matches multiple exact serials. """ + kwargs.update(locals()) + metadata = { "tags": ["switch", "configure", "linkAggregations"], "operation": "getNetworkSwitchLinkAggregations", @@ -1403,7 +1486,26 @@ def getNetworkSwitchLinkAggregations(self, networkId: str): networkId = urllib.parse.quote(str(networkId), safe="") resource = f"/networks/{networkId}/switch/linkAggregations" - return self._session.get(metadata, resource) + query_params = [ + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getNetworkSwitchLinkAggregations: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) def createNetworkSwitchLinkAggregation(self, networkId: str, **kwargs): """ @@ -1413,6 +1515,7 @@ def createNetworkSwitchLinkAggregation(self, networkId: str, **kwargs): - networkId (string): Network ID - switchPorts (array): Array of switch or stack ports for creating aggregation group. Minimum 2 and maximum 8 ports are supported. - switchProfilePorts (array): Array of switch profile ports for creating aggregation group. Minimum 2 and maximum 8 ports are supported. + - esiMhPairId (string): ESI-MH pair ID. Required when creating a downstream aggregation across ESI-MH pair member switches. """ kwargs.update(locals()) @@ -1427,6 +1530,7 @@ def createNetworkSwitchLinkAggregation(self, networkId: str, **kwargs): body_params = [ "switchPorts", "switchProfilePorts", + "esiMhPairId", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1652,6 +1756,126 @@ def updateNetworkSwitchPortSchedule(self, networkId: str, portScheduleId: str, * return self._session.put(metadata, resource, payload) + def getNetworkSwitchPortsProfiles(self, networkId: str): + """ + **List the port profiles in a network** + https://developer.cisco.com/meraki/api-v1/#!get-network-switch-ports-profiles + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "getNetworkSwitchPortsProfiles", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/switch/ports/profiles" + + return self._session.get(metadata, resource) + + def createNetworkSwitchPortsProfile(self, networkId: str, **kwargs): + """ + **Create a port profile in a network** + https://developer.cisco.com/meraki/api-v1/#!create-network-switch-ports-profile + + - networkId (string): Network ID + - name (string): The name of the profile. + - description (string): Text describing the profile. + - tags (array): Space-seperated list of tags + - defaultRadiusProfileName (string): When present, the default RADIUS attribute value for RADIUS-based port profile application + - authentication (object): Authentication settings for RADIUS-based port profile application. + - port (object): Configuration settings for port profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "createNetworkSwitchPortsProfile", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/switch/ports/profiles" + + body_params = [ + "name", + "description", + "tags", + "defaultRadiusProfileName", + "authentication", + "port", + ] + 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"createNetworkSwitchPortsProfile: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateNetworkSwitchPortsProfile(self, networkId: str, id: str, **kwargs): + """ + **Update a port profile in a network** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-ports-profile + + - networkId (string): Network ID + - id (string): ID + - name (string): The name of the profile. + - description (string): Text describing the profile. + - tags (array): Space-seperated list of tags + - defaultRadiusProfileName (string): When present, the default RADIUS attribute value for RADIUS-based port profile application + - authentication (object): Authentication settings for RADIUS-based port profile application. + - port (object): Configuration settings for port profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "updateNetworkSwitchPortsProfile", + } + networkId = urllib.parse.quote(str(networkId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/networks/{networkId}/switch/ports/profiles/{id}" + + body_params = [ + "name", + "description", + "tags", + "defaultRadiusProfileName", + "authentication", + "port", + ] + 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"updateNetworkSwitchPortsProfile: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteNetworkSwitchPortsProfile(self, networkId: str, id: str): + """ + **Delete a port profile from a network** + https://developer.cisco.com/meraki/api-v1/#!delete-network-switch-ports-profile + + - networkId (string): Network ID + - id (string): ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "deleteNetworkSwitchPortsProfile", + } + networkId = urllib.parse.quote(str(networkId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/networks/{networkId}/switch/ports/profiles/{id}" + + return self._session.delete(metadata, resource) + def getNetworkSwitchQosRules(self, networkId: str): """ **List quality of service rules** @@ -1855,6 +2079,64 @@ def updateNetworkSwitchQosRule(self, networkId: str, qosRuleId: str, **kwargs): return self._session.put(metadata, resource, payload) + def getNetworkSwitchRaGuardPolicy(self, networkId: str): + """ + **Return RA Guard settings** + https://developer.cisco.com/meraki/api-v1/#!get-network-switch-ra-guard-policy + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["switch", "configure", "raGuardPolicy"], + "operation": "getNetworkSwitchRaGuardPolicy", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/switch/raGuardPolicy" + + return self._session.get(metadata, resource) + + def updateNetworkSwitchRaGuardPolicy(self, networkId: str, **kwargs): + """ + **Update RA Guard settings** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-ra-guard-policy + + - networkId (string): Network ID + - defaultPolicy (string): New Router Advertisers are 'allowed' or 'blocked'. Default value is 'allowed'. + - allowedServers (array): List the MAC addresses of Router Advertisers to permit on the network when defaultPolicy is set to blocked. + - blockedServers (array): List the MAC addresses of Router Advertisers to block on the network when defaultPolicy is set to allowed. + """ + + kwargs.update(locals()) + + if "defaultPolicy" in kwargs: + options = ["allowed", "blocked"] + assert kwargs["defaultPolicy"] in options, ( + f'''"defaultPolicy" cannot be "{kwargs["defaultPolicy"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["switch", "configure", "raGuardPolicy"], + "operation": "updateNetworkSwitchRaGuardPolicy", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/switch/raGuardPolicy" + + body_params = [ + "defaultPolicy", + "allowedServers", + "blockedServers", + ] + 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"updateNetworkSwitchRaGuardPolicy: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkSwitchRoutingMulticast(self, networkId: str): """ **Return multicast settings for a network** @@ -2175,6 +2457,45 @@ def updateNetworkSwitchSettings(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) + def updateNetworkSwitchSpanningTree(self, networkId: str, **kwargs): + """ + **Updates Spanning Tree configuration** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-spanning-tree + + - networkId (string): Network ID + - enabled (boolean): Network-level spanning Tree enable + - mode (string): Catalyst Spanning Tree Protocol mode (mst, rpvst+) + - priorities (array): Spanning tree priority for switches/stacks or switch templates. An empty array will clear the priority settings. + """ + + kwargs.update(locals()) + + if "mode" in kwargs: + options = ["mst", "rpvst+"] + assert kwargs["mode"] in options, f'''"mode" cannot be "{kwargs["mode"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["switch", "configure", "spanningTree"], + "operation": "updateNetworkSwitchSpanningTree", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/switch/spanningTree" + + body_params = [ + "enabled", + "mode", + "priorities", + ] + 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"updateNetworkSwitchSpanningTree: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkSwitchStacks(self, networkId: str): """ **List the switch stacks in a network** @@ -2225,6 +2546,41 @@ def createNetworkSwitchStack(self, networkId: str, name: str, serials: list, **k return self._session.post(metadata, resource, payload) + def updateNetworkSwitchStack(self, networkId: str, switchStackId: str, **kwargs): + """ + **Update a switch stack** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-stack + + - networkId (string): Network ID + - switchStackId (string): Switch stack ID + - name (string): The name of the stack + - members (array): The list of switches that should be in the stack + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "stacks"], + "operation": "updateNetworkSwitchStack", + } + networkId = urllib.parse.quote(str(networkId), safe="") + switchStackId = urllib.parse.quote(str(switchStackId), safe="") + resource = f"/networks/{networkId}/switch/stacks/{switchStackId}" + + body_params = [ + "name", + "members", + ] + 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"updateNetworkSwitchStack: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkSwitchStack(self, networkId: str, switchStackId: str): """ **Show a switch stack** @@ -2296,6 +2652,49 @@ def addNetworkSwitchStack(self, networkId: str, switchStackId: str, serial: str, return self._session.post(metadata, resource, payload) + def updateNetworkSwitchStackPortsMirror( + self, networkId: str, switchStackId: str, source: dict, destination: dict, **kwargs + ): + """ + **Update switch port mirrors for switch stacks** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-stack-ports-mirror + + - networkId (string): Network ID + - switchStackId (string): Switch stack ID + - source (object): Source port details + - destination (object): Destination port Details + - tags (array): Port mirror tags + - role (string): Switch role can be source or destination + - comment (string): My pretty comment + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "stacks", "ports", "mirror"], + "operation": "updateNetworkSwitchStackPortsMirror", + } + networkId = urllib.parse.quote(str(networkId), safe="") + switchStackId = urllib.parse.quote(str(switchStackId), safe="") + resource = f"/networks/{networkId}/switch/stacks/{switchStackId}/ports/mirror" + + body_params = [ + "source", + "destination", + "tags", + "role", + "comment", + ] + 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"updateNetworkSwitchStackPortsMirror: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def removeNetworkSwitchStack(self, networkId: str, switchStackId: str, serial: str, **kwargs): """ **Remove a switch from a stack** @@ -2391,6 +2790,12 @@ def createNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId - multicastRouting (string): Enable multicast support if, multicast routing between VLANs is required. Options are: 'disabled', 'enabled' or 'IGMP snooping querier'. Default is 'disabled'. - vlanId (integer): The VLAN this L3 interface is on. VLAN must be between 1 and 4094. - defaultGateway (string): The next hop for any traffic that isn't going to a directly connected subnet or over a static route. This IP address must exist in a subnet with a L3 interface. Required if this is the first IPv4 interface. + - isSwitchDefaultGateway (boolean): When true, the switch uses the IPv4 uplink gateway as its IPv4 default gateway. This can only be set if the interface is designated as the IPv4 uplink and the switch is running IOS XE version >= 17.18.3. + - uplinkV4 (boolean): When true, this interface is used as static IPv4 uplink. + - candidateUplinkV4 (boolean): When true, this interface is a UAC candidate for IPv4 Uplink. + - uplinkV6 (boolean): When true, this interface is used as static IPv6 uplink. + - staticV4Dns1 (string): Primary IPv4 DNS server address + - staticV4Dns2 (string): Secondary IPv4 DNS server address - ospfSettings (object): The OSPF routing settings of the interface. - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher @@ -2426,6 +2831,12 @@ def createNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId "multicastRouting", "vlanId", "defaultGateway", + "isSwitchDefaultGateway", + "uplinkV4", + "candidateUplinkV4", + "uplinkV6", + "staticV4Dns1", + "staticV4Dns2", "ospfSettings", "ipv6", "vrf", @@ -2480,6 +2891,12 @@ def updateNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId - multicastRouting (string): Enable multicast support if, multicast routing between VLANs is required. Options are: 'disabled', 'enabled' or 'IGMP snooping querier'. Default is 'disabled'. - vlanId (integer): The VLAN this L3 interface is on. VLAN must be between 1 and 4094. - defaultGateway (string): The next hop for any traffic that isn't going to a directly connected subnet or over a static route. This IP address must exist in a subnet with a L3 interface. Required if this is the first IPv4 interface. + - isSwitchDefaultGateway (boolean): When true, the switch uses the IPv4 uplink gateway as its IPv4 default gateway. This can only be set if the interface is designated as the IPv4 uplink and the switch is running IOS XE version >= 17.18.3. + - uplinkV4 (boolean): When true, this interface is used as static IPv4 uplink. + - candidateUplinkV4 (boolean): When true, this interface is a UAC candidate for IPv4 Uplink. + - uplinkV6 (boolean): When true, this interface is used as static IPv6 uplink. + - staticV4Dns1 (string): Primary IPv4 DNS server address + - staticV4Dns2 (string): Secondary IPv4 DNS server address - ospfSettings (object): The OSPF routing settings of the interface. - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher @@ -2512,6 +2929,12 @@ def updateNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId "multicastRouting", "vlanId", "defaultGateway", + "isSwitchDefaultGateway", + "uplinkV4", + "candidateUplinkV4", + "uplinkV6", + "staticV4Dns1", + "staticV4Dns2", "ospfSettings", "ipv6", "vrf", @@ -2911,14 +3334,68 @@ def updateNetworkSwitchStp(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) - def getOrganizationConfigTemplateSwitchProfiles(self, organizationId: str, configTemplateId: str): + def getOrganizationConfigTemplatesSwitchProfilesPortsMirrorsBySwitchProfile( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **List the switch templates for your switch template configuration** - https://developer.cisco.com/meraki/api-v1/#!get-organization-config-template-switch-profiles + **list the port mirror configurations in an organization by switch profile** + https://developer.cisco.com/meraki/api-v1/#!get-organization-config-templates-switch-profiles-ports-mirrors-by-switch-profile - organizationId (string): Organization ID - - configTemplateId (string): Config template 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 + - configTemplateIds (array): Optional parameter to filter the result set by the included set of config template IDs + - ids (array): A list of switch profile ids. The returned profiles will be filtered to only include these ids. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 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": ["switch", "configure", "configTemplates", "profiles", "ports", "mirrors", "bySwitchProfile"], + "operation": "getOrganizationConfigTemplatesSwitchProfilesPortsMirrorsBySwitchProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/configTemplates/switch/profiles/ports/mirrors/bySwitchProfile" + + query_params = [ + "configTemplateIds", + "ids", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "configTemplateIds", + "ids", + ] + 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"getOrganizationConfigTemplatesSwitchProfilesPortsMirrorsBySwitchProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationConfigTemplateSwitchProfiles(self, organizationId: str, configTemplateId: str): + """ + **List the switch templates for your switch template configuration** + https://developer.cisco.com/meraki/api-v1/#!get-organization-config-template-switch-profiles + + - organizationId (string): Organization ID + - configTemplateId (string): Config template ID + """ metadata = { "tags": ["switch", "configure", "configTemplates", "profiles"], @@ -2951,6 +3428,55 @@ def getOrganizationConfigTemplateSwitchProfilePorts(self, organizationId: str, c return self._session.get(metadata, resource) + def updateOrganizationConfigTemplateSwitchProfilePortsMirror( + self, organizationId: str, configTemplateId: str, profileId: str, source: dict, destination: dict, **kwargs + ): + """ + **Update a port mirror** + https://developer.cisco.com/meraki/api-v1/#!update-organization-config-template-switch-profile-ports-mirror + + - organizationId (string): Organization ID + - configTemplateId (string): Config template ID + - profileId (string): Profile ID + - source (object): Source ports mirror configuration + - destination (object): Destination port mirror configuration + - tags (array): Port mirror tags + - role (string): Switch role can be source or destination + - comment (string): My pretty comment + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "configTemplates", "profiles", "ports", "mirror"], + "operation": "updateOrganizationConfigTemplateSwitchProfilePortsMirror", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") + profileId = urllib.parse.quote(str(profileId), safe="") + resource = ( + f"/organizations/{organizationId}/configTemplates/{configTemplateId}/switch/profiles/{profileId}/ports/mirror" + ) + + body_params = [ + "source", + "destination", + "tags", + "role", + "comment", + ] + 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"updateOrganizationConfigTemplateSwitchProfilePortsMirror: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + def getOrganizationConfigTemplateSwitchProfilePort( self, organizationId: str, configTemplateId: str, profileId: str, portId: str ): @@ -2997,6 +3523,7 @@ def updateOrganizationConfigTemplateSwitchProfilePort( - vlan (integer): The VLAN of the switch template port. For a trunk port, this is the native VLAN. A null value will clear the value set for trunk ports. - voiceVlan (integer): The voice VLAN of the switch template port. Only applicable to access ports. - allowedVlans (string): The VLANs allowed on the switch template port. Only applicable to trunk ports. + - activeVlans (string): The VLANs that are active on the switch template port. Only applicable to trunk ports. - isolationEnabled (boolean): The isolation status of the switch template port. - rstpEnabled (boolean): The rapid spanning tree protocol status. - stpGuard (string): The state of the STP guard ('disabled', 'root guard', 'bpdu guard' or 'loop guard'). @@ -3059,6 +3586,7 @@ def updateOrganizationConfigTemplateSwitchProfilePort( "vlan", "voiceVlan", "allowedVlans", + "activeVlans", "isolationEnabled", "rstpEnabled", "stpGuard", @@ -3128,89 +3656,101 @@ def getOrganizationSummarySwitchPowerHistory(self, organizationId: str, **kwargs return self._session.get(metadata, resource, params) - def cloneOrganizationSwitchDevices(self, organizationId: str, sourceSerial: str, targetSerials: list, **kwargs): + def getOrganizationSwitchAlertsPoeByDevice(self, organizationId: str, networkIds: list, **kwargs): """ - **Clone port-level and some switch-level configuration settings from a source switch to one or more target switches** - https://developer.cisco.com/meraki/api-v1/#!clone-organization-switch-devices + **Gets all poe related alerts over a given network and returns information by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-alerts-poe-by-device - organizationId (string): Organization ID - - sourceSerial (string): Serial number of the source switch (must be on a network not bound to a template) - - targetSerials (array): Array of serial numbers of one or more target switches (must be on a network not bound to a template) + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. """ - kwargs = locals() + kwargs.update(locals()) metadata = { - "tags": ["switch", "configure", "devices"], - "operation": "cloneOrganizationSwitchDevices", + "tags": ["switch", "monitor", "alerts", "poe", "byDevice"], + "operation": "getOrganizationSwitchAlertsPoeByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/devices/clone" + resource = f"/organizations/{organizationId}/switch/alerts/poe/byDevice" - body_params = [ - "sourceSerial", - "targetSerials", + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + 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 = [] + body_params + 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"cloneOrganizationSwitchDevices: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationSwitchAlertsPoeByDevice: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def getOrganizationSwitchPortsBySwitch(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def aurora2OrganizationSwitchSwitchTemplates(self, organizationId: str): """ - **List the switchports in an organization by switch** - https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-by-switch + **List switch templates running IOS XE Catalyst firmware.** + https://developer.cisco.com/meraki/api-v1/#!aurora-2-organization-switch-switch-templates - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 50. - - 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. - - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. - - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. - - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. - - name (string): Optional parameter to filter items to switches with names that contain the search term or are an exact match. - - networkIds (array): Optional parameter to filter items to switches in one of the provided networks. - - portProfileIds (array): Optional parameter to filter items to switches that contain switchports belonging to one of the specified port profiles. - - serial (string): Optional parameter to filter items to switches with serial number that contains the search term or are an exact match. - - serials (array): Optional parameter to filter items to switches that have one of the provided serials. + """ + + metadata = { + "tags": ["switch", "configure"], + "operation": "aurora2OrganizationSwitchSwitchTemplates", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/aurora2SwitchTemplates" + + return self._session.get(metadata, resource) + + def getOrganizationSwitchClientsConnectionsAuthenticationByClient(self, organizationId: str, **kwargs): + """ + **Summarizes authentication outcomes per switch client across an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-clients-connections-authentication-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["switch", "configure", "ports", "bySwitch"], - "operation": "getOrganizationSwitchPortsBySwitch", + "tags": ["switch", "monitor", "clients", "connections", "authentication", "byClient"], + "operation": "getOrganizationSwitchClientsConnectionsAuthenticationByClient", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/ports/bySwitch" + resource = f"/organizations/{organizationId}/switch/clients/connections/authentication/byClient" query_params = [ - "perPage", - "startingAfter", - "endingBefore", - "configurationUpdatedAfter", - "mac", - "macs", - "name", "networkIds", - "portProfileIds", - "serial", - "serials", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "macs", "networkIds", - "portProfileIds", - "serials", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3221,66 +3761,43 @@ def getOrganizationSwitchPortsBySwitch(self, organizationId: str, total_pages=1, 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"getOrganizationSwitchPortsBySwitch: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationSwitchClientsConnectionsAuthenticationByClient: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationSwitchPortsClientsOverviewByDevice( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def getOrganizationSwitchClientsConnectionsDhcpByClient(self, organizationId: str, **kwargs): """ - **List the number of clients for all switchports with at least one online client in an organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-clients-overview-by-device + **Get IP assignment for all clients in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-clients-connections-dhcp-by-client - 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 - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 20. - - 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. - - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. - - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. - - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. - - name (string): Optional parameter to filter items to switches with names that contain the search term or are an exact match. - - networkIds (array): Optional parameter to filter items to switches in one of the provided networks. - - portProfileIds (array): Optional parameter to filter items to switches that contain switchports belonging to one of the specified port profiles. - - serial (string): Optional parameter to filter items to switches with serial number that contains the search term or are an exact match. - - serials (array): Optional parameter to filter items to switches that have one of the provided serials. + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["switch", "monitor", "ports", "clients", "overview", "byDevice"], - "operation": "getOrganizationSwitchPortsClientsOverviewByDevice", + "tags": ["switch", "monitor", "clients", "connections", "dhcp", "byClient"], + "operation": "getOrganizationSwitchClientsConnectionsDhcpByClient", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/ports/clients/overview/byDevice" + resource = f"/organizations/{organizationId}/switch/clients/connections/dhcp/byClient" query_params = [ + "networkIds", "t0", + "t1", "timespan", - "perPage", - "startingAfter", - "endingBefore", - "configurationUpdatedAfter", - "mac", - "macs", - "name", - "networkIds", - "portProfileIds", - "serial", - "serials", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "macs", "networkIds", - "portProfileIds", - "serials", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3292,96 +3809,124 @@ def getOrganizationSwitchPortsClientsOverviewByDevice( 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"getOrganizationSwitchPortsClientsOverviewByDevice: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationSwitchClientsConnectionsDhcpByClient: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationSwitchPortsOverview(self, organizationId: str, **kwargs): + def getOrganizationSwitchClientsConnectionsSwitchPortStatusByClient(self, organizationId: str, **kwargs): """ - **Returns the counts of all active ports for the requested timespan, grouped by speed** - https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-overview + **Switch port status by client.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-clients-connections-switch-port-status-by-client - organizationId (string): Organization ID - - t0 (string): The beginning of the timespan for the data. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 186 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 12 hours and be less than or equal to 186 days. The default is 1 day. + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["switch", "monitor", "ports", "overview"], - "operation": "getOrganizationSwitchPortsOverview", + "tags": ["switch", "monitor", "clients", "connections", "switchPortStatus", "byClient"], + "operation": "getOrganizationSwitchClientsConnectionsSwitchPortStatusByClient", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/ports/overview" + resource = f"/organizations/{organizationId}/switch/clients/connections/switchPortStatus/byClient" query_params = [ + "networkIds", "t0", "t1", "timespan", ] 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 + 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"getOrganizationSwitchPortsOverview: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationSwitchClientsConnectionsSwitchPortStatusByClient: ignoring unrecognized kwargs: {invalid}" + ) return self._session.get(metadata, resource, params) - def getOrganizationSwitchPortsStatusesBySwitch(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def cloneOrganizationSwitchProfilesToTemplateNetwork(self, organizationId: str, **kwargs): """ - **List the switchports in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-statuses-by-switch + **Clone existing switch templates into a destination template network.** + https://developer.cisco.com/meraki/api-v1/#!clone-organization-switch-profiles-to-template-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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. - - 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. - - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. - - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. - - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. - - name (string): Optional parameter to filter items to switches with names that contain the search term or are an exact match. - - networkIds (array): Optional parameter to filter items to switches in one of the provided networks. - - portProfileIds (array): Optional parameter to filter items to switches that contain switchports belonging to one of the specified port profiles. - - serial (string): Optional parameter to filter items to switches with serial number that contains the search term or are an exact match. - - serials (array): Optional parameter to filter items to switches that have one of the provided serials. + - profileIds (array): Switch profile IDs to clone + - templateNodeGroupId (string): Destination template network ID """ kwargs.update(locals()) metadata = { - "tags": ["switch", "monitor", "ports", "statuses", "bySwitch"], - "operation": "getOrganizationSwitchPortsStatusesBySwitch", + "tags": ["switch", "configure"], + "operation": "cloneOrganizationSwitchProfilesToTemplateNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/ports/statuses/bySwitch" + resource = f"/organizations/{organizationId}/switch/cloneProfilesToTemplateNetwork" - query_params = [ - "perPage", - "startingAfter", - "endingBefore", - "configurationUpdatedAfter", - "mac", - "macs", - "name", - "networkIds", - "portProfileIds", - "serial", - "serials", + body_params = [ + "profileIds", + "templateNodeGroupId", + ] + 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"cloneOrganizationSwitchProfilesToTemplateNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchConnectivityLanLinkErrorsByDeviceByPort(self, organizationId: str, networkIds: list, **kwargs): + """ + **Lan link errors by device and port.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-connectivity-lan-link-errors-by-device-by-port + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "connectivity", "lanLink", "errors", "byDevice", "byPort"], + "operation": "getOrganizationSwitchConnectivityLanLinkErrorsByDeviceByPort", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/connectivity/lanLink/errors/byDevice/byPort" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "macs", "networkIds", - "portProfileIds", - "serials", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3393,26 +3938,214 @@ def getOrganizationSwitchPortsStatusesBySwitch(self, organizationId: str, total_ 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"getOrganizationSwitchPortsStatusesBySwitch: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationSwitchConnectivityLanLinkErrorsByDeviceByPort: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationSwitchPortsTopologyDiscoveryByDevice( + def getOrganizationSwitchConnectivityLanStpErrorsByDeviceByPort(self, organizationId: str, networkIds: list, **kwargs): + """ + **Lan STP errors by device and port.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-connectivity-lan-stp-errors-by-device-by-port + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "connectivity", "lanStp", "errors", "byDevice", "byPort"], + "operation": "getOrganizationSwitchConnectivityLanStpErrorsByDeviceByPort", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/connectivity/lanStp/errors/byDevice/byPort" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationSwitchConnectivityLanStpErrorsByDeviceByPort: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationSwitchConnectivityVrrpFailuresByDevice(self, organizationId: str, networkIds: list, **kwargs): + """ + **Gets all vrrp related alerts over a given network and returns information by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-connectivity-vrrp-failures-by-device + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "connectivity", "vrrp", "failures", "byDevice"], + "operation": "getOrganizationSwitchConnectivityVrrpFailuresByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/connectivity/vrrp/failures/byDevice" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationSwitchConnectivityVrrpFailuresByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def cloneOrganizationSwitchDevices(self, organizationId: str, sourceSerial: str, targetSerials: list, **kwargs): + """ + **Clone port-level and some switch-level configuration settings from a source switch to one or more target switches** + https://developer.cisco.com/meraki/api-v1/#!clone-organization-switch-devices + + - organizationId (string): Organization ID + - sourceSerial (string): Serial number of the source switch (must be on a network not bound to a template) + - targetSerials (array): Array of serial numbers of one or more target switches (must be on a network not bound to a template) + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "devices"], + "operation": "cloneOrganizationSwitchDevices", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/devices/clone" + + body_params = [ + "sourceSerial", + "targetSerials", + ] + 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"cloneOrganizationSwitchDevices: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchDevicesSystemQueuesHistoryBySwitchByInterval( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **List most recently seen LLDP/CDP discovery and topology information per switch port in an organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-topology-discovery-by-device + **Return a historical record of packet transmission and loss, broken down by protocol, for insight into switch device health.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-devices-system-queues-history-by-switch-by-interval - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 1200. Interval is calculated if time params are provided. + - networkIds (array): Optional parameter to filter connectivity history by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter connectivity history by switch. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "devices", "system", "queues", "history", "bySwitch", "byInterval"], + "operation": "getOrganizationSwitchDevicesSystemQueuesHistoryBySwitchByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/devices/system/queues/history/bySwitch/byInterval" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationSwitchDevicesSystemQueuesHistoryBySwitchByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsBySwitch(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the switchports in an organization by switch** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-by-switch + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 50. - 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. + - extendedParams (boolean): Optional flag to return all of the switchport data vs smaller dataset + - hideDefaultPorts (boolean): Optional flag that, when true, will hide modular switchports that may not be connected to the device at the moment + - type (array): Optional parameter to filter switchports by type ('access', 'trunk', 'stack', 'routed', 'svl' or 'dad'). All types are selected if not supplied. - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. @@ -3426,18 +4159,19 @@ def getOrganizationSwitchPortsTopologyDiscoveryByDevice( kwargs.update(locals()) metadata = { - "tags": ["switch", "monitor", "ports", "topology", "discovery", "byDevice"], - "operation": "getOrganizationSwitchPortsTopologyDiscoveryByDevice", + "tags": ["switch", "configure", "ports", "bySwitch"], + "operation": "getOrganizationSwitchPortsBySwitch", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/ports/topology/discovery/byDevice" + resource = f"/organizations/{organizationId}/switch/ports/bySwitch" query_params = [ - "t0", - "timespan", "perPage", "startingAfter", "endingBefore", + "extendedParams", + "hideDefaultPorts", + "type", "configurationUpdatedAfter", "mac", "macs", @@ -3450,6 +4184,7 @@ def getOrganizationSwitchPortsTopologyDiscoveryByDevice( params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ + "type", "macs", "networkIds", "portProfileIds", @@ -3464,27 +4199,23 @@ def getOrganizationSwitchPortsTopologyDiscoveryByDevice( 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"getOrganizationSwitchPortsTopologyDiscoveryByDevice: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"getOrganizationSwitchPortsBySwitch: ignoring unrecognized kwargs: {invalid}") return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationSwitchPortsUsageHistoryByDeviceByInterval( + def getOrganizationSwitchPortsClientsOverviewByDevice( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **List the historical usage and traffic data of switchports in an organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-usage-history-by-device-by-interval + **List the number of clients for all switchports with at least one online client in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-clients-overview-by-device - 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 - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 1200. Interval is calculated if time params are provided. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 10. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 20. - 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. - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. @@ -3500,17 +4231,15 @@ def getOrganizationSwitchPortsUsageHistoryByDeviceByInterval( kwargs.update(locals()) metadata = { - "tags": ["switch", "monitor", "ports", "usage", "history", "byDevice", "byInterval"], - "operation": "getOrganizationSwitchPortsUsageHistoryByDeviceByInterval", + "tags": ["switch", "monitor", "ports", "clients", "overview", "byDevice"], + "operation": "getOrganizationSwitchPortsClientsOverviewByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/ports/usage/history/byDevice/byInterval" + resource = f"/organizations/{organizationId}/switch/ports/clients/overview/byDevice" query_params = [ "t0", - "t1", "timespan", - "interval", "perPage", "startingAfter", "endingBefore", @@ -3541,7 +4270,2962 @@ def getOrganizationSwitchPortsUsageHistoryByDeviceByInterval( 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"getOrganizationSwitchPortsUsageHistoryByDeviceByInterval: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationSwitchPortsClientsOverviewByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsMirrorsBySwitch(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **list the port mirror configurations in an organization by switch** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-mirrors-by-switch + + - 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 the result set by the included set of network IDs + - serials (array): A list of serial numbers. The returned devices will be filtered to only include these serials. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 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": ["switch", "configure", "ports", "mirrors", "bySwitch"], + "operation": "getOrganizationSwitchPortsMirrorsBySwitch", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/mirrors/bySwitch" + + query_params = [ + "networkIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationSwitchPortsMirrorsBySwitch: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsOverview(self, organizationId: str, **kwargs): + """ + **Returns the counts of all active ports for the requested timespan, grouped by speed** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-overview + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 186 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 12 hours and be less than or equal to 186 days. The default is 1 day. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "ports", "overview"], + "operation": "getOrganizationSwitchPortsOverview", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/overview" + + query_params = [ + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSwitchPortsOverview: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getOrganizationSwitchPortsProfiles(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the port profiles in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles + + - 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): Return the port profiles for the specified network(s) + - formattedStaticAssignments (boolean): Returns the list of static switchports that are assigned to the switchport profile + - searchQuery (string): Optional parameter to filter the result set by the search query + - radiusProfileEnabled (boolean): Optional parameter. If true, only return port profiles with a radius profile enabled + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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": ["switch", "configure", "ports", "profiles"], + "operation": "getOrganizationSwitchPortsProfiles", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles" + + query_params = [ + "networkIds", + "formattedStaticAssignments", + "searchQuery", + "radiusProfileEnabled", + "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"getOrganizationSwitchPortsProfiles: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchPortsProfile(self, organizationId: str, **kwargs): + """ + **Create a port profile in an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-ports-profile + + - organizationId (string): Organization ID + - name (string): The name of the profile. + - description (string): Text describing the profile. + - isOrganizationWide (boolean): The scope of the profile whether it is organization level or network level + - networks (object): The networks which are included/excluded in the profile + - networkId (string): The network identifier + - tags (array): Space-seperated list of tags + - defaultRadiusProfileName (string): When present, the default RADIUS attribute value for RADIUS-based port profile application + - authentication (object): Authentication settings for RADIUS-based port profile application. + - port (object): Configuration settings for port profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "createOrganizationSwitchPortsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles" + + body_params = [ + "name", + "description", + "isOrganizationWide", + "networks", + "networkId", + "tags", + "defaultRadiusProfileName", + "authentication", + "port", + ] + 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"createOrganizationSwitchPortsProfile: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def batchOrganizationSwitchPortsProfilesAssignmentsAssign(self, organizationId: str, items: list, **kwargs): + """ + **Batch assign or unassign port profiles to switch ports** + https://developer.cisco.com/meraki/api-v1/#!batch-organization-switch-ports-profiles-assignments-assign + + - organizationId (string): Organization ID + - items (array): Array of assignment operations (max 100) + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "assignments"], + "operation": "batchOrganizationSwitchPortsProfilesAssignmentsAssign", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/assignments/batchAssign" + + 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"batchOrganizationSwitchPortsProfilesAssignmentsAssign: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchPortsProfilesAssignmentsByPort( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the port profile assignments in an organization, grouped by port** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-assignments-by-port + + - 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 + - profileIds (array): Filter by specific profile IDs + - serials (array): Filter by switch serials + - networkIds (array): Filter by network IDs + - templateIds (array): Filter by template (node_profile) IDs + - types (array): Filter by port type: switch, template + - assignmentTypes (array): Filter by assignment type: direct, template, exception + - isActive (boolean): Filter by assignment status. true: only ports with active assignments, showing only active assignments per port. false: only ports with inactive assignments, showing only inactive assignments per port. Omit: all ports with all assignment layers. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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": ["switch", "configure", "ports", "profiles", "assignments", "byPort"], + "operation": "getOrganizationSwitchPortsProfilesAssignmentsByPort", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/assignments/byPort" + + query_params = [ + "profileIds", + "serials", + "networkIds", + "templateIds", + "types", + "assignmentTypes", + "isActive", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "profileIds", + "serials", + "networkIds", + "templateIds", + "types", + "assignmentTypes", + ] + 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"getOrganizationSwitchPortsProfilesAssignmentsByPort: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsProfilesAssignmentsBySwitch( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the port profile assignments in an organization, grouped by switch** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-assignments-by-switch + + - 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 + - profileIds (array): Filter by specific profile IDs + - serials (array): Filter by switch serials + - networkIds (array): Filter by network IDs + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 50. + - 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": ["switch", "configure", "ports", "profiles", "assignments", "bySwitch"], + "operation": "getOrganizationSwitchPortsProfilesAssignmentsBySwitch", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/assignments/bySwitch" + + query_params = [ + "profileIds", + "serials", + "networkIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "profileIds", + "serials", + "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"getOrganizationSwitchPortsProfilesAssignmentsBySwitch: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsProfilesAutomations(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **list the automation port profiles in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-automations + + - 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 + - ids (array): Optional parameter to filter the result set by the included set of automation IDs + - networkIds (array): Optional parameter to filter the result set by the associated networks. + - isOrganizationWide (string): Optional parameter to filter the result set by automations org-wide flag. + - searchQuery (string): Optional parameter to filter the result set by the search query + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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": ["switch", "configure", "ports", "profiles", "automations"], + "operation": "getOrganizationSwitchPortsProfilesAutomations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/automations" + + query_params = [ + "ids", + "networkIds", + "isOrganizationWide", + "searchQuery", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "ids", + "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"getOrganizationSwitchPortsProfilesAutomations: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchPortsProfilesAutomation(self, organizationId: str, **kwargs): + """ + **Create a port profile automation for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-ports-profiles-automation + + - organizationId (string): Organization ID + - name (string): Name of the port profile automation. + - description (string): Text describing the port profile automation. + - fallbackProfile (object): Configuration settings for port profile + - rules (array): Configuration settings for port profile automation rules + - assignedSwitchPorts (array): assigned switch ports + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "automations"], + "operation": "createOrganizationSwitchPortsProfilesAutomation", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/automations" + + body_params = [ + "name", + "description", + "fallbackProfile", + "rules", + "assignedSwitchPorts", + ] + 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"createOrganizationSwitchPortsProfilesAutomation: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationSwitchPortsProfilesAutomation(self, organizationId: str, id: str, **kwargs): + """ + **Update a port profile automation in an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-switch-ports-profiles-automation + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of the port profile automation. + - description (string): Text describing the port profile automation. + - fallbackProfile (object): Configuration settings for port profile + - rules (array): Configuration settings for port profile automation rules + - assignedSwitchPorts (array): assigned switch ports + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "automations"], + "operation": "updateOrganizationSwitchPortsProfilesAutomation", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/automations/{id}" + + body_params = [ + "name", + "description", + "fallbackProfile", + "rules", + "assignedSwitchPorts", + ] + 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"updateOrganizationSwitchPortsProfilesAutomation: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSwitchPortsProfilesAutomation(self, organizationId: str, id: str): + """ + **Delete an automation port profile from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-ports-profiles-automation + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "automations"], + "operation": "deleteOrganizationSwitchPortsProfilesAutomation", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/automations/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchPortsProfilesNetworksAssignments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Fetch all Network - Smart Port Profile associations for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-networks-assignments + + - 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 + - perPage (integer): Number of records per page + - page (integer): Page number + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "networks", "assignments"], + "operation": "getOrganizationSwitchPortsProfilesNetworksAssignments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments" + + query_params = [ + "perPage", + "page", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSwitchPortsProfilesNetworksAssignments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchPortsProfilesNetworksAssignment( + self, organizationId: str, type: str, profile: dict, network: dict, **kwargs + ): + """ + **Create Network and Smart Ports Profile association for a specific profile** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-ports-profiles-networks-assignment + + - organizationId (string): Organization ID + - type (string): Type of association + - profile (object): Smart Port Profile object + - network (object): Network object + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "networks", "assignments"], + "operation": "createOrganizationSwitchPortsProfilesNetworksAssignment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments" + + body_params = [ + "type", + "profile", + "network", + ] + 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"createOrganizationSwitchPortsProfilesNetworksAssignment: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def batchOrganizationSwitchPortsProfilesNetworksAssignmentsCreate(self, organizationId: str, items: list, **kwargs): + """ + **Batch Create Network and Smart Ports Profile associations for a specific profile** + https://developer.cisco.com/meraki/api-v1/#!batch-organization-switch-ports-profiles-networks-assignments-create + + - organizationId (string): Organization ID + - items (array): Array of network and profile associations + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "networks", "assignments"], + "operation": "batchOrganizationSwitchPortsProfilesNetworksAssignmentsCreate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments/batchCreate" + + 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"batchOrganizationSwitchPortsProfilesNetworksAssignmentsCreate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def bulkOrganizationSwitchPortsProfilesNetworksAssignmentsDelete(self, organizationId: str, items: list, **kwargs): + """ + **Bulk delete Network and Smart Port Profile associations** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-switch-ports-profiles-networks-assignments-delete + + - organizationId (string): Organization ID + - items (array): Array of assignments to delete + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "networks", "assignments"], + "operation": "bulkOrganizationSwitchPortsProfilesNetworksAssignmentsDelete", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments/bulkDelete" + + 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"bulkOrganizationSwitchPortsProfilesNetworksAssignmentsDelete: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def deleteOrganizationSwitchPortsProfilesNetworksAssignment(self, organizationId: str, assignmentId: str): + """ + **Delete Network and Smart Port profile association for a specific profile** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-ports-profiles-networks-assignment + + - organizationId (string): Organization ID + - assignmentId (string): Assignment ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "networks", "assignments"], + "operation": "deleteOrganizationSwitchPortsProfilesNetworksAssignment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + assignmentId = urllib.parse.quote(str(assignmentId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments/{assignmentId}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchPortsProfilesOverviewByProfile( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the port profiles in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-overview-by-profile + + - 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): Return the port profiles for the specified network(s) + - formattedStaticAssignments (boolean): Returns the list of static switchports that are assgined to the switchport profile + - searchQuery (string): Optional parameter to filter the result set by the search query + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. + - 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": ["switch", "configure", "ports", "profiles", "overview", "byProfile"], + "operation": "getOrganizationSwitchPortsProfilesOverviewByProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/overview/byProfile" + + query_params = [ + "networkIds", + "formattedStaticAssignments", + "searchQuery", + "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"getOrganizationSwitchPortsProfilesOverviewByProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsProfilesRadiusAssignments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the port profile RADIUS assignments** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-radius-assignments + + - 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): If present, the networks to limit the assignments to + - portProfileIds (array): If present, the port profiles to limit the assignments to + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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": ["switch", "configure", "ports", "profiles", "radius", "assignments"], + "operation": "getOrganizationSwitchPortsProfilesRadiusAssignments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/radius/assignments" + + query_params = [ + "networkIds", + "portProfileIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "portProfileIds", + ] + 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"getOrganizationSwitchPortsProfilesRadiusAssignments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchPortsProfilesRadiusAssignment(self, organizationId: str, network: dict, **kwargs): + """ + **Create a port profile RADIUS assignment** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-ports-profiles-radius-assignment + + - organizationId (string): Organization ID + - network (object): The network where the RADIUS name is assigned + - portProfile (object): The assigned port profile + - radius (object): The RADIUS options for this assignment + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "radius", "assignments"], + "operation": "createOrganizationSwitchPortsProfilesRadiusAssignment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/radius/assignments" + + body_params = [ + "network", + "portProfile", + "radius", + ] + 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"createOrganizationSwitchPortsProfilesRadiusAssignment: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchPortsProfilesRadiusAssignment(self, organizationId: str, id: str): + """ + **Return a port profile RADIUS assignment** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-radius-assignment + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "radius", "assignments"], + "operation": "getOrganizationSwitchPortsProfilesRadiusAssignment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/radius/assignments/{id}" + + return self._session.get(metadata, resource) + + def updateOrganizationSwitchPortsProfilesRadiusAssignment(self, organizationId: str, id: str, **kwargs): + """ + **Update a port profile RADIUS assignment** + https://developer.cisco.com/meraki/api-v1/#!update-organization-switch-ports-profiles-radius-assignment + + - organizationId (string): Organization ID + - id (string): ID + - network (object): The network where the RADIUS name is assigned + - portProfile (object): The assigned port profile + - radius (object): The RADIUS options for this assignment + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "radius", "assignments"], + "operation": "updateOrganizationSwitchPortsProfilesRadiusAssignment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/radius/assignments/{id}" + + body_params = [ + "network", + "portProfile", + "radius", + ] + 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"updateOrganizationSwitchPortsProfilesRadiusAssignment: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSwitchPortsProfilesRadiusAssignment(self, organizationId: str, id: str): + """ + **Deletes a port profile RADIUS assignment** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-ports-profiles-radius-assignment + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "radius", "assignments"], + "operation": "deleteOrganizationSwitchPortsProfilesRadiusAssignment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/radius/assignments/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchPortsProfile(self, organizationId: str, id: str): + """ + **Get detailed information about a port profile** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profile + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "getOrganizationSwitchPortsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/{id}" + + return self._session.get(metadata, resource) + + def updateOrganizationSwitchPortsProfile(self, organizationId: str, id: str, **kwargs): + """ + **Update a port profile in an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-switch-ports-profile + + - organizationId (string): Organization ID + - id (string): ID + - name (string): The name of the profile. + - description (string): Text describing the profile. + - isOrganizationWide (boolean): The scope of the profile whether it is organization level or network level + - networks (object): The networks which are included/excluded in the profile + - networkId (string): The network identifier + - tags (array): Space-seperated list of tags + - defaultRadiusProfileName (string): When present, the default RADIUS attribute value for RADIUS-based port profile application + - authentication (object): Authentication settings for RADIUS-based port profile application. + - port (object): Configuration settings for port profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "updateOrganizationSwitchPortsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/{id}" + + body_params = [ + "name", + "description", + "isOrganizationWide", + "networks", + "networkId", + "tags", + "defaultRadiusProfileName", + "authentication", + "port", + ] + 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"updateOrganizationSwitchPortsProfile: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSwitchPortsProfile(self, organizationId: str, id: str): + """ + **Delete a port profile from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-ports-profile + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "deleteOrganizationSwitchPortsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchPortsStatusesBySwitch(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the switchports in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-statuses-by-switch + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - 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. + - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. + - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. + - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. + - name (string): Optional parameter to filter items to switches with names that contain the search term or are an exact match. + - networkIds (array): Optional parameter to filter items to switches in one of the provided networks. + - portProfileIds (array): Optional parameter to filter items to switches that contain switchports belonging to one of the specified port profiles. + - serial (string): Optional parameter to filter items to switches with serial number that contains the search term or are an exact match. + - serials (array): Optional parameter to filter items to switches that have one of the provided serials. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "ports", "statuses", "bySwitch"], + "operation": "getOrganizationSwitchPortsStatusesBySwitch", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/statuses/bySwitch" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "configurationUpdatedAfter", + "mac", + "macs", + "name", + "networkIds", + "portProfileIds", + "serial", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "macs", + "networkIds", + "portProfileIds", + "serials", + ] + 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"getOrganizationSwitchPortsStatusesBySwitch: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsStatusesPacketsByDeviceByPort(self, organizationId: str, networkIds: list, **kwargs): + """ + **Switch port packets by device and port.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-statuses-packets-by-device-by-port + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 1200, 14400, 86400. The default is 14400. Interval is calculated if time params are provided. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "ports", "statuses", "packets", "byDevice", "byPort"], + "operation": "getOrganizationSwitchPortsStatusesPacketsByDeviceByPort", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/statuses/packets/byDevice/byPort" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + "interval", + ] + 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"getOrganizationSwitchPortsStatusesPacketsByDeviceByPort: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationSwitchPortsTopologyDiscoveryByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List most recently seen LLDP/CDP discovery and topology information per switch port in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-topology-discovery-by-device + + - 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 + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - 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. + - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. + - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. + - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. + - name (string): Optional parameter to filter items to switches with names that contain the search term or are an exact match. + - networkIds (array): Optional parameter to filter items to switches in one of the provided networks. + - portProfileIds (array): Optional parameter to filter items to switches that contain switchports belonging to one of the specified port profiles. + - serial (string): Optional parameter to filter items to switches with serial number that contains the search term or are an exact match. + - serials (array): Optional parameter to filter items to switches that have one of the provided serials. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "ports", "topology", "discovery", "byDevice"], + "operation": "getOrganizationSwitchPortsTopologyDiscoveryByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/topology/discovery/byDevice" + + query_params = [ + "t0", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + "configurationUpdatedAfter", + "mac", + "macs", + "name", + "networkIds", + "portProfileIds", + "serial", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "macs", + "networkIds", + "portProfileIds", + "serials", + ] + 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"getOrganizationSwitchPortsTopologyDiscoveryByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsTransceiversReadingsHistoryBySwitch( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Return time-series digital optical monitoring (DOM) readings for ports on each DOM-enabled switch in an organization, in addition to thresholds for each relevant Small Form Factor Pluggable (SFP) module.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-transceivers-readings-history-by-switch + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 1200. Interval is calculated if time params are provided. + - networkIds (array): Networks for which information should be gathered. + - serials (array): Optional parameter to filter usage by switch. + - portIds (array): Optional parameter to filter usage by port ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "ports", "transceivers", "readings", "history", "bySwitch"], + "operation": "getOrganizationSwitchPortsTransceiversReadingsHistoryBySwitch", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/transceivers/readings/history/bySwitch" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "serials", + "portIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "portIds", + ] + 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"getOrganizationSwitchPortsTransceiversReadingsHistoryBySwitch: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsUsageHistoryByDeviceByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the historical usage and traffic data of switchports in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-usage-history-by-device-by-interval + + - 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 + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 1200. Interval is calculated if time params are provided. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 10. + - 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. + - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. + - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. + - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. + - name (string): Optional parameter to filter items to switches with names that contain the search term or are an exact match. + - networkIds (array): Optional parameter to filter items to switches in one of the provided networks. + - portProfileIds (array): Optional parameter to filter items to switches that contain switchports belonging to one of the specified port profiles. + - serial (string): Optional parameter to filter items to switches with serial number that contains the search term or are an exact match. + - serials (array): Optional parameter to filter items to switches that have one of the provided serials. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "ports", "usage", "history", "byDevice", "byInterval"], + "operation": "getOrganizationSwitchPortsUsageHistoryByDeviceByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/usage/history/byDevice/byInterval" + + query_params = [ + "t0", + "t1", + "timespan", + "interval", + "perPage", + "startingAfter", + "endingBefore", + "configurationUpdatedAfter", + "mac", + "macs", + "name", + "networkIds", + "portProfileIds", + "serial", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "macs", + "networkIds", + "portProfileIds", + "serials", + ] + 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"getOrganizationSwitchPortsUsageHistoryByDeviceByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpAutonomousSystems(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the autonomous systems configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-autonomous-systems + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - numbers (array): Optional parameter to filter autonomous systems by number. This filter uses multiple exact matches. + - autonomousSystemIds (array): Optional parameter to filter autonomous systems by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "autonomousSystems"], + "operation": "getOrganizationSwitchRoutingBgpAutonomousSystems", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/autonomousSystems" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "numbers", + "autonomousSystemIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "numbers", + "autonomousSystemIds", + ] + 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"getOrganizationSwitchRoutingBgpAutonomousSystems: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpAutonomousSystem(self, organizationId: str, number: int, **kwargs): + """ + **Create an autonomous system** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-autonomous-system + + - organizationId (string): Organization ID + - number (integer): The autonomous system number (CLI: 'router bgp ') + - description (string): A description for the autonomous system + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "autonomousSystems"], + "operation": "createOrganizationSwitchRoutingBgpAutonomousSystem", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/autonomousSystems" + + body_params = [ + "number", + "description", + ] + 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"createOrganizationSwitchRoutingBgpAutonomousSystem: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchRoutingBgpAutonomousSystemsOverviewByAutonomousSystem( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the overview of the autonomous systems configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-autonomous-systems-overview-by-autonomous-system + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - numbers (array): Optional parameter to filter autonomous systems by number. This filter uses multiple exact matches. + - autonomousSystemIds (array): Optional parameter to filter autonomous systems by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "autonomousSystems", "overview", "byAutonomousSystem"], + "operation": "getOrganizationSwitchRoutingBgpAutonomousSystemsOverviewByAutonomousSystem", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/autonomousSystems/overview/byAutonomousSystem" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "numbers", + "autonomousSystemIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "numbers", + "autonomousSystemIds", + ] + 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"getOrganizationSwitchRoutingBgpAutonomousSystemsOverviewByAutonomousSystem: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def updateOrganizationSwitchRoutingBgpAutonomousSystem(self, organizationId: str, autonomousSystemId: str, **kwargs): + """ + **Update an autonomous system** + https://developer.cisco.com/meraki/api-v1/#!update-organization-switch-routing-bgp-autonomous-system + + - organizationId (string): Organization ID + - autonomousSystemId (string): Autonomous system ID + - number (integer): The autonomous system number (CLI: 'router bgp ') + - description (string): A description for the autonomous system + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "autonomousSystems"], + "operation": "updateOrganizationSwitchRoutingBgpAutonomousSystem", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + autonomousSystemId = urllib.parse.quote(str(autonomousSystemId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/autonomousSystems/{autonomousSystemId}" + + body_params = [ + "number", + "description", + ] + 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"updateOrganizationSwitchRoutingBgpAutonomousSystem: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSwitchRoutingBgpAutonomousSystem(self, organizationId: str, autonomousSystemId: str): + """ + **Delete an autonomous system from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-routing-bgp-autonomous-system + + - organizationId (string): Organization ID + - autonomousSystemId (string): Autonomous system ID + """ + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "autonomousSystems"], + "operation": "deleteOrganizationSwitchRoutingBgpAutonomousSystem", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + autonomousSystemId = urllib.parse.quote(str(autonomousSystemId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/autonomousSystems/{autonomousSystemId}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchRoutingBgpFiltersFilterLists( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the filter lists configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-filters-filter-lists + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter 'filter lists' by network ID. This filter uses multiple exact matches. + - listIds (array): Optional parameter to filter 'filter lists' by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "filterLists"], + "operation": "getOrganizationSwitchRoutingBgpFiltersFilterLists", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/filterLists" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "listIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "listIds", + ] + 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"getOrganizationSwitchRoutingBgpFiltersFilterLists: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpFiltersFilterListsDeploy( + self, organizationId: str, filterList: dict, network: dict, rules: list, **kwargs + ): + """ + **Create or update a filter list, in addition to its associated rules** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-filters-filter-lists-deploy + + - organizationId (string): Organization ID + - filterList (object): Information regarding the filter list + - network (object): Information regarding the network the filter list belongs to + - rules (array): Information regarding the filter list rules + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "filterLists", "deploy"], + "operation": "createOrganizationSwitchRoutingBgpFiltersFilterListsDeploy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/filterLists/deploy" + + body_params = [ + "filterList", + "network", + "rules", + ] + 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"createOrganizationSwitchRoutingBgpFiltersFilterListsDeploy: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchRoutingBgpFiltersFilterListsOverviewByFilterList( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the overview of the filter lists configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-filters-filter-lists-overview-by-filter-list + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter 'filter list' overviews by network ID. This filter uses multiple exact matches. + - listIds (array): Optional parameter to filter 'filter list' overviews by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "routing", "bgp", "filters", "filterLists", "overview", "byFilterList"], + "operation": "getOrganizationSwitchRoutingBgpFiltersFilterListsOverviewByFilterList", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/filterLists/overview/byFilterList" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "listIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "listIds", + ] + 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"getOrganizationSwitchRoutingBgpFiltersFilterListsOverviewByFilterList: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpFiltersFilterListsRules( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the filter list rules configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-filters-filter-lists-rules + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter 'filter list' rules by network ID. This filter uses multiple exact matches. + - ruleIds (array): Optional parameter to filter 'filter list' rules by ID. This filter uses multiple exact matches. + - filterListIds (array): Optional parameter to filter 'filter lists' by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "filterLists", "rules"], + "operation": "getOrganizationSwitchRoutingBgpFiltersFilterListsRules", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/filterLists/rules" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "ruleIds", + "filterListIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "ruleIds", + "filterListIds", + ] + 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"getOrganizationSwitchRoutingBgpFiltersFilterListsRules: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def deleteOrganizationSwitchRoutingBgpFiltersFilterList(self, organizationId: str, listId: str): + """ + **Delete a filter list** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-routing-bgp-filters-filter-list + + - organizationId (string): Organization ID + - listId (string): List ID + """ + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "filterLists"], + "operation": "deleteOrganizationSwitchRoutingBgpFiltersFilterList", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + listId = urllib.parse.quote(str(listId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/filterLists/{listId}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchRoutingBgpFiltersPrefixLists( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the prefix lists configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-filters-prefix-lists + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter prefix lists by network ID. This filter uses multiple exact matches. + - listIds (array): Optional parameter to filter prefix lists by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "prefixLists"], + "operation": "getOrganizationSwitchRoutingBgpFiltersPrefixLists", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/prefixLists" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "listIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "listIds", + ] + 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"getOrganizationSwitchRoutingBgpFiltersPrefixLists: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpFiltersPrefixListsDeploy( + self, organizationId: str, network: dict, prefixList: dict, rules: list, **kwargs + ): + """ + **Create or update a prefix list, in addition to its associated rules** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-filters-prefix-lists-deploy + + - organizationId (string): Organization ID + - network (object): Information regarding the network the prefix list belongs to + - prefixList (object): Information regarding the prefix list + - rules (array): Information regarding the prefix list rules + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "prefixLists", "deploy"], + "operation": "createOrganizationSwitchRoutingBgpFiltersPrefixListsDeploy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/prefixLists/deploy" + + body_params = [ + "network", + "prefixList", + "rules", + ] + 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"createOrganizationSwitchRoutingBgpFiltersPrefixListsDeploy: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchRoutingBgpFiltersPrefixListsOverviewByPrefixList( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the overview of the prefix lists configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-filters-prefix-lists-overview-by-prefix-list + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter prefix list overviews by network ID. This filter uses multiple exact matches. + - listIds (array): Optional parameter to filter prefix list overviews by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "routing", "bgp", "filters", "prefixLists", "overview", "byPrefixList"], + "operation": "getOrganizationSwitchRoutingBgpFiltersPrefixListsOverviewByPrefixList", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/prefixLists/overview/byPrefixList" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "listIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "listIds", + ] + 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"getOrganizationSwitchRoutingBgpFiltersPrefixListsOverviewByPrefixList: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpFiltersPrefixListsRules( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the prefix list rules configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-filters-prefix-lists-rules + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter prefix list rules by network ID. This filter uses multiple exact matches. + - prefixListIds (array): Optional parameter to filter prefix list rules by prefix list ID. This filter uses multiple exact matches. + - ruleIds (array): Optional parameter to filter prefix list rules by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "prefixLists", "rules"], + "operation": "getOrganizationSwitchRoutingBgpFiltersPrefixListsRules", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/prefixLists/rules" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "prefixListIds", + "ruleIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "prefixListIds", + "ruleIds", + ] + 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"getOrganizationSwitchRoutingBgpFiltersPrefixListsRules: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def deleteOrganizationSwitchRoutingBgpFiltersPrefixList(self, organizationId: str, listId: str): + """ + **Delete a prefix list** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-routing-bgp-filters-prefix-list + + - organizationId (string): Organization ID + - listId (string): List ID + """ + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "prefixLists"], + "operation": "deleteOrganizationSwitchRoutingBgpFiltersPrefixList", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + listId = urllib.parse.quote(str(listId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/prefixLists/{listId}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchRoutingBgpPeersGroups(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the BGP peer groups configured in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-groups + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter peer groups by network ID. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter peer groups by router ID. This filter uses multiple exact matches. + - profileIds (array): Optional parameter to filter peer groups by profile ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter peer groups by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "groups"], + "operation": "getOrganizationSwitchRoutingBgpPeersGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/groups" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "routerIds", + "profileIds", + "peerGroupIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "routerIds", + "profileIds", + "peerGroupIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersGroups: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpPeersGroupsAddressFamiliesDeployments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List all BGP deployment information for multiple peer groups or address families configured in the given organization, including profile information, peer group address family information, neighbors, and listen ranges** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-groups-address-families-deployments + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter peer group address family deployments by network ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter peer group address family deployments by peer group + - addressFamilyIds (array): Optional parameter to filter peer group address family deployments by address family + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "groups", "addressFamilies", "deployments"], + "operation": "getOrganizationSwitchRoutingBgpPeersGroupsAddressFamiliesDeployments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/groups/addressFamilies/deployments" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "peerGroupIds", + "addressFamilyIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "peerGroupIds", + "addressFamilyIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersGroupsAddressFamiliesDeployments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpPeersGroupsDeploy( + self, + organizationId: str, + addressFamily: dict, + network: dict, + peerGroup: dict, + peerGroupAddressFamilyBindingProfile: dict, + peerGroupProfile: dict, + policies: list, + router: dict, + **kwargs, + ): + """ + **Create or update a peer group, in addition to an associated peer group profile, peer group address family binding, peer group address family binding profile and routing policies associated with the peer group** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-peers-groups-deploy + + - organizationId (string): Organization ID + - addressFamily (object): Information regarding the address family the peer group address family binding belongs to + - network (object): Information regarding the network the peer group profile belongs to + - peerGroup (object): Information regarding the peer group + - peerGroupAddressFamilyBindingProfile (object): Information regarding the peer group address family binding profile + - peerGroupProfile (object): Information regarding the peer group profile + - policies (array): Information regarding the routing policies + - router (object): Information regarding the router this peer group belongs to + - peerGroupAddressFamilyBinding (object): Information regarding the peer group address family binding. Only required when updating. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "groups", "deploy"], + "operation": "createOrganizationSwitchRoutingBgpPeersGroupsDeploy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/groups/deploy" + + body_params = [ + "addressFamily", + "network", + "peerGroup", + "peerGroupAddressFamilyBinding", + "peerGroupAddressFamilyBindingProfile", + "peerGroupProfile", + "policies", + "router", + ] + 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"createOrganizationSwitchRoutingBgpPeersGroupsDeploy: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchRoutingBgpPeersGroupsDeployments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List all BGP deployment information for peer groups configured in the given organization, including peer group address family information, as well as routing policies** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-groups-deployments + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 20. + - 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. + - networkIds (array): Optional parameter to filter peer group deployments by network ID. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter peer group deployments by router ID. This filter uses multiple exact matches. + - profileIds (array): Optional parameter to filter peer group deployments by profile ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter peer group deployments by peer group ID. This filter uses multiple exact matches. + - afi (string): Optional parameter to filter deployments on each peer group by address family identifier (AFI). + - safi (string): Optional parameter to filter deployments on each peer group by subsequent address family identifier (SAFI). + """ + + kwargs.update(locals()) + + if "afi" in kwargs: + options = ["ipv4"] + assert kwargs["afi"] in options, f'''"afi" cannot be "{kwargs["afi"]}", & must be set to one of: {options}''' + if "safi" in kwargs: + options = ["unicast"] + assert kwargs["safi"] in options, f'''"safi" cannot be "{kwargs["safi"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "groups", "deployments"], + "operation": "getOrganizationSwitchRoutingBgpPeersGroupsDeployments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/groups/deployments" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "routerIds", + "profileIds", + "peerGroupIds", + "afi", + "safi", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "routerIds", + "profileIds", + "peerGroupIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersGroupsDeployments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpPeersGroupsOverviewByPeerGroup( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the overview of the BGP peer groups configured in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-groups-overview-by-peer-group + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter peer group overviews by network ID. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter peer group overviews by router ID. This filter uses multiple exact matches. + - profileIds (array): Optional parameter to filter peer group overviews by profile ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter peer group overviews by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "routing", "bgp", "peers", "groups", "overview", "byPeerGroup"], + "operation": "getOrganizationSwitchRoutingBgpPeersGroupsOverviewByPeerGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/groups/overview/byPeerGroup" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "routerIds", + "profileIds", + "peerGroupIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "routerIds", + "profileIds", + "peerGroupIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersGroupsOverviewByPeerGroup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpPeersListenRanges(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the listen ranges configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-listen-ranges + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter listen ranges by network ID. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter listen ranges by router ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter listen ranges by peer group ID. This filter uses multiple exact matches. + - listenRangeIds (array): Optional parameter to filter listen ranges by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "listenRanges"], + "operation": "getOrganizationSwitchRoutingBgpPeersListenRanges", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/listenRanges" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "routerIds", + "peerGroupIds", + "listenRangeIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "routerIds", + "peerGroupIds", + "listenRangeIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersListenRanges: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpPeersNeighbors(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the neighbors configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-neighbors + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter neighbors by network ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter neighbors by peer group ID. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter neighbors by router ID. This filter uses multiple exact matches. + - neighborIds (array): Optional parameter to filter neighbors by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "neighbors"], + "operation": "getOrganizationSwitchRoutingBgpPeersNeighbors", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/neighbors" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "peerGroupIds", + "routerIds", + "neighborIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "peerGroupIds", + "routerIds", + "neighborIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersNeighbors: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpPeersNeighborsDeploy( + self, + organizationId: str, + addressFamily: dict, + neighbor: dict, + neighborAddressFamilyBinding: dict, + peerGroup: dict, + policies: list, + router: dict, + **kwargs, + ): + """ + **Create or update a neighor, in addition to an associated neighbor address family binding and routing policies associated with the neighbor** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-peers-neighbors-deploy + + - organizationId (string): Organization ID + - addressFamily (object): Information regarding the address family this binding is bound to + - neighbor (object): Information regarding the BPG neighbor + - neighborAddressFamilyBinding (object): Information regarding the neighbor address family binding + - peerGroup (object): Information regarding the peer group this neighbor belongs to + - policies (array): Information regarding the routing policies related to the neighbor + - router (object): Information regarding the router this neighbor peers with + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "neighbors", "deploy"], + "operation": "createOrganizationSwitchRoutingBgpPeersNeighborsDeploy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/neighbors/deploy" + + body_params = [ + "addressFamily", + "neighbor", + "neighborAddressFamilyBinding", + "peerGroup", + "policies", + "router", + ] + 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"createOrganizationSwitchRoutingBgpPeersNeighborsDeploy: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchRoutingBgpPeersNeighborsDeployments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List all BGP deployment information for neighbors configured in the given organization, including address family information, as well as routing policies** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-neighbors-deployments + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 20. + - 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. + - networkIds (array): Optional parameter to filter neighbor deployments by network ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter neighbor deployments by peer group ID. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter neighbor deployments by router ID. This filter uses multiple exact matches. + - neighborIds (array): Optional parameter to filter neighbor deployments by neighbor ID. This filter uses multiple exact matches. + - afi (string): Optional parameter to filter deployments on each neighbor by address family identifier (AFI). + - safi (string): Optional parameter to filter deployments on each neighbor by subsequent address family identifier (SAFI). + """ + + kwargs.update(locals()) + + if "afi" in kwargs: + options = ["ipv4"] + assert kwargs["afi"] in options, f'''"afi" cannot be "{kwargs["afi"]}", & must be set to one of: {options}''' + if "safi" in kwargs: + options = ["unicast"] + assert kwargs["safi"] in options, f'''"safi" cannot be "{kwargs["safi"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "neighbors", "deployments"], + "operation": "getOrganizationSwitchRoutingBgpPeersNeighborsDeployments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/neighbors/deployments" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "peerGroupIds", + "routerIds", + "neighborIds", + "afi", + "safi", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "peerGroupIds", + "routerIds", + "neighborIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersNeighborsDeployments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpRouters(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the routers configured in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-routers + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter routers by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter routers by serial. This filter uses multiple exact matches. + - switchNames (array): Optional parameter to filter routers by switch name. The filter uses multiple exact matches. + - asNumbers (array): Optional parameter to filter routers by autonomous system number. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter routers by ID. This filter uses multiple exact matches. + - switchStackIds (array): Optional parameter to filter routers by switch stack id. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "routers"], + "operation": "getOrganizationSwitchRoutingBgpRouters", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + "switchNames", + "asNumbers", + "routerIds", + "switchStackIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "switchNames", + "asNumbers", + "routerIds", + "switchStackIds", + ] + 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"getOrganizationSwitchRoutingBgpRouters: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpRoutersDeploy( + self, + organizationId: str, + addressFamily: dict, + addressFamilyPrefixes: list, + addressFamilyProfile: dict, + autonomousSystem: dict, + router: dict, + switch: dict, + **kwargs, + ): + """ + **Create a BGP router, in addition to an associated address family, address family prefixes, and address family profile** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-routers-deploy + + - organizationId (string): Organization ID + - addressFamily (object): Information regarding the address family + - addressFamilyPrefixes (array): The list of network prefixes to which the address family applies + - addressFamilyProfile (object): Information regarding the profile applied to the address family + - autonomousSystem (object): Information regarding the router's autonomous system + - router (object): Information regarding the BPG router + - switch (object): The router's switch node. When the router is part of a switch stack, this is the switch stack's active node + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "routers", "deploy"], + "operation": "createOrganizationSwitchRoutingBgpRoutersDeploy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers/deploy" + + body_params = [ + "addressFamily", + "addressFamilyPrefixes", + "addressFamilyProfile", + "autonomousSystem", + "router", + "switch", + ] + 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"createOrganizationSwitchRoutingBgpRoutersDeploy: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchRoutingBgpRoutersDeployments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List all BGP deployment information for routers configured in a given organization, including all address families** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-routers-deployments + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 20. + - 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. + - networkIds (array): Optional parameter to filter router deployments by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter router deployments by serial. This filter uses multiple exact matches. + - switchNames (array): Optional parameter to filter router deployments by switch name. The filter uses multiple exact matches. + - asNumbers (array): Optional parameter to filter router deployments by autonomous system number. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter router deployments by router ID. This filter uses multiple exact matches. + - switchStackIds (array): Optional parameter to filter router deployments by switch stack id. This filter uses multiple exact matches. + - afi (string): Optional parameter to filter deployments on each router by address family identifier (AFI). + - safi (string): Optional parameter to filter deployments on each router by subsequent address family identifier (SAFI). + """ + + kwargs.update(locals()) + + if "afi" in kwargs: + options = ["ipv4"] + assert kwargs["afi"] in options, f'''"afi" cannot be "{kwargs["afi"]}", & must be set to one of: {options}''' + if "safi" in kwargs: + options = ["unicast"] + assert kwargs["safi"] in options, f'''"safi" cannot be "{kwargs["safi"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "routers", "deployments"], + "operation": "getOrganizationSwitchRoutingBgpRoutersDeployments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers/deployments" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + "switchNames", + "asNumbers", + "routerIds", + "switchStackIds", + "afi", + "safi", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "switchNames", + "asNumbers", + "routerIds", + "switchStackIds", + ] + 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"getOrganizationSwitchRoutingBgpRoutersDeployments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpRoutersOverviewByRouter( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the overview of the routers configured in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-routers-overview-by-router + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter router overviews by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter router overviews by serial. This filter uses multiple exact matches. + - switchNames (array): Optional parameter to filter router overviews by switch name. This filter uses multiple exact matches. + - asNumbers (array): Optional parameter to filter router overviews by autonomous system number. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter router overviews by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "routing", "bgp", "routers", "overview", "byRouter"], + "operation": "getOrganizationSwitchRoutingBgpRoutersOverviewByRouter", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers/overview/byRouter" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + "switchNames", + "asNumbers", + "routerIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "switchNames", + "asNumbers", + "routerIds", + ] + 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"getOrganizationSwitchRoutingBgpRoutersOverviewByRouter: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpRoutersPeersDeploy( + self, organizationId: str, addressFamily: dict, peerGroups: list, router: dict, **kwargs + ): + """ + **Create and update listen ranges, update peers' enabled flag, and delete peer groups for a BGP router** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-routers-peers-deploy + + - organizationId (string): Organization ID + - addressFamily (object): Information regarding the address family + - peerGroups (array): Information regarding the peer group peers for a router's peer group + - router (object): Information regarding the BPG router + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "routers", "peers", "deploy"], + "operation": "createOrganizationSwitchRoutingBgpRoutersPeersDeploy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers/peers/deploy" + + body_params = [ + "addressFamily", + "peerGroups", + "router", + ] + 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"createOrganizationSwitchRoutingBgpRoutersPeersDeploy: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def deleteOrganizationSwitchRoutingBgpRouter(self, organizationId: str, routerId: str): + """ + **Delete a router from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-routing-bgp-router + + - organizationId (string): Organization ID + - routerId (string): Router ID + """ + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "routers"], + "operation": "deleteOrganizationSwitchRoutingBgpRouter", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + routerId = urllib.parse.quote(str(routerId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers/{routerId}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchRoutingStaticRoutes(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List layer 3 static routes for switches within an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-static-routes + + - 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 the result set by the included set of network IDs + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 20. + - 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": ["switch", "monitor", "routing", "staticRoutes"], + "operation": "getOrganizationSwitchRoutingStaticRoutes", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/staticRoutes" + + 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"getOrganizationSwitchRoutingStaticRoutes: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchSpanningTree(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Returns Spanning Tree configuration settings** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-spanning-tree + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter by network ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "spanningTree"], + "operation": "getOrganizationSwitchSpanningTree", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/spanningTree" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationSwitchSpanningTree: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchStacksPortsMirrorsByStack(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the port mirror configurations in an organization by switch** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-stacks-ports-mirrors-by-stack + + - 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 + - ids (array): Return the port mirror configuration for the specified stack(s) + - networkIds (array): Return the port mirror configurations for the specified network(s) + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 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": ["switch", "configure", "stacks", "ports", "mirrors", "byStack"], + "operation": "getOrganizationSwitchStacksPortsMirrorsByStack", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/stacks/ports/mirrors/byStack" + + query_params = [ + "ids", + "networkIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "ids", + "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"getOrganizationSwitchStacksPortsMirrorsByStack: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) diff --git a/meraki/aio/api/users.py b/meraki/aio/api/users.py new file mode 100644 index 0000000..c65a5ec --- /dev/null +++ b/meraki/aio/api/users.py @@ -0,0 +1,838 @@ +import urllib + + +class AsyncUsers: + def __init__(self, session): + super().__init__() + self._session = session + + def getOrganizationIamUsersAuthorizations( + self, organizationId: str, userIds: list, total_pages=1, direction="next", **kwargs + ): + """ + **List specific authorizations for the list of Meraki end users.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-authorizations + + - organizationId (string): Organization ID + - userIds (array): Meraki end user IDs + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 10. + - 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": ["users", "configure", "iam", "authorizations"], + "operation": "getOrganizationIamUsersAuthorizations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "userIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "userIds", + ] + 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"getOrganizationIamUsersAuthorizations: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationIamUsersAuthorization(self, organizationId: str, authZone: dict, **kwargs): + """ + **Authorize a Meraki end user for an auth zone.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-authorization + + - organizationId (string): Organization ID + - authZone (object): Auth zone + - email (string): Meraki end user's email + - idpUserId (string): Meraki end user's ID + - startsAt (string): Start time of the desired access for the authorization. Defaults to now. + - expiresAt (string): Expiration time of the desired access for the authorization + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "authorizations"], + "operation": "createOrganizationIamUsersAuthorization", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations" + + body_params = [ + "email", + "idpUserId", + "authZone", + "startsAt", + "expiresAt", + ] + 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"createOrganizationIamUsersAuthorization: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationIamUsersAuthorizations(self, organizationId: str, **kwargs): + """ + **Update a Meraki end user's access to an auth zone.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-iam-users-authorizations + + - organizationId (string): Organization ID + - authorizationId (string): Authorization ID + - email (string): Meraki end user's email + - authZone (object): Auth zone + - startsAt (string): Start time of the desired access for the authorization + - expiresAt (string): Expiration time of the desired access for the authorization + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "authorizations"], + "operation": "updateOrganizationIamUsersAuthorizations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations" + + body_params = [ + "authorizationId", + "email", + "authZone", + "startsAt", + "expiresAt", + ] + 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"updateOrganizationIamUsersAuthorizations: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def revokeOrganizationIamUsersAuthorizationsAuthorization(self, organizationId: str, authZone: dict, **kwargs): + """ + **Revoke a Meraki end user's access to an auth zone.** + https://developer.cisco.com/meraki/api-v1/#!revoke-organization-iam-users-authorizations-authorization + + - organizationId (string): Organization ID + - authZone (object): Auth zone + - email (string): Meraki end user's email + - authorizationId (string): Authorization ID + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "authorizations", "authorization"], + "operation": "revokeOrganizationIamUsersAuthorizationsAuthorization", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations/authorization/revoke" + + body_params = [ + "email", + "authorizationId", + "authZone", + ] + 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"revokeOrganizationIamUsersAuthorizationsAuthorization: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationIamUsersAuthorizationsZones(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List all of the available auth zones for an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-authorizations-zones + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 10 - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "authorizations", "zones"], + "operation": "getOrganizationIamUsersAuthorizationsZones", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations/zones" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationIamUsersAuthorizationsZones: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def deleteOrganizationIamUsersAuthorization(self, organizationId: str, authorizationId: str): + """ + **Delete an authorization for a Meraki end user.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-iam-users-authorization + + - organizationId (string): Organization ID + - authorizationId (string): Authorization ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "authorizations"], + "operation": "deleteOrganizationIamUsersAuthorization", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + authorizationId = urllib.parse.quote(str(authorizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations/{authorizationId}" + + return self._session.delete(metadata, resource) + + def createOrganizationIamUsersIdp(self, organizationId: str, name: str, type: str, idpConfig: dict, **kwargs): + """ + **Create an identity provider for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idp + + - organizationId (string): Organization ID + - name (string): Name of the identity provider + - type (string): Type of the identity provider + - idpConfig (object): Identity provider configuration. Required for external identity providers. + - description (string): Optional. Description of the identity provider + - syncType (string): The synchronization method for the identity provider. Set to 'proactive' to sync all users and groups from your identity provider. + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = ["Azure AD"] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + if "syncType" in kwargs and kwargs["syncType"] is not None: + options = ["proactive"] + assert kwargs["syncType"] in options, ( + f'''"syncType" cannot be "{kwargs["syncType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["users", "configure", "iam", "idps"], + "operation": "createOrganizationIamUsersIdp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps" + + body_params = [ + "name", + "type", + "description", + "idpConfig", + "syncType", + ] + 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"createOrganizationIamUsersIdp: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def searchOrganizationIdpGroups(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Search all IdP groups for an organization** + https://developer.cisco.com/meraki/api-v1/#!search-organization-idp-groups + + - 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 + - idpIds (array): Filter IdP groups by IdP ID(s). Multiple IdP IDs can be passed as a comma separated list. + - authZone (object): Auth zone + - searchQuery (string): Fuzzy filter by group name + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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": ["users", "configure", "iam", "idps", "groups", "search"], + "operation": "searchOrganizationIdpGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/groups/search" + + body_params = [ + "idpIds", + "authZone", + "searchQuery", + "perPage", + "startingAfter", + "endingBefore", + ] + 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"searchOrganizationIdpGroups: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationIamUsersIdpsProductIntegrations(self, organizationId: str): + """ + **List all available IdP Product Integration urls for the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-idps-product-integrations + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "idps", "productIntegrations"], + "operation": "getOrganizationIamUsersIdpsProductIntegrations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/productIntegrations" + + return self._session.get(metadata, resource) + + def createOrganizationIamUsersIdpsSearch(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Search all IdPs for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idps-search + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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. + - idpIds (array): Filter identity providers by id(s). Multiple ids can be passed as a comma separated list. + - type (string): Filter identity providers by idp type. + - authZone (object): Filter by auth zone + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = ["Azure AD"] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["users", "configure", "iam", "idps", "search"], + "operation": "createOrganizationIamUsersIdpsSearch", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/search" + + body_params = [ + "perPage", + "startingAfter", + "endingBefore", + "idpIds", + "type", + "authZone", + ] + 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"createOrganizationIamUsersIdpsSearch: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationIamUsersIdpsSyncHistory(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get the IdP sync status records for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-idps-sync-history + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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. + - idpId (string): Identity provider ID. Optional. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "idps", "sync", "history"], + "operation": "getOrganizationIamUsersIdpsSyncHistory", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/sync/history" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "idpId", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationIamUsersIdpsSyncHistory: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationIamUsersIdpsSyncLatest(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get the latest IdP sync status records for all IdPs in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-idps-sync-latest + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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. + - idpIds (array): Identity provider IDs. Optional. + - authZoneId (string): Auth Zone ID + - authZoneType (string): Auth Zone type + """ + + kwargs.update(locals()) + + if "authZoneType" in kwargs: + options = ["access_policy", "node_group", "product", "ssid"] + assert kwargs["authZoneType"] in options, ( + f'''"authZoneType" cannot be "{kwargs["authZoneType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["users", "configure", "iam", "idps", "sync", "latest"], + "operation": "getOrganizationIamUsersIdpsSyncLatest", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/sync/latest" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "idpIds", + "authZoneId", + "authZoneType", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "idpIds", + ] + 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"getOrganizationIamUsersIdpsSyncLatest: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationIamUsersIdpsTestConnectivity(self, organizationId: str, **kwargs): + """ + **Test connectivity to an Entra ID identity provider.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idps-test-connectivity + + - organizationId (string): Organization ID + - idpId (string): Id of the identity provider + - idpConfig (object): Identity provider configuration. Required for external identity providers. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "idps", "testConnectivity"], + "operation": "createOrganizationIamUsersIdpsTestConnectivity", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/testConnectivity" + + body_params = [ + "idpId", + "idpConfig", + ] + 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"createOrganizationIamUsersIdpsTestConnectivity: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def createOrganizationIamUsersIdpsUser(self, organizationId: str, **kwargs): + """ + **Create a Meraki user** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idps-user + + - organizationId (string): Organization ID + - displayName (string): A human-readable identifier for the created user. + - email (string): An email address identified with the user. + - password (string): The password for the user account. + - sendPassword (boolean): If true, sends an email with the password to the user. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "idps"], + "operation": "createOrganizationIamUsersIdpsUser", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/users" + + body_params = [ + "displayName", + "email", + "password", + "sendPassword", + ] + 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"createOrganizationIamUsersIdpsUser: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateOrganizationIamUsersIdpsUser(self, organizationId: str, id: str, **kwargs): + """ + **Update a Meraki user** + https://developer.cisco.com/meraki/api-v1/#!update-organization-iam-users-idps-user + + - organizationId (string): Organization ID + - id (string): ID + - displayName (string): A human-readable identifier for the created user. + - email (string): An email address identified with the user. + - password (string): The password for the user account. + - sendPassword (boolean): If true, sends an email with the password to the user. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "idps"], + "operation": "updateOrganizationIamUsersIdpsUser", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/users/{id}" + + body_params = [ + "displayName", + "email", + "password", + "sendPassword", + ] + 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"updateOrganizationIamUsersIdpsUser: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationIamUsersIdpsUser(self, organizationId: str, id: str): + """ + **Delete a Meraki end user** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-iam-users-idps-user + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "idps"], + "operation": "deleteOrganizationIamUsersIdpsUser", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/users/{id}" + + return self._session.delete(metadata, resource) + + def createOrganizationIamUsersIdpSync(self, organizationId: str, idpId: str, **kwargs): + """ + **Trigger an IdP sync for an identity provider** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idp-sync + + - organizationId (string): Organization ID + - idpId (string): Idp ID + - emails (array): List of emails to sync + - force (boolean): Force a complete sync of all users and groups + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "idps", "sync"], + "operation": "createOrganizationIamUsersIdpSync", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + idpId = urllib.parse.quote(str(idpId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/{idpId}/sync" + + body_params = [ + "emails", + "force", + ] + 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"createOrganizationIamUsersIdpSync: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationIamUsersIdpSyncLatest(self, organizationId: str, idpId: str): + """ + **Get the latest IdP sync status for an identity provider** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-idp-sync-latest + + - organizationId (string): Organization ID + - idpId (string): Idp ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "idps", "sync", "latest"], + "operation": "getOrganizationIamUsersIdpSyncLatest", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + idpId = urllib.parse.quote(str(idpId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/{idpId}/sync/latest" + + return self._session.get(metadata, resource) + + def updateOrganizationIamUsersIdp(self, organizationId: str, id: str, **kwargs): + """ + **Update an identity provider** + https://developer.cisco.com/meraki/api-v1/#!update-organization-iam-users-idp + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of the identity provider + - description (string): Description of the identity provider + - idpConfig (object): Identity provider configuration. You can update individual attributes + - syncType (string): The synchronization method for the identity provider. Set to 'proactive' to sync all users and groups from your identity provider. Set to 'null' for on-demand user and group provisioning. + """ + + kwargs.update(locals()) + + if "syncType" in kwargs and kwargs["syncType"] is not None: + options = ["proactive"] + assert kwargs["syncType"] in options, ( + f'''"syncType" cannot be "{kwargs["syncType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["users", "configure", "iam", "idps"], + "operation": "updateOrganizationIamUsersIdp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/{id}" + + body_params = [ + "name", + "description", + "idpConfig", + "syncType", + ] + 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"updateOrganizationIamUsersIdp: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationIamUsersIdp(self, organizationId: str, id: str): + """ + **Delete a identity provider from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-iam-users-idp + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "idps"], + "operation": "deleteOrganizationIamUsersIdp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationIamUsersIdpAuthZones(self, organizationId: str, id: str): + """ + **List all auth zones for an identity provider** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-idp-auth-zones + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "idps", "authZones"], + "operation": "getOrganizationIamUsersIdpAuthZones", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/{id}/authZones" + + return self._session.get(metadata, resource) + + def searchOrganizationUsers(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the end users and their associated identity providers for an organization.** + https://developer.cisco.com/meraki/api-v1/#!search-organization-users + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 10. + - 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. + - userIds (array): Filter end users by id(s). + - idpIds (array): Filter by identity provider id(s). + - groupIds (array): Filter by identity provider group id(s). + - accessTypes (array): Filter by access type(s). + - searchQuery (string): Fuzzy filter by display name, user name and email. + - statuses (array): Filter by user status(es). + - sortKey (string): Optional parameter to specify the field used to sort results. (default: username) + - sortOrder (string): Optional parameter to specify the sort order. (default: asc) + """ + + kwargs.update(locals()) + + if "sortKey" in kwargs: + options = ["created_at", "updated_at", "username"] + assert kwargs["sortKey"] in options, ( + f'''"sortKey" cannot be "{kwargs["sortKey"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["users", "configure", "iam", "search"], + "operation": "searchOrganizationUsers", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/search" + + body_params = [ + "perPage", + "startingAfter", + "endingBefore", + "userIds", + "idpIds", + "groupIds", + "accessTypes", + "searchQuery", + "statuses", + "sortKey", + "sortOrder", + ] + 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"searchOrganizationUsers: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationIamUsersSummaryPanel(self, organizationId: str): + """ + **Get the count of users and user groups for an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-summary-panel + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "summaryPanel"], + "operation": "getOrganizationIamUsersSummaryPanel", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/summaryPanel" + + return self._session.get(metadata, resource) diff --git a/meraki/aio/api/wireless.py b/meraki/aio/api/wireless.py index aefeea6..d33b5d8 100644 --- a/meraki/aio/api/wireless.py +++ b/meraki/aio/api/wireless.py @@ -68,6 +68,7 @@ def updateDeviceWirelessBluetoothSettings(self, serial: str, **kwargs): Dashboard's automatically generated value. - minor (integer): Desired minor value of the beacon. If the value is set to null it will reset to Dashboard's automatically generated value. + - transmit (object): Transmit settings including power, interval, and advertised power. """ kwargs.update(locals()) @@ -83,6 +84,7 @@ def updateDeviceWirelessBluetoothSettings(self, serial: str, **kwargs): "uuid", "major", "minor", + "transmit", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -196,6 +198,23 @@ def updateDeviceWirelessElectronicShelfLabel(self, serial: str, **kwargs): return self._session.put(metadata, resource, payload) + def getDeviceWirelessHealthScores(self, serial: str): + """ + **Fetch the health scores for a given AP on this network** + https://developer.cisco.com/meraki/api-v1/#!get-device-wireless-health-scores + + - serial (string): Serial + """ + + metadata = { + "tags": ["wireless", "monitor", "healthScores"], + "operation": "getDeviceWirelessHealthScores", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/healthScores" + + return self._session.get(metadata, resource) + def getDeviceWirelessLatencyStats(self, serial: str, **kwargs): """ **Aggregated latency info for a given AP on this network** @@ -248,6 +267,123 @@ def getDeviceWirelessLatencyStats(self, serial: str, **kwargs): return self._session.get(metadata, resource, params) + def getDeviceWirelessRadioAfcPosition(self, serial: str): + """ + **Return the position for a wireless device** + https://developer.cisco.com/meraki/api-v1/#!get-device-wireless-radio-afc-position + + - serial (string): Serial + """ + + metadata = { + "tags": ["wireless", "configure", "radio", "afc", "position"], + "operation": "getDeviceWirelessRadioAfcPosition", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/radio/afc/position" + + return self._session.get(metadata, resource) + + def updateDeviceWirelessRadioAfcPosition(self, serial: str, **kwargs): + """ + **Update the position attributes for this device** + https://developer.cisco.com/meraki/api-v1/#!update-device-wireless-radio-afc-position + + - serial (string): Serial + - height (object): Height attributes + - gps (object): GPS attributes + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "afc", "position"], + "operation": "updateDeviceWirelessRadioAfcPosition", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/radio/afc/position" + + body_params = [ + "height", + "gps", + ] + 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"updateDeviceWirelessRadioAfcPosition: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getDeviceWirelessRadioAfcPowerLimits(self, serial: str): + """ + **Return the AFC power limits for a wireless device** + https://developer.cisco.com/meraki/api-v1/#!get-device-wireless-radio-afc-power-limits + + - serial (string): Serial + """ + + metadata = { + "tags": ["wireless", "configure", "radio", "afc", "powerLimits"], + "operation": "getDeviceWirelessRadioAfcPowerLimits", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/radio/afc/powerLimits" + + return self._session.get(metadata, resource) + + def getDeviceWirelessRadioOverrides(self, serial: str): + """ + **Return the radio overrides of a device** + https://developer.cisco.com/meraki/api-v1/#!get-device-wireless-radio-overrides + + - serial (string): Serial + """ + + metadata = { + "tags": ["wireless", "configure", "radio", "overrides"], + "operation": "getDeviceWirelessRadioOverrides", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/radio/overrides" + + return self._session.get(metadata, resource) + + def updateDeviceWirelessRadioOverrides(self, serial: str, **kwargs): + """ + **Update 2.4 GHz, 5 GHz, and 6 GHz radio settings (channel, channel width, power, and enable/disable) that override RF profiles.** + https://developer.cisco.com/meraki/api-v1/#!update-device-wireless-radio-overrides + + - serial (string): Serial + - rfProfile (object): This device's RF profile + - radios (array): Radio overrides. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "overrides"], + "operation": "updateDeviceWirelessRadioOverrides", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/radio/overrides" + + body_params = [ + "rfProfile", + "radios", + ] + 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"updateDeviceWirelessRadioOverrides: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getDeviceWirelessRadioSettings(self, serial: str): """ **Return the manually configured radio settings overrides of a device, which take precedence over RF profiles.** @@ -300,6 +436,23 @@ def updateDeviceWirelessRadioSettings(self, serial: str, **kwargs): return self._session.put(metadata, resource, payload) + def getDeviceWirelessRadioStatus(self, serial: str): + """ + **Show the status of this device's radios** + https://developer.cisco.com/meraki/api-v1/#!get-device-wireless-radio-status + + - serial (string): Serial + """ + + metadata = { + "tags": ["wireless", "configure", "radio", "status"], + "operation": "getDeviceWirelessRadioStatus", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/radio/status" + + return self._session.get(metadata, resource) + def getDeviceWirelessStatus(self, serial: str): """ **Return the SSID statuses of an access point** @@ -655,6 +808,7 @@ def updateNetworkWirelessBluetoothSettings(self, networkId: str, **kwargs): - majorMinorAssignmentMode (string): The way major and minor number should be assigned to nodes in the network. ('Unique', 'Non-unique') - major (integer): The major number to be used in the beacon identifier. Only valid in 'Non-unique' mode. - minor (integer): The minor number to be used in the beacon identifier. Only valid in 'Non-unique' mode. + - transmit (object): Transmit settings. """ kwargs.update(locals()) @@ -679,6 +833,7 @@ def updateNetworkWirelessBluetoothSettings(self, networkId: str, **kwargs): "majorMinorAssignmentMode", "major", "minor", + "transmit", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -848,6 +1003,23 @@ def getNetworkWirelessClientsConnectionStats(self, networkId: str, **kwargs): return self._session.get(metadata, resource, params) + def getNetworkWirelessClientsHealthScores(self, networkId: str): + """ + **Fetch the health scores for all clients on this network** + https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-clients-health-scores + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["wireless", "monitor", "clients", "healthScores"], + "operation": "getNetworkWirelessClientsHealthScores", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/clients/healthScores" + + return self._session.get(metadata, resource) + def getNetworkWirelessClientsLatencyStats(self, networkId: str, **kwargs): """ **Aggregated latency info for this network, grouped by clients** @@ -902,6 +1074,53 @@ def getNetworkWirelessClientsLatencyStats(self, networkId: str, **kwargs): return self._session.get(metadata, resource, params) + def getNetworkWirelessClientsOnboardingHistory(self, networkId: str, **kwargs): + """ + **Return counts of distinct wireless clients connecting to a network over time** + https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-clients-onboarding-history + + - networkId (string): Network ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 7 days. + - resolution (integer): The time resolution in seconds for returned data. The valid resolutions are: 300. The default is 300. + - band (string): Filter results by band (either '2.4', '5' or '6'); this cannot be combined with the SSID filter. + - ssid (integer): Filter results by SSID number; this cannot be combined with the band filter. + """ + + kwargs.update(locals()) + + if "band" in kwargs: + options = ["2.4", "5", "6"] + assert kwargs["band"] in options, f'''"band" cannot be "{kwargs["band"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["wireless", "monitor", "clients", "onboardingHistory"], + "operation": "getNetworkWirelessClientsOnboardingHistory", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/clients/onboardingHistory" + + query_params = [ + "t0", + "t1", + "timespan", + "resolution", + "band", + "ssid", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getNetworkWirelessClientsOnboardingHistory: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + def getNetworkWirelessClientConnectionStats(self, networkId: str, clientId: str, **kwargs): """ **Aggregated connectivity info for a given client on this network** @@ -1038,6 +1257,25 @@ def getNetworkWirelessClientConnectivityEvents( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getNetworkWirelessClientHealthScores(self, networkId: str, clientId: str): + """ + **Fetch the health scores for a given client on this network** + https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-client-health-scores + + - networkId (string): Network ID + - clientId (string): Client ID + """ + + metadata = { + "tags": ["wireless", "monitor", "clients", "healthScores"], + "operation": "getNetworkWirelessClientHealthScores", + } + networkId = urllib.parse.quote(str(networkId), safe="") + clientId = urllib.parse.quote(str(clientId), safe="") + resource = f"/networks/{networkId}/wireless/clients/{clientId}/healthScores" + + return self._session.get(metadata, resource) + def getNetworkWirelessClientLatencyHistory(self, networkId: str, clientId: str, **kwargs): """ **Return the latency history for a client** @@ -1133,6 +1371,53 @@ def getNetworkWirelessClientLatencyStats(self, networkId: str, clientId: str, ** return self._session.get(metadata, resource, params) + def getNetworkWirelessClientRoamingHistory(self, networkId: str, clientId: str, total_pages=1, direction="next", **kwargs): + """ + **Get client roam events within the specified timespan.** + https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-client-roaming-history + + - networkId (string): Network ID + - clientId (string): Client 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "clients", "roaming", "history"], + "operation": "getNetworkWirelessClientRoamingHistory", + } + networkId = urllib.parse.quote(str(networkId), safe="") + clientId = urllib.parse.quote(str(clientId), safe="") + resource = f"/networks/{networkId}/wireless/clients/{clientId}/roaming/history" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getNetworkWirelessClientRoamingHistory: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getNetworkWirelessConnectionStats(self, networkId: str, **kwargs): """ **Aggregated connectivity info for this network** @@ -1284,6 +1569,23 @@ def getNetworkWirelessDevicesConnectionStats(self, networkId: str, **kwargs): return self._session.get(metadata, resource, params) + def getNetworkWirelessDevicesHealthScores(self, networkId: str): + """ + **Fetch the health scores of all APs on this network** + https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-devices-health-scores + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["wireless", "monitor", "devices", "healthScores"], + "operation": "getNetworkWirelessDevicesHealthScores", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/devices/healthScores" + + return self._session.get(metadata, resource) + def getNetworkWirelessDevicesLatencyStats(self, networkId: str, **kwargs): """ **Aggregated latency info for this network, grouped by node** @@ -1439,6 +1741,7 @@ def createNetworkWirelessEthernetPortsProfile(self, networkId: str, name: str, p - name (string): AP port profile name - ports (array): AP ports configuration - usbPorts (array): AP usb ports configuration + - security (object): AP port security configuration """ kwargs.update(locals()) @@ -1454,6 +1757,7 @@ def createNetworkWirelessEthernetPortsProfile(self, networkId: str, name: str, p "name", "ports", "usbPorts", + "security", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1564,6 +1868,7 @@ def updateNetworkWirelessEthernetPortsProfile(self, networkId: str, profileId: s - name (string): AP port profile name - ports (array): AP ports configuration - usbPorts (array): AP usb ports configuration + - security (object): AP port security configuration """ kwargs.update(locals()) @@ -1580,6 +1885,7 @@ def updateNetworkWirelessEthernetPortsProfile(self, networkId: str, profileId: s "name", "ports", "usbPorts", + "security", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1811,6 +2117,41 @@ def updateNetworkWirelessLocationScanning(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) + def updateNetworkWirelessLocationWayfinding(self, networkId: str, **kwargs): + """ + **Change client wayfinding settings** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-location-wayfinding + + - networkId (string): Network ID + - enabled (boolean): Whether to enable client wayfinding on that network (only supported on Wireless networks). + - maintenanceWindow (object): Maintenance window during which optimization might take place to improve location accuracy. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "location", "wayfinding"], + "operation": "updateNetworkWirelessLocationWayfinding", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/location/wayfinding" + + body_params = [ + "enabled", + "maintenanceWindow", + ] + 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"updateNetworkWirelessLocationWayfinding: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + def getNetworkWirelessMeshStatuses(self, networkId: str, total_pages=1, direction="next", **kwargs): """ **List wireless mesh statuses for repeaters** @@ -1848,32 +2189,26 @@ def getNetworkWirelessMeshStatuses(self, networkId: str, total_pages=1, directio return self._session.get_pages(metadata, resource, params, total_pages, direction) - def updateNetworkWirelessRadioRrm(self, networkId: str, **kwargs): + def updateNetworkWirelessOpportunisticPcap(self, networkId: str, **kwargs): """ - **Update the AutoRF settings for a wireless network** - https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-radio-rrm + **Update the Opportunistic Pcap settings for a wireless network** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-opportunistic-pcap - networkId (string): Network ID - - busyHour (object): Busy Hour settings - - channel (object): Channel settings - - fra (object): FRA settings - - ai (object): AI settings + - enablement (object): Enablement settings """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "radio", "rrm"], - "operation": "updateNetworkWirelessRadioRrm", + "tags": ["wireless", "configure", "opportunisticPcap"], + "operation": "updateNetworkWirelessOpportunisticPcap", } networkId = urllib.parse.quote(str(networkId), safe="") - resource = f"/networks/{networkId}/wireless/radio/rrm" + resource = f"/networks/{networkId}/wireless/opportunisticPcap" body_params = [ - "busyHour", - "channel", - "fra", - "ai", + "enablement", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1881,18 +2216,94 @@ def updateNetworkWirelessRadioRrm(self, networkId: str, **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"updateNetworkWirelessRadioRrm: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"updateNetworkWirelessOpportunisticPcap: ignoring unrecognized kwargs: {invalid}" + ) return self._session.put(metadata, resource, payload) - def getNetworkWirelessRfProfiles(self, networkId: str, **kwargs): + def updateNetworkWirelessRadioAutoRf(self, networkId: str, **kwargs): """ - **List RF profiles for this network** - https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-rf-profiles + **Update the AutoRF settings for a wireless network** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-radio-auto-rf - networkId (string): Network ID - - includeTemplateProfiles (boolean): If the network is bound to a template, this parameter controls whether or not the non-basic RF profiles defined on the template should be included in the response alongside the non-basic profiles defined on the bound network. Defaults to false. - """ + - busyHour (object): Busy Hour settings + - channel (object): Channel settings + - fra (object): FRA settings + - aiRrm (object): AI-RRM settings + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "autoRf"], + "operation": "updateNetworkWirelessRadioAutoRf", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/radio/autoRf" + + body_params = [ + "busyHour", + "channel", + "fra", + "aiRrm", + ] + 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"updateNetworkWirelessRadioAutoRf: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def updateNetworkWirelessRadioRrm(self, networkId: str, **kwargs): + """ + **Update the AutoRF settings for a wireless network** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-radio-rrm + + - networkId (string): Network ID + - busyHour (object): Busy Hour settings + - channel (object): Channel settings + - fra (object): FRA settings + - ai (object): AI settings + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "rrm"], + "operation": "updateNetworkWirelessRadioRrm", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/radio/rrm" + + body_params = [ + "busyHour", + "channel", + "fra", + "ai", + ] + 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"updateNetworkWirelessRadioRrm: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getNetworkWirelessRfProfiles(self, networkId: str, **kwargs): + """ + **List RF profiles for this network** + https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-rf-profiles + + - networkId (string): Network ID + - includeTemplateProfiles (boolean): If the network is bound to a template, this parameter controls whether or not the non-basic RF profiles defined on the template should be included in the response alongside the non-basic profiles defined on the bound network. Defaults to false. + """ kwargs.update(locals()) @@ -2252,6 +2663,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - number (string): Number - name (string): The name of the SSID - enabled (boolean): Whether or not the SSID is enabled + - localAuth (boolean): Extended local auth flag for Enterprise NAC - authMode (string): The association control method for the SSID ('open', 'open-enhanced', 'psk', 'open-with-radius', 'open-enhanced-with-radius', 'open-with-nac', '8021x-meraki', '8021x-nac', '8021x-radius', '8021x-google', '8021x-entra', '8021x-localradius', 'ipsk-with-radius', 'ipsk-without-radius', 'ipsk-with-nac' or 'ipsk-with-radius-easy-psk') - enterpriseAdminAccess (string): Whether or not an SSID is accessible by 'enterprise' administrators ('access disabled' or 'access enabled') - ssidAdminAccessible (boolean): SSID Administrator access status @@ -2283,6 +2695,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - radiusAccountingInterimInterval (integer): The interval (in seconds) in which accounting information is updated and sent to the RADIUS accounting server. - radiusAttributeForGroupPolicies (string): Specify the RADIUS attribute used to look up group policies ('Filter-Id', 'Reply-Message', 'Airespace-ACL-Name' or 'Aruba-User-Role'). Access points must receive this attribute in the RADIUS Access-Accept message - ipAssignmentMode (string): The client IP assignment mode ('NAT mode', 'Bridge mode', 'Layer 3 roaming', 'Ethernet over GRE', 'Layer 3 roaming with a concentrator', 'VPN' or 'Campus Gateway') + - campusGateway (object): Campus gateway settings - useVlanTagging (boolean): Whether or not traffic should be directed to use specific VLANs. This param is only valid if the ipAssignmentMode is 'Bridge mode' or 'Layer 3 roaming' - concentratorNetworkId (string): The concentrator to use when the ipAssignmentMode is 'Layer 3 roaming with a concentrator' or 'VPN'. - secondaryConcentratorNetworkId (string): The secondary concentrator to use when the ipAssignmentMode is 'VPN'. If configured, the APs will switch to using this concentrator if the primary concentrator is unreachable. This param is optional. ('disabled' represents no secondary concentrator.) @@ -2312,6 +2725,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - dnsRewrite (object): DNS servers rewrite settings - speedBurst (object): The SpeedBurst setting for this SSID' - namedVlans (object): Named VLAN settings. + - security (object): Security settings for the SSID - localAuthFallback (object): The current configuration for Local Authentication Fallback. Enables the Access Point (AP) to store client authentication data for a specified duration that can be adjusted as needed. - radiusAccountingStartDelay (integer): The delay (in seconds) before sending the first RADIUS accounting start message. Must be between 0 and 60 seconds. """ @@ -2403,6 +2817,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): body_params = [ "name", "enabled", + "localAuth", "authMode", "enterpriseAdminAccess", "ssidAdminAccessible", @@ -2434,6 +2849,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): "radiusAccountingInterimInterval", "radiusAttributeForGroupPolicies", "ipAssignmentMode", + "campusGateway", "useVlanTagging", "concentratorNetworkId", "secondaryConcentratorNetworkId", @@ -2463,6 +2879,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): "dnsRewrite", "speedBurst", "namedVlans", + "security", "localAuthFallback", "radiusAccountingStartDelay", ] @@ -3015,6 +3432,154 @@ def updateNetworkWirelessSsidOpenRoaming(self, networkId: str, number: str, **kw return self._session.put(metadata, resource, payload) + def updateNetworkWirelessSsidPoliciesClientExclusion(self, networkId: str, number: str, **kwargs): + """ + **Update the client exclusion status configuration for a given SSID** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-ssid-policies-client-exclusion + + - networkId (string): Network ID + - number (string): Number + - static (object): Static client exclusion status + - dynamic (object): Dynamic client exclusion configuration + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "ssids", "policies", "clientExclusion"], + "operation": "updateNetworkWirelessSsidPoliciesClientExclusion", + } + networkId = urllib.parse.quote(str(networkId), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/networks/{networkId}/wireless/ssids/{number}/policies/clientExclusion" + + body_params = [ + "static", + "dynamic", + ] + 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"updateNetworkWirelessSsidPoliciesClientExclusion: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def updateNetworkWirelessSsidPoliciesClientExclusionStaticExclusions( + self, networkId: str, number: str, macs: list, **kwargs + ): + """ + **Replace the static client exclusion list for the given SSID (use PUT /exclusions)** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-ssid-policies-client-exclusion-static-exclusions + + - networkId (string): Network ID + - number (string): Number + - macs (array): MAC addresses to set as static exclusion list + """ + + kwargs = locals() + + metadata = { + "tags": ["wireless", "configure", "ssids", "policies", "clientExclusion", "static", "exclusions"], + "operation": "updateNetworkWirelessSsidPoliciesClientExclusionStaticExclusions", + } + networkId = urllib.parse.quote(str(networkId), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/networks/{networkId}/wireless/ssids/{number}/policies/clientExclusion/static/exclusions" + + body_params = [ + "macs", + ] + 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"updateNetworkWirelessSsidPoliciesClientExclusionStaticExclusions: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkAdd( + self, networkId: str, number: str, macs: list, **kwargs + ): + """ + **Add MAC addresses to the existing static client exclusion list for the given SSID (use POST /bulkAdd)** + https://developer.cisco.com/meraki/api-v1/#!create-network-wireless-ssid-policies-client-exclusion-static-exclusions-bulk-add + + - networkId (string): Network ID + - number (string): Number + - macs (array): MAC addresses to add to static exclusion + """ + + kwargs = locals() + + metadata = { + "tags": ["wireless", "configure", "ssids", "policies", "clientExclusion", "static", "exclusions", "bulkAdd"], + "operation": "createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkAdd", + } + networkId = urllib.parse.quote(str(networkId), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/networks/{networkId}/wireless/ssids/{number}/policies/clientExclusion/static/exclusions/bulkAdd" + + body_params = [ + "macs", + ] + 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"createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkAdd: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkRemove( + self, networkId: str, number: str, macs: list, **kwargs + ): + """ + **Remove MAC addresses from the existing static client exclusion list for the given SSID (use POST /bulkRemove)** + https://developer.cisco.com/meraki/api-v1/#!create-network-wireless-ssid-policies-client-exclusion-static-exclusions-bulk-remove + + - networkId (string): Network ID + - number (string): Number + - macs (array): MAC addresses to remove from static exclusion + """ + + kwargs = locals() + + metadata = { + "tags": ["wireless", "configure", "ssids", "policies", "clientExclusion", "static", "exclusions", "bulkRemove"], + "operation": "createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkRemove", + } + networkId = urllib.parse.quote(str(networkId), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/networks/{networkId}/wireless/ssids/{number}/policies/clientExclusion/static/exclusions/bulkRemove" + + body_params = [ + "macs", + ] + 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"createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkRemove: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + def getNetworkWirelessSsidSchedules(self, networkId: str, number: str): """ **List the outage schedule for the SSID** @@ -3103,6 +3668,7 @@ def updateNetworkWirelessSsidSplashSettings(self, networkId: str, number: str, * - redirectUrl (string): The custom redirect URL where the users will go after the splash page. - useRedirectUrl (boolean): The Boolean indicating whether the the user will be redirected to the custom redirect URL after the splash page. A custom redirect URL must be set if this is true. - welcomeMessage (string): The welcome message for the users on the splash page. + - language (string): Language of splash page. - userConsent (object): User consent settings - themeId (string): The id of the selected splash theme. - splashLogo (object): The logo used in the splash page. @@ -3124,6 +3690,32 @@ def updateNetworkWirelessSsidSplashSettings(self, networkId: str, number: str, * assert kwargs["splashTimeout"] in options, ( f'''"splashTimeout" cannot be "{kwargs["splashTimeout"]}", & must be set to one of: {options}''' ) + if "language" in kwargs: + options = [ + "DA", + "DE", + "EL", + "EN", + "ES", + "FI", + "FR", + "GL", + "IT", + "JA", + "KO", + "NL", + "NO", + "PL", + "PT", + "RU", + "SK", + "SV", + "UK", + "ZH", + ] + assert kwargs["language"] in options, ( + f'''"language" cannot be "{kwargs["language"]}", & must be set to one of: {options}''' + ) if "controllerDisconnectionBehavior" in kwargs: options = ["default", "open", "restricted"] assert kwargs["controllerDisconnectionBehavior"] in options, ( @@ -3145,6 +3737,7 @@ def updateNetworkWirelessSsidSplashSettings(self, networkId: str, number: str, * "redirectUrl", "useRedirectUrl", "welcomeMessage", + "language", "userConsent", "themeId", "splashLogo", @@ -3377,34 +3970,38 @@ def updateNetworkWirelessZigbee(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) - def getOrganizationWirelessAirMarshalRules(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceConnectivityWirelessRfHealthByBand(self, organizationId: str, networkIds: list, **kwargs): """ - **Returns the current Air Marshal rules for this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-air-marshal-rules + **Show the by-device RF Health score overview information for the organization in the given interval** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-connectivity-wireless-rf-health-by-band - 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) The set of network IDs to include. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - - 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. + - networkIds (array): Networks for which information should be gathered. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 3600, 14400, 86400. The default is 3600. Interval is calculated if time params are provided. + - minimumRfHealthScore (integer): Minimum RF Health score for an AP to be retrieved. + - maximumRfHealthScore (integer): Maximum RF Health score for an AP to be retrieved. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "airMarshal", "rules"], - "operation": "getOrganizationWirelessAirMarshalRules", + "tags": ["wireless", "configure", "connectivity", "rfHealth", "byBand"], + "operation": "getOrganizationAssuranceConnectivityWirelessRfHealthByBand", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/airMarshal/rules" + resource = f"/organizations/{organizationId}/assurance/connectivity/wireless/rfHealth/byBand" query_params = [ + "t0", + "t1", + "timespan", + "interval", "networkIds", - "perPage", - "startingAfter", - "endingBefore", + "minimumRfHealthScore", + "maximumRfHealthScore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} @@ -3421,23 +4018,26 @@ def getOrganizationWirelessAirMarshalRules(self, organizationId: str, total_page 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"getOrganizationWirelessAirMarshalRules: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceConnectivityWirelessRfHealthByBand: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationWirelessAirMarshalSettingsByNetwork( + def getOrganizationAssuranceImpactedDeviceWirelessByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Returns the current Air Marshal settings for this network** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-air-marshal-settings-by-network + **Returns count of impacted wireless devices per network on a given organization and time range.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-impacted-device-wireless-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): The network IDs to include in the result set. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - networkGroupIds (array): Filter results by a list of network group IDs. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 2 hours and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5000. Default is 1000. - 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. """ @@ -3445,14 +4045,17 @@ def getOrganizationWirelessAirMarshalSettingsByNetwork( kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "airMarshal", "settings", "byNetwork"], - "operation": "getOrganizationWirelessAirMarshalSettingsByNetwork", + "tags": ["wireless", "monitor", "impactedDevice", "byNetwork"], + "operation": "getOrganizationAssuranceImpactedDeviceWirelessByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/airMarshal/settings/byNetwork" + resource = f"/organizations/{organizationId}/assurance/impactedDevice/wireless/byNetwork" query_params = [ - "networkIds", + "networkGroupIds", + "t0", + "t1", + "timespan", "perPage", "startingAfter", "endingBefore", @@ -3460,7 +4063,7 @@ def getOrganizationWirelessAirMarshalSettingsByNetwork( params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "networkIds", + "networkGroupIds", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3472,23 +4075,29 @@ def getOrganizationWirelessAirMarshalSettingsByNetwork( 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"getOrganizationWirelessAirMarshalSettingsByNetwork: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceImpactedDeviceWirelessByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessClientsOverviewByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **List access point client count at the moment in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-overview-by-device + **Summarizes wireless post connection capacity successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-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 access points client counts by network ID. This filter uses multiple exact matches. - - serials (array): Optional parameter to filter access points client counts by its serial numbers. This filter uses multiple exact matches. - - campusGatewayClusterIds (array): Optional parameter to filter access points client counts by MCG cluster IDs. This filter uses multiple exact matches. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. """ @@ -3496,16 +4105,20 @@ def getOrganizationWirelessClientsOverviewByDevice(self, organizationId: str, to kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "clients", "overview", "byDevice"], - "operation": "getOrganizationWirelessClientsOverviewByDevice", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/clients/overview/byDevice" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork" query_params = [ "networkIds", "serials", - "campusGatewayClusterIds", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", "perPage", "startingAfter", "endingBefore", @@ -3515,7 +4128,8 @@ def getOrganizationWirelessClientsOverviewByDevice(self, organizationId: str, to array_params = [ "networkIds", "serials", - "campusGatewayClusterIds", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3527,57 +4141,61 @@ def getOrganizationWirelessClientsOverviewByDevice(self, organizationId: str, to 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"getOrganizationWirelessClientsOverviewByDevice: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesChannelUtilizationByDevice( + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByBand( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Get average channel utilization for all bands in a network, split by AP** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-by-device + **Summarizes wireless post connection capacity successes and failures by band.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-band - 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): Filter results by network. - - serials (array): Filter results by device. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "channelUtilization", "byDevice"], - "operation": "getOrganizationWirelessDevicesChannelUtilizationByDevice", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork", "byBand"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByBand", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/byDevice" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/byBand" query_params = [ "networkIds", "serials", - "perPage", - "startingAfter", - "endingBefore", + "ssidNumbers", + "bands", "t0", "t1", "timespan", - "interval", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3589,57 +4207,61 @@ def getOrganizationWirelessDevicesChannelUtilizationByDevice( 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"getOrganizationWirelessDevicesChannelUtilizationByDevice: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByBand: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesChannelUtilizationByNetwork( + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClient( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Get average channel utilization across all bands for all networks in the organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-by-network + **Summarizes wireless post connection capacity successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-client - 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): Filter results by network. - - serials (array): Filter results by device. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "channelUtilization", "byNetwork"], - "operation": "getOrganizationWirelessDevicesChannelUtilizationByNetwork", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork", "byClient"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClient", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/byNetwork" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/byClient" query_params = [ "networkIds", "serials", - "perPage", - "startingAfter", - "endingBefore", + "ssidNumbers", + "bands", "t0", "t1", "timespan", - "interval", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3651,57 +4273,61 @@ def getOrganizationWirelessDevicesChannelUtilizationByNetwork( 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"getOrganizationWirelessDevicesChannelUtilizationByNetwork: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClient: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval( + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClientOs( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Get a time-series of average channel utilization for all bands, segmented by device.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-history-by-device-by-interval + **Summarizes wireless post connection capacity successes and failures by client OS and driver version.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-client-os - 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): Filter results by network. - - serials (array): Filter results by device. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 7 days. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "channelUtilization", "history", "byDevice", "byInterval"], - "operation": "getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork", "byClientOs"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClientOs", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/history/byDevice/byInterval" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/byClientOs" query_params = [ "networkIds", "serials", - "perPage", - "startingAfter", - "endingBefore", + "ssidNumbers", + "bands", "t0", "t1", "timespan", - "interval", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3713,57 +4339,61 @@ def getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval( 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"getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClientOs: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval( + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClientType( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Get a time-series of average channel utilization for all bands** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-history-by-network-by-interval + **Summarizes wireless post connection capacity successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-client-type - 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): Filter results by network. - - serials (array): Filter results by device. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 7 days. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "channelUtilization", "history", "byNetwork", "byInterval"], - "operation": "getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork", "byClientType"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClientType", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/history/byNetwork/byInterval" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/byClientType" query_params = [ "networkIds", "serials", - "perPage", - "startingAfter", - "endingBefore", + "ssidNumbers", + "bands", "t0", "t1", "timespan", - "interval", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3775,44 +4405,61 @@ def getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval( 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"getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClientType: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesEthernetStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **List the most recent Ethernet link speed, duplex, aggregation and power mode and status information for wireless devices.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-ethernet-statuses + **Summarizes wireless post connection capacity successes and failures by device.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-device - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 100. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - networkIds (array): A list of Meraki network IDs to filter results to contain only specified networks. E.g.: networkIds[]=N_12345678&networkIds[]=L_3456 """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "ethernet", "statuses"], - "operation": "getOrganizationWirelessDevicesEthernetStatuses", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork", "byDevice"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/ethernet/statuses" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/byDevice" query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", "perPage", "startingAfter", "endingBefore", - "networkIds", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", + "serials", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3824,59 +4471,63 @@ def getOrganizationWirelessDevicesEthernetStatuses(self, organizationId: str, to 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"getOrganizationWirelessDevicesEthernetStatuses: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByDevice: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesPacketLossByClient(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Get average packet loss for the given timespan for all clients in the organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-packet-loss-by-client + **Time-series of wireless post connection capacity successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-interval - 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): Filter results by network. - - ssids (array): Filter results by SSID number. - - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. - - macs (array): Filter results by client mac address(es). - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 90 days. The default is 7 days. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "packetLoss", "byClient"], - "operation": "getOrganizationWirelessDevicesPacketLossByClient", + "tags": ["wireless", "monitor", "experience", "channelAvailability", "byNetwork", "byInterval"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/packetLoss/byClient" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/byInterval" query_params = [ "networkIds", - "ssids", + "serials", + "ssidNumbers", "bands", - "macs", - "perPage", - "startingAfter", - "endingBefore", "t0", "t1", "timespan", + "interval", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", - "ssids", + "serials", + "ssidNumbers", "bands", - "macs", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3888,58 +4539,60 @@ def getOrganizationWirelessDevicesPacketLossByClient(self, organizationId: str, 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"getOrganizationWirelessDevicesPacketLossByClient: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesPacketLossByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Get average packet loss for the given timespan for all devices in the organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-packet-loss-by-device + **Summarizes wireless post connection capacity successes and failures by ssid.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-ssid - 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): Filter results by network. - - serials (array): Filter results by device. - - ssids (array): Filter results by SSID number. - - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 90 days. The default is 7 days. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "packetLoss", "byDevice"], - "operation": "getOrganizationWirelessDevicesPacketLossByDevice", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork", "bySsid"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkBySsid", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/packetLoss/byDevice" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/bySsid" query_params = [ "networkIds", "serials", - "ssids", + "ssidNumbers", "bands", - "perPage", - "startingAfter", - "endingBefore", "t0", "t1", "timespan", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", - "ssids", + "ssidNumbers", "bands", ] for k, v in kwargs.items(): @@ -3952,60 +4605,70 @@ def getOrganizationWirelessDevicesPacketLossByDevice(self, organizationId: str, 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"getOrganizationWirelessDevicesPacketLossByDevice: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesPacketLossByNetwork( + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityInsightsByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Get average packet loss for the given timespan for all networks in the organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-packet-loss-by-network + **Provides insights into wireless capacity experience by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-insights-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): Filter results by network. - - serials (array): Filter results by device. - - ssids (array): Filter results by SSID number. - - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - contributor (string): Contributor for which to retrieve insights. If not specified, returns overall insights. + - subContributor (string): Sub-contributor for which to retrieve insights. If not specified, returns all sub contributor insights. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 90 days. The default is 7 days. """ kwargs.update(locals()) + if "contributor" in kwargs: + options = ["Co-channel interference", "High traffic", "Non-wifi interference"] + assert kwargs["contributor"] in options, ( + f'''"contributor" cannot be "{kwargs["contributor"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["wireless", "monitor", "devices", "packetLoss", "byNetwork"], - "operation": "getOrganizationWirelessDevicesPacketLossByNetwork", + "tags": ["wireless", "configure", "experience", "channelAvailability", "insights", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityInsightsByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/packetLoss/byNetwork" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/insights/byNetwork" query_params = [ "networkIds", "serials", - "ssids", + "ssidNumbers", "bands", - "perPage", - "startingAfter", - "endingBefore", + "contributor", + "subContributor", "t0", "t1", "timespan", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", - "ssids", + "ssidNumbers", "bands", ] for k, v in kwargs.items(): @@ -4018,53 +4681,143 @@ def getOrganizationWirelessDevicesPacketLossByNetwork( 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"getOrganizationWirelessDevicesPacketLossByNetwork: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityInsightsByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesPowerModeHistory(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWirelessExperienceClientsInsights(self, organizationId: str, **kwargs): """ - **Return a record of power mode changes for wireless devices in the organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-power-mode-history + **Returns the top wireless service-level insights for the specified time window, including each network and the impacted client count per metric.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-clients-insights + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. + - limit (integer): Number of top networks to return. Default is 5. Maximum is 10. + """ + + kwargs.update(locals()) + + if "limit" in kwargs: + options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + assert kwargs["limit"] in options, f'''"limit" cannot be "{kwargs["limit"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["wireless", "configure", "experience", "clients", "insights"], + "operation": "getOrganizationAssuranceWirelessExperienceClientsInsights", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/clients/insights" + + query_params = [ + "t0", + "t1", + "timespan", + "limit", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationAssuranceWirelessExperienceClientsInsights: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationAssuranceWirelessExperienceClientsOverviewHistoryByInterval(self, organizationId: str, **kwargs): + """ + **Returns time series data for impacted and active clients for organization wireless experience metrics.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-clients-overview-history-by-interval + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - resolution (integer): The time resolution in seconds for returned data. The valid resolutions are: 300, 600, 900, 1800, 3600, 86400. The default is 300. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "experience", "clients", "overview", "history", "byInterval"], + "operation": "getOrganizationAssuranceWirelessExperienceClientsOverviewHistoryByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/clients/overview/history/byInterval" + + query_params = [ + "t0", + "t1", + "timespan", + "resolution", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationAssuranceWirelessExperienceClientsOverviewHistoryByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless coverage successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-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 - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 1 day from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 1 day after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 1 day. The default is 1 day. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - networkIds (array): Optional parameter to filter the result set by the included set of network IDs - - serials (array): Optional parameter to filter device availabilities history by device serial numbers """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "power", "mode", "history"], - "operation": "getOrganizationWirelessDevicesPowerModeHistory", + "tags": ["wireless", "configure", "experience", "coverage", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/power/mode/history" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork" query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", "t0", "t1", "timespan", "perPage", "startingAfter", "endingBefore", - "networkIds", - "serials", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4076,133 +4829,5097 @@ def getOrganizationWirelessDevicesPowerModeHistory(self, organizationId: str, to 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"getOrganizationWirelessDevicesPowerModeHistory: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceCoverageByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesProvisioningDeployments( + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkByBand( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **List the zero touch deployments for wireless access points in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-provisioning-deployments + **Summarizes wireless coverage successes and failures by band.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-band - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 20. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - search (string): Filter by MAC address, serial number, new device name, old device name, or model. - - sortBy (string): Field used to sort results. Default is 'status'. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "experience", "coverage", "byNetwork", "byBand"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkByBand", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/byBand" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkByBand: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClient( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless coverage successes and failures by client.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-client + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "coverage", "byNetwork", "byClient"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/byClient" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClientOs( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless coverage successes and failures by client OS.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-client-os + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "coverage", "byNetwork", "byClientOs"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClientOs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/byClientOs" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClientOs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClientType( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless coverage successes and failures by client type.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-client-type + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "coverage", "byNetwork", "byClientType"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClientType", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/byClientType" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClientType: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless coverage successes and failures by device.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-device + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "coverage", "byNetwork", "byDevice"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/byDevice" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Time-series of wireless coverage successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-interval + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 60, 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "monitor", "experience", "coverage", "byNetwork", "byInterval"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/byInterval" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "interval", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless coverage successes and failures by SSID.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-ssid + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "coverage", "byNetwork", "bySsid"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkBySsid", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/bySsid" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageInsightsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Provides insights into wireless coverage experience by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-insights-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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - contributor (string): Contributor for which to retrieve insights. If not specified, returns overall insights. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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()) + + if "contributor" in kwargs: + options = ["Admin power restriction", "Insufficient AP density", "Sticky client", "Transient weak signal"] + assert kwargs["contributor"] in options, ( + f'''"contributor" cannot be "{kwargs["contributor"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "configure", "experience", "coverage", "insights", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageInsightsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/insights/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "contributor", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageInsightsByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceMetricsOverviewHistoryByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns organization wireless experience metrics overview grouped by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-metrics-overview-history-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): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5000. Default is 1000. + - 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", "experience", "metrics", "overview", "history", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceMetricsOverviewHistoryByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/metrics/overview/history/byNetwork" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + "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"getOrganizationAssuranceWirelessExperienceMetricsOverviewHistoryByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by band.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-band + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork", "byBand"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byBand" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClient( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by client.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-client + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 10000. + - 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", "experience", "successfulConnects", "byNetwork", "byClient"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byClient" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientOs( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by client OS.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-client-os + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork", "byClientOs"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientOs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byClientOs" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientOs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientType( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by client type.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-client-type + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork", "byClientType"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientType", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byClientType" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientType: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by device.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-device + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork", "byDevice"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byDevice" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Time-series of wireless connection successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-interval + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 60, 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "monitor", "experience", "successfulConnects", "byNetwork", "byInterval"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byInterval" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "interval", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServer( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by server.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-server + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork", "byServer"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServer", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byServer" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServer: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by ssid.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-ssid + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork", "bySsid"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/bySsid" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Provides insights into wireless successful connects experience by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-insights-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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - contributor (string): Contributor for which to retrieve insights. If not specified, returns overall insights. + - subContributor (string): Sub-contributor for which to retrieve insights. If not specified, returns all sub contributor insights. + - insights (string): Insights version to use. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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()) + + if "contributor" in kwargs: + options = ["assoc", "auth", "dhcp", "dns"] + assert kwargs["contributor"] in options, ( + f'''"contributor" cannot be "{kwargs["contributor"]}", & must be set to one of: {options}''' + ) + if "insights" in kwargs: + options = ["1", "2"] + assert kwargs["insights"] in options, ( + f'''"insights" cannot be "{kwargs["insights"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "configure", "experience", "successfulConnects", "insights", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/insights/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "contributor", + "subContributor", + "insights", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless time to connect metrics by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByBand( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by band.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-band + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork", "byBand"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByBand", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byBand" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByBand: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClient( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless time to connect metrics by client.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-client + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 10000. + - 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", "experience", "timeToConnect", "byNetwork", "byClient"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byClient" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClientOs( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by client OS.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-client-os + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork", "byClientOs"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClientOs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byClientOs" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClientOs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClientType( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by client type.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-client-type + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork", "byClientType"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClientType", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byClientType" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClientType: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection time to connect metrics by device.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-device + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork", "byDevice"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byDevice" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Time-series of wireless time to connect by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-interval + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 60, 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "monitor", "experience", "timeToConnect", "byNetwork", "byInterval"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byInterval" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "interval", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByServer( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection time to connect metrics by server.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-server + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork", "byServer"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByServer", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byServer" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByServer: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection time to connect metrics by ssid.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-ssid + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork", "bySsid"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkBySsid", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/bySsid" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectInsightsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Provides insights into wireless time to connect experience by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-insights-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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - contributor (string): Contributor for which to retrieve insights. If not specified, returns overall insights. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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()) + + if "contributor" in kwargs: + options = ["assoc", "auth", "dhcp", "dns"] + assert kwargs["contributor"] in options, ( + f'''"contributor" cannot be "{kwargs["contributor"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "configure", "experience", "timeToConnect", "insights", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectInsightsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/insights/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "contributor", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectInsightsByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessAirMarshalRules(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Returns the current Air Marshal rules for this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-air-marshal-rules + + - 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) The set of network IDs to include. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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", "airMarshal", "rules"], + "operation": "getOrganizationWirelessAirMarshalRules", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/airMarshal/rules" + + 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"getOrganizationWirelessAirMarshalRules: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessAirMarshalSettingsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns the current Air Marshal settings for this network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-air-marshal-settings-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): The network IDs to include in the result set. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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", "airMarshal", "settings", "byNetwork"], + "operation": "getOrganizationWirelessAirMarshalSettingsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/airMarshal/settings/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"getOrganizationWirelessAirMarshalSettingsByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessAlertsLowPowerByDevice(self, organizationId: str, networkIds: list, **kwargs): + """ + **Gets all low power related alerts over a given network and returns information by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-alerts-low-power-by-device + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "alerts", "lowPower", "byDevice"], + "operation": "getOrganizationWirelessAlertsLowPowerByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/alerts/lowPower/byDevice" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationWirelessAlertsLowPowerByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessCertificatesOpenRoamingCertificateAuthority(self, organizationId: str): + """ + **Query for details on the organization's OpenRoaming Certificate Authority certificate (CAs).** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-certificates-open-roaming-certificate-authority + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["wireless", "configure", "certificates", "openRoaming", "certificateAuthority"], + "operation": "getOrganizationWirelessCertificatesOpenRoamingCertificateAuthority", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/certificates/openRoaming/certificateAuthority" + + return self._session.get(metadata, resource) + + def getOrganizationWirelessClientsConnectionsAssociationByClient(self, organizationId: str, **kwargs): + """ + **Summarize association outcomes per wireless client across an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-connections-association-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "clients", "connections", "association", "byClient"], + "operation": "getOrganizationWirelessClientsConnectionsAssociationByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/connections/association/byClient" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationWirelessClientsConnectionsAssociationByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessClientsConnectionsAuthenticationByClient(self, organizationId: str, **kwargs): + """ + **Summarize authentication outcomes per wireless client across an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-connections-authentication-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "clients", "connections", "authentication", "byClient"], + "operation": "getOrganizationWirelessClientsConnectionsAuthenticationByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/connections/authentication/byClient" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationWirelessClientsConnectionsAuthenticationByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessClientsConnectionsDhcpByClient(self, organizationId: str, **kwargs): + """ + **Get IP assignment for all clients in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-connections-dhcp-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "clients", "connections", "dhcp", "byClient"], + "operation": "getOrganizationWirelessClientsConnectionsDhcpByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/connections/dhcp/byClient" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationWirelessClientsConnectionsDhcpByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessClientsConnectionsFailuresHistoryByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns failed wireless client connections for this organization by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-connections-failures-history-by-device + + - 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 + - connectionTimeSortOrder (string): (optional) Sort order of events by connection start time. (default desc) + - failureSteps (array): (optional) The step in the connection process that failed + - clientMac (string): (optional) The MAC address of the client with which the list of events will be filtered. + - serials (array): (optional) Filter devices by serial number + - timespan (integer): (optional) The timespan, in seconds, for the failed connections. The period will be from [timespan] seconds ago until now. The maximum allowed timespan is 1 month. Default: 86400 (24 hours) + - ssidNumber (integer): (optional) The SSID number to include + - networkIds (array): (optional) The set of network IDs to include. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 50. + - 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()) + + if "connectionTimeSortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["connectionTimeSortOrder"] in options, ( + f'''"connectionTimeSortOrder" cannot be "{kwargs["connectionTimeSortOrder"]}", & must be set to one of: {options}''' + ) + if "ssidNumber" in kwargs: + options = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] + assert kwargs["ssidNumber"] in options, ( + f'''"ssidNumber" cannot be "{kwargs["ssidNumber"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "configure", "clients", "connections", "failures", "history", "byDevice"], + "operation": "getOrganizationWirelessClientsConnectionsFailuresHistoryByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/connections/failures/history/byDevice" + + query_params = [ + "connectionTimeSortOrder", + "failureSteps", + "clientMac", + "serials", + "timespan", + "ssidNumber", + "networkIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "failureSteps", + "serials", + "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"getOrganizationWirelessClientsConnectionsFailuresHistoryByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessClientsConnectionsImpactedByNetworkBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarize the number of wireless clients impacted by connection failures on network SSIDs, across an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-connections-impacted-by-network-by-ssid + + - 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): Filter results by network. + - networkGroupIds (array): Filter results by a list of network group IDs. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "clients", "connections", "impacted", "byNetwork", "bySsid"], + "operation": "getOrganizationWirelessClientsConnectionsImpactedByNetworkBySsid", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/connections/impacted/byNetwork/bySsid" + + query_params = [ + "networkIds", + "networkGroupIds", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "networkGroupIds", + ] + 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"getOrganizationWirelessClientsConnectionsImpactedByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessClientsOverviewByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List access point client count at the moment in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-overview-by-device + + - 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 access points client counts by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter access points client counts by its serial numbers. This filter uses multiple exact matches. + - campusGatewayClusterIds (array): Optional parameter to filter access points client counts by MCG cluster IDs. This filter uses multiple exact matches. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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", "monitor", "clients", "overview", "byDevice"], + "operation": "getOrganizationWirelessClientsOverviewByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/overview/byDevice" + + query_params = [ + "networkIds", + "serials", + "campusGatewayClusterIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "campusGatewayClusterIds", + ] + 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"getOrganizationWirelessClientsOverviewByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def byOrganizationWirelessClientsRfHealthOverviewNetwork(self, organizationId: str, **kwargs): + """ + **Show the by-network client information for the organization in the given interval** + https://developer.cisco.com/meraki/api-v1/#!by-organization-wireless-clients-rf-health-overview-network + + - organizationId (string): Organization ID + - networkIds (array): Networks for which information should be gathered. + - bands (array): Bands for which information should be gathered. Valid bands are 2.4, 5, and 6. + - channels (array): Channel for which information should be gathered. + - serials (array): Serial number of the devices for which information should be gathered. + - gFloorplanId (string): Geoaligned floorplan ID nodes for which information is gathered belong to. + - tags (array): Access Point tags for which information should be gathered. + - models (array): Access Point models for which information should be gathered. + - rfProfiles (array): Rf Profiles for which information should be gathered. + - minimumRfHealthScore (integer): Minimum RF Health score for an AP to be retrieved. + - maximumRfHealthScore (integer): Maximum RF Health score for an AP to be retrieved. + - retryOnEmpty (boolean): If true, the query will be retried with a longer timeframe if the results are empty. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "clients", "rfHealth", "overview"], + "operation": "byOrganizationWirelessClientsRfHealthOverviewNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/rfHealth/overview/byNetwork" + + query_params = [ + "networkIds", + "bands", + "channels", + "serials", + "gFloorplanId", + "tags", + "models", + "rfProfiles", + "minimumRfHealthScore", + "maximumRfHealthScore", + "retryOnEmpty", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "bands", + "channels", + "serials", + "tags", + "models", + "rfProfiles", + ] + 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"byOrganizationWirelessClientsRfHealthOverviewNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessClientsStickyEvents(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get sticky client events within the specified timespan.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-sticky-events + + - 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): Filter results by network. + - clientIds (array): Filter results by client id. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "clients", "stickyEvents"], + "operation": "getOrganizationWirelessClientsStickyEvents", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/stickyEvents" + + query_params = [ + "networkIds", + "clientIds", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "clientIds", + ] + 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"getOrganizationWirelessClientsStickyEvents: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessClientsUsageByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Returns client usage details for wireless networks within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-usage-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 + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 1 hour and be less than or equal to 7 days. The default is 2 hours. + - networkIds (array): Filter results by a list of network IDs. + - networkGroupIds (array): Filter results by a list of network group IDs. + - gatewayNetworkIds (array): Limit the results to clients tunneled to campus gateways in the provided networks. + - usageUnits (string): Usage units to use in the response. + """ + + kwargs.update(locals()) + + if "usageUnits" in kwargs: + options = ["GB", "KB", "MB", "TB"] + assert kwargs["usageUnits"] in options, ( + f'''"usageUnits" cannot be "{kwargs["usageUnits"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "monitor", "clients", "usage", "byNetwork"], + "operation": "getOrganizationWirelessClientsUsageByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/usage/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "networkGroupIds", + "gatewayNetworkIds", + "usageUnits", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "networkGroupIds", + "gatewayNetworkIds", + ] + 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"getOrganizationWirelessClientsUsageByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessClientsUsageByNetworkBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns client usage details for wireless network SSIDs within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-usage-by-network-by-ssid + + - 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 + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 1 hour and be less than or equal to 7 days. The default is 2 hours. + - networkIds (array): Filter results by a list of network IDs. + - networkGroupIds (array): Filter results by a list of network group IDs. + - ssidIds (array): Filter results by a list of SSID IDs. + - ssidNames (array): Filter results by a list of SSID names. + - gatewayNetworkIds (array): Limit the results to clients tunneled to campus gateways in the provided networks. + - usageUnits (string): Usage units to use in the response. + """ + + kwargs.update(locals()) + + if "usageUnits" in kwargs: + options = ["GB", "KB", "MB", "TB"] + assert kwargs["usageUnits"] in options, ( + f'''"usageUnits" cannot be "{kwargs["usageUnits"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "monitor", "clients", "usage", "byNetwork", "bySsid"], + "operation": "getOrganizationWirelessClientsUsageByNetworkBySsid", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/usage/byNetwork/bySsid" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "networkGroupIds", + "ssidIds", + "ssidNames", + "gatewayNetworkIds", + "usageUnits", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "networkGroupIds", + "ssidIds", + "ssidNames", + "gatewayNetworkIds", + ] + 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"getOrganizationWirelessClientsUsageByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessClientsUsageBySsid(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Returns client usage details for SSIDs within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-usage-by-ssid + + - 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 + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 1 hour and be less than or equal to 7 days. The default is 2 hours. + - ssidNames (array): Filter results by a list of SSID names. + - networkIds (array): Limit the results to clients that belong to one of the provided networks. + - networkGroupIds (array): Limit the results to clients that belong to one of the provided network groups. + - gatewayNetworkIds (array): Limit the results to clients tunneled to campus gateways in the provided networks. + - usageUnits (string): Usage units to use in the response. + """ + + kwargs.update(locals()) + + if "usageUnits" in kwargs: + options = ["GB", "KB", "MB", "TB"] + assert kwargs["usageUnits"] in options, ( + f'''"usageUnits" cannot be "{kwargs["usageUnits"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "monitor", "clients", "usage", "bySsid"], + "operation": "getOrganizationWirelessClientsUsageBySsid", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/usage/bySsid" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "ssidNames", + "networkIds", + "networkGroupIds", + "gatewayNetworkIds", + "usageUnits", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "ssidNames", + "networkIds", + "networkGroupIds", + "gatewayNetworkIds", + ] + 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"getOrganizationWirelessClientsUsageBySsid: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesAccelerometerStatuses( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the most recent AP accelerometer status information for wireless devices that support it.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-accelerometer-statuses + + - 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 + - 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. + - networkIds (array): A list of Meraki network IDs to filter results to contain only specified networks. E.g.: networkIds[]=N_12345678&networkIds[]=L_3456 + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "accelerometer", "statuses"], + "operation": "getOrganizationWirelessDevicesAccelerometerStatuses", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/accelerometer/statuses" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationWirelessDevicesAccelerometerStatuses: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesChannelUtilizationByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get average channel utilization for all bands in a network, split by AP** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-by-device + + - 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): Filter results by network. + - serials (array): Filter results by device. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "channelUtilization", "byDevice"], + "operation": "getOrganizationWirelessDevicesChannelUtilizationByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/byDevice" + + query_params = [ + "networkIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesChannelUtilizationByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesChannelUtilizationByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get average channel utilization across all bands for all networks in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-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): Filter results by network. + - serials (array): Filter results by device. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "channelUtilization", "byNetwork"], + "operation": "getOrganizationWirelessDevicesChannelUtilizationByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/byNetwork" + + query_params = [ + "networkIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesChannelUtilizationByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get a time-series of average channel utilization for all bands, segmented by device.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-history-by-device-by-interval + + - 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): Filter results by network. + - serials (array): Filter results by device. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 7 days. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "channelUtilization", "history", "byDevice", "byInterval"], + "operation": "getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/history/byDevice/byInterval" + + query_params = [ + "networkIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get a time-series of average channel utilization for all bands** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-history-by-network-by-interval + + - 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): Filter results by network. + - serials (array): Filter results by device. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 7 days. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "channelUtilization", "history", "byNetwork", "byInterval"], + "operation": "getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/history/byNetwork/byInterval" + + query_params = [ + "networkIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesDataRateByClient(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get average uplink and downlink datarates for all clients in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-data-rate-by-client + + - 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): Filter results by network. + - serials (array): Filter results by device serial number. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - macs (array): Filter results by client mac address(es). + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "dataRate", "byClient"], + "operation": "getOrganizationWirelessDevicesDataRateByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/dataRate/byClient" + + query_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "macs", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "macs", + ] + 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"getOrganizationWirelessDevicesDataRateByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesEthernetStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the most recent Ethernet link speed, duplex, aggregation and power mode and status information for wireless devices.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-ethernet-statuses + + - 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 + - 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. + - networkIds (array): A list of Meraki network IDs to filter results to contain only specified networks. E.g.: networkIds[]=N_12345678&networkIds[]=L_3456 + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "ethernet", "statuses"], + "operation": "getOrganizationWirelessDevicesEthernetStatuses", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/ethernet/statuses" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationWirelessDevicesEthernetStatuses: 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.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-latency-by-client + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. + - networkIds (array): Filter results by network. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - ssids (array): Filter results by SSID number. + - macs (array): Filter results by client mac address(es). + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "latency", "byClient"], + "operation": "getOrganizationWirelessDevicesLatencyByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/latency/byClient" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "bands", + "ssids", + "macs", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "bands", + "ssids", + "macs", + ] + 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"getOrganizationWirelessDevicesLatencyByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesLatencyByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get latency summaries for all wireless devices in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-latency-by-device + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - ssids (array): Filter results by SSID number. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "latency", "byDevice"], + "operation": "getOrganizationWirelessDevicesLatencyByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/latency/byDevice" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "serials", + "bands", + "ssids", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "bands", + "ssids", + ] + 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"getOrganizationWirelessDevicesLatencyByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesLatencyByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get per-network latency summaries for all wireless networks in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-latency-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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - ssids (array): Filter results by SSID number. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "latency", "byNetwork"], + "operation": "getOrganizationWirelessDevicesLatencyByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/latency/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "serials", + "bands", + "ssids", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "bands", + "ssids", + ] + 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"getOrganizationWirelessDevicesLatencyByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationWirelessDevicesLiveToolsClientDisconnect(self, organizationId: str, clientId: str, **kwargs): + """ + **Enqueue a job to disconnect a client from an AP** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-devices-live-tools-client-disconnect + + - organizationId (string): Organization ID + - clientId (string): Client ID + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "liveTools", "devices", "clients", "disconnect"], + "operation": "createOrganizationWirelessDevicesLiveToolsClientDisconnect", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + clientId = urllib.parse.quote(str(clientId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/liveTools/clients/{clientId}/disconnect" + + body_params = [ + "callback", + ] + 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"createOrganizationWirelessDevicesLiveToolsClientDisconnect: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationWirelessDevicesPacketLossByClient(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get average packet loss for the given timespan for all clients in the organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-packet-loss-by-client + + - 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): Filter results by network. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - macs (array): Filter results by client mac address(es). + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 90 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "packetLoss", "byClient"], + "operation": "getOrganizationWirelessDevicesPacketLossByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/packetLoss/byClient" + + query_params = [ + "networkIds", + "ssids", + "bands", + "macs", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "ssids", + "bands", + "macs", + ] + 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"getOrganizationWirelessDevicesPacketLossByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesPacketLossByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get average packet loss for the given timespan for all devices in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-packet-loss-by-device + + - 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): Filter results by network. + - serials (array): Filter results by device. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 90 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "packetLoss", "byDevice"], + "operation": "getOrganizationWirelessDevicesPacketLossByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/packetLoss/byDevice" + + query_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssids", + "bands", + ] + 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"getOrganizationWirelessDevicesPacketLossByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesPacketLossByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get average packet loss for the given timespan for all networks in the organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-packet-loss-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): Filter results by network. + - serials (array): Filter results by device. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 90 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "packetLoss", "byNetwork"], + "operation": "getOrganizationWirelessDevicesPacketLossByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/packetLoss/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssids", + "bands", + ] + 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"getOrganizationWirelessDevicesPacketLossByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesPowerModeHistory(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return a record of power mode changes for wireless devices in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-power-mode-history + + - 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 + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 1 day from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 1 day after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 1 day. The default is 1 day. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - 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. + - networkIds (array): Optional parameter to filter the result set by the included set of network IDs + - serials (array): Optional parameter to filter device availabilities history by device serial numbers + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "power", "mode", "history"], + "operation": "getOrganizationWirelessDevicesPowerModeHistory", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/power/mode/history" + + query_params = [ + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesPowerModeHistory: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesProvisioningDeployments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the zero touch deployments for wireless access points in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-provisioning-deployments + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 20. + - 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. + - search (string): Filter by MAC address, serial number, new device name, old device name, or model. + - sortBy (string): Field used to sort results. Default is 'status'. - sortOrder (string): Sort order. Default is 'asc'. - deploymentType (string): Filter deployments by type. """ kwargs.update(locals()) - if "sortBy" in kwargs: - options = ["afterAction", "createdAt", "deploymentId", "name", "status"] - assert kwargs["sortBy"] in options, ( - f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' - ) - if "sortOrder" in kwargs: - options = ["asc", "desc"] - assert kwargs["sortOrder"] in options, ( - f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' - ) - if "deploymentType" in kwargs: - options = ["deploy", "replace"] - assert kwargs["deploymentType"] in options, ( - f'''"deploymentType" cannot be "{kwargs["deploymentType"]}", & must be set to one of: {options}''' - ) + if "sortBy" in kwargs: + options = ["afterAction", "createdAt", "deploymentId", "name", "status"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + if "deploymentType" in kwargs: + options = ["deploy", "replace"] + assert kwargs["deploymentType"] in options, ( + f'''"deploymentType" cannot be "{kwargs["deploymentType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], + "operation": "getOrganizationWirelessDevicesProvisioningDeployments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "search", + "sortBy", + "sortOrder", + "deploymentType", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationWirelessDevicesProvisioningDeployments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationWirelessDevicesProvisioningDeployment(self, organizationId: str, items: list, **kwargs): + """ + **Create a zero touch deployment for a wireless access point** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-devices-provisioning-deployment + + - organizationId (string): Organization ID + - items (array): List of zero touch deployments to create + - meta (object): Metadata relevant to the paginated dataset + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], + "operation": "createOrganizationWirelessDevicesProvisioningDeployment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments" + + body_params = [ + "items", + "meta", + ] + 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"createOrganizationWirelessDevicesProvisioningDeployment: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationWirelessDevicesProvisioningDeployments(self, organizationId: str, items: list, **kwargs): + """ + **Update a zero touch deployment** + https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-devices-provisioning-deployments + + - organizationId (string): Organization ID + - items (array): List of zero touch deployments to create + - meta (object): Metadata relevant to the paginated dataset + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], + "operation": "updateOrganizationWirelessDevicesProvisioningDeployments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments" + + body_params = [ + "items", + "meta", + ] + 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"updateOrganizationWirelessDevicesProvisioningDeployments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def getOrganizationWirelessDevicesProvisioningDeploymentsByNewDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns deployment IDs for the given new node serial numbers** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-provisioning-deployments-by-new-device + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 80. + - 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. + - serials (array): Array of new device serial numbers to query + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "provisioning", "deployments", "byNewDevice"], + "operation": "getOrganizationWirelessDevicesProvisioningDeploymentsByNewDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments/byNewDevice" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationWirelessDevicesProvisioningDeploymentsByNewDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def deleteOrganizationWirelessDevicesProvisioningDeployment(self, organizationId: str, deploymentId: str): + """ + **Delete a zero touch deployment** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-devices-provisioning-deployment + + - organizationId (string): Organization ID + - deploymentId (string): Deployment ID + """ + + metadata = { + "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], + "operation": "deleteOrganizationWirelessDevicesProvisioningDeployment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + deploymentId = urllib.parse.quote(str(deploymentId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments/{deploymentId}" + + return self._session.delete(metadata, resource) + + def getOrganizationWirelessDevicesProvisioningRecommendationsTags(self, organizationId: str, **kwargs): + """ + **List the recommended device tags for zero touch deployments available for the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-provisioning-recommendations-tags + + - organizationId (string): Organization ID + - networkIds (array): The list of networks to use as hints for device tags recommendations. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "provisioning", "recommendations", "tags"], + "operation": "getOrganizationWirelessDevicesProvisioningRecommendationsTags", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/provisioning/recommendations/tags" + + query_params = [ + "networkIds", + ] + 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"getOrganizationWirelessDevicesProvisioningRecommendationsTags: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessDevicesRadsecCertificatesAuthorities(self, organizationId: str, **kwargs): + """ + **Query for details on the organization's RADSEC device Certificate Authority certificates (CAs)** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-radsec-certificates-authorities + + - organizationId (string): Organization ID + - certificateAuthorityIds (array): Optional parameter to filter CAs by one or more CA IDs. All returned CAs will have an ID that is an exact match. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities"], + "operation": "getOrganizationWirelessDevicesRadsecCertificatesAuthorities", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities" + + query_params = [ + "certificateAuthorityIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "certificateAuthorityIds", + ] + 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"getOrganizationWirelessDevicesRadsecCertificatesAuthorities: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def updateOrganizationWirelessDevicesRadsecCertificatesAuthorities(self, organizationId: str, **kwargs): + """ + **Update an organization's RADSEC device Certificate Authority (CA) state** + https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-devices-radsec-certificates-authorities + + - organizationId (string): Organization ID + - status (string): The "status" to update the Certificate Authority to. Only valid option is "trusted". + - certificateAuthorityId (string): The ID of the Certificate Authority to update. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities"], + "operation": "updateOrganizationWirelessDevicesRadsecCertificatesAuthorities", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities" + + body_params = [ + "status", + "certificateAuthorityId", + ] + 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"updateOrganizationWirelessDevicesRadsecCertificatesAuthorities: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def createOrganizationWirelessDevicesRadsecCertificatesAuthority(self, organizationId: str): + """ + **Create an organization's RADSEC device Certificate Authority (CA)** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-devices-radsec-certificates-authority + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities"], + "operation": "createOrganizationWirelessDevicesRadsecCertificatesAuthority", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities" + + return self._session.post(metadata, resource) + + def getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls(self, organizationId: str, **kwargs): + """ + **Query for certificate revocation list (CRL) for the organization's RADSEC device Certificate Authorities (CAs).** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-radsec-certificates-authorities-crls + + - organizationId (string): Organization ID + - certificateAuthorityIds (array): Optional parameter to filter CAs by one or more CA IDs. All returned CAs will have an ID that is an exact match. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities", "crls"], + "operation": "getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities/crls" + + query_params = [ + "certificateAuthorityIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "certificateAuthorityIds", + ] + 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"getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas(self, organizationId: str, **kwargs): + """ + **Query for all delta certificate revocation list (CRL) for the organization's RADSEC device Certificate Authority (CA) with the given id.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-radsec-certificates-authorities-crls-deltas + + - organizationId (string): Organization ID + - certificateAuthorityIds (array): Parameter to filter CAs by one or more CA IDs. All returned CAs will have an ID that is an exact match. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities", "crls", "deltas"], + "operation": "getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities/crls/deltas" + + query_params = [ + "certificateAuthorityIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "certificateAuthorityIds", + ] + 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"getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessDevicesSignalQualityByClient( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get average signal quality for all clients in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-signal-quality-by-client + + - 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): Filter results by network. + - serials (array): Filter results by device serial number. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - macs (array): Filter results by client mac address(es). + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "signalQuality", "byClient"], + "operation": "getOrganizationWirelessDevicesSignalQualityByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/signalQuality/byClient" + + query_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "macs", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "macs", + ] + 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"getOrganizationWirelessDevicesSignalQualityByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesSignalQualityByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get average signal quality for all devices in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-signal-quality-by-device + + - 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): Filter results by network. + - serials (array): Filter results by device serial number. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "signalQuality", "byDevice"], + "operation": "getOrganizationWirelessDevicesSignalQualityByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/signalQuality/byDevice" + + query_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssids", + "bands", + ] + 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"getOrganizationWirelessDevicesSignalQualityByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesSignalQualityByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get average signal quality for all networks in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-signal-quality-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): Filter results by network. + - serials (array): Filter results by device serial number. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "signalQuality", "byNetwork"], + "operation": "getOrganizationWirelessDevicesSignalQualityByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/signalQuality/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssids", + "bands", + ] + 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"getOrganizationWirelessDevicesSignalQualityByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesSystemCpuLoadHistory( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Return the CPU Load history for a list of wireless devices in the organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-system-cpu-load-history + + - 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 + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 1 day from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 1 day after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 1 day. The default is 1 day. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - 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. + - networkIds (array): Optional parameter to filter the result set by the included set of network IDs + - serials (array): Optional parameter to filter device availabilities history by device serial numbers + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "system", "cpu", "load", "history"], + "operation": "getOrganizationWirelessDevicesSystemCpuLoadHistory", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/system/cpu/load/history" + + query_params = [ + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesSystemCpuLoadHistory: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesTelemetry(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the wireless device telemetry of an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-telemetry + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 200. 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 3 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 minutes after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 30 minutes. The default is 30 minutes. + - networkIds (array): Optional parameter to filter results by network. + - serials (array): Optional parameter to filter results by device serial. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "telemetry"], + "operation": "getOrganizationWirelessDevicesTelemetry", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/telemetry" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesTelemetry: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesWirelessControllersByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List of Catalyst access points information** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-wireless-controllers-by-device + + - 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 access points by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter access points by its cloud ID. This filter uses multiple exact matches. + - controllerSerials (array): Optional parameter to filter access points by its wireless LAN controller cloud ID. This filter uses multiple exact matches. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "wirelessControllers", "byDevice"], + "operation": "getOrganizationWirelessDevicesWirelessControllersByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/wirelessControllers/byDevice" + + query_params = [ + "networkIds", + "serials", + "controllerSerials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "controllerSerials", + ] + 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"getOrganizationWirelessDevicesWirelessControllersByDevice: 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** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-location-scanning-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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 250. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter scanning settings by network ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "location", "scanning", "byNetwork"], + "operation": "getOrganizationWirelessLocationScanningByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/location/scanning/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationWirelessLocationScanningByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessLocationScanningReceivers(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return scanning API receivers** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-location-scanning-receivers + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 250. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter scanning API receivers by network ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "location", "scanning", "receivers"], + "operation": "getOrganizationWirelessLocationScanningReceivers", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationWirelessLocationScanningReceivers: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationWirelessLocationScanningReceiver( + self, organizationId: str, network: dict, url: str, version: str, radio: dict, sharedSecret: str, **kwargs + ): + """ + **Add new receiver for scanning API** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-location-scanning-receiver + + - organizationId (string): Organization ID + - network (object): Add scanning API receiver for network + - url (string): Receiver Url + - version (string): Scanning API Version + - radio (object): Add scanning API Radio + - sharedSecret (string): Secret Value for Receiver + """ + + kwargs = locals() + + metadata = { + "tags": ["wireless", "configure", "location", "scanning", "receivers"], + "operation": "createOrganizationWirelessLocationScanningReceiver", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers" + + body_params = [ + "network", + "url", + "version", + "radio", + "sharedSecret", + ] + 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"createOrganizationWirelessLocationScanningReceiver: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationWirelessLocationScanningReceiver(self, organizationId: str, receiverId: str, **kwargs): + """ + **Change scanning API receiver settings** + https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-location-scanning-receiver + + - organizationId (string): Organization ID + - receiverId (string): Receiver ID + - url (string): Receiver Url + - version (string): Scanning API Version + - radio (object): Add scanning API Radio + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "location", "scanning", "receivers"], + "operation": "updateOrganizationWirelessLocationScanningReceiver", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + receiverId = urllib.parse.quote(str(receiverId), safe="") + resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers/{receiverId}" + + body_params = [ + "url", + "version", + "radio", + ] + 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"updateOrganizationWirelessLocationScanningReceiver: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationWirelessLocationScanningReceiver(self, organizationId: str, receiverId: str): + """ + **Delete a scanning API receiver** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-location-scanning-receiver + + - organizationId (string): Organization ID + - receiverId (string): Receiver ID + """ + + metadata = { + "tags": ["wireless", "configure", "location", "scanning", "receivers"], + "operation": "deleteOrganizationWirelessLocationScanningReceiver", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + receiverId = urllib.parse.quote(str(receiverId), safe="") + resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers/{receiverId}" + + return self._session.delete(metadata, resource) + + def getOrganizationWirelessLocationWayfindingByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Return Client wayfinding settings** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-location-wayfinding-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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter wayfinding settings by network ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "location", "wayfinding", "byNetwork"], + "operation": "getOrganizationWirelessLocationWayfindingByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/location/wayfinding/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationWirelessLocationWayfindingByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessMqttSettings(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return MQTT Settings for networks** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-mqtt-settings + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 250. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter mqtt settings by network ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "mqtt", "settings"], + "operation": "getOrganizationWirelessMqttSettings", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/mqtt/settings" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationWirelessMqttSettings: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def updateOrganizationWirelessMqttSettings(self, organizationId: str, network: dict, mqtt: dict, **kwargs): + """ + **Add new broker config for wireless MQTT** + https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-mqtt-settings + + - organizationId (string): Organization ID + - network (object): Add MQTT Settings for network + - mqtt (object): MQTT Settings for network + - ble (object): MQTT BLE Settings for network + - wifi (object): MQTT Wi-Fi Settings for network + """ + + kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], - "operation": "getOrganizationWirelessDevicesProvisioningDeployments", + "tags": ["wireless", "configure", "mqtt", "settings"], + "operation": "updateOrganizationWirelessMqttSettings", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments" + resource = f"/organizations/{organizationId}/wireless/mqtt/settings" + + body_params = [ + "network", + "mqtt", + "ble", + "wifi", + ] + 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"updateOrganizationWirelessMqttSettings: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def byOrganizationWirelessOpportunisticPcapLicenseNetwork(self, organizationId: str, **kwargs): + """ + **Check the Opportunistic Pcap license status of an organization by network** + https://developer.cisco.com/meraki/api-v1/#!by-organization-wireless-opportunistic-pcap-license-network + + - organizationId (string): Organization ID + - networkIds (array): Optional parameter to filter results by network. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "opportunisticPcap", "license"], + "operation": "byOrganizationWirelessOpportunisticPcapLicenseNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/opportunisticPcap/license/byNetwork" + + query_params = [ + "networkIds", + ] + 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"byOrganizationWirelessOpportunisticPcapLicenseNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessRadioAfcPositionByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the AFC power limits of an organization by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-afc-position-by-device + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter device's AFC position by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter device's AFC position by device serial numbers. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "afc", "position", "byDevice"], + "operation": "getOrganizationWirelessRadioAfcPositionByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/radio/afc/position/byDevice" query_params = [ "perPage", "startingAfter", "endingBefore", - "search", - "sortBy", - "sortOrder", - "deploymentType", + "networkIds", + "serials", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + array_params = [ + "networkIds", + "serials", + ] + 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 + 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"getOrganizationWirelessDevicesProvisioningDeployments: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRadioAfcPositionByDevice: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def createOrganizationWirelessDevicesProvisioningDeployment(self, organizationId: str, items: list, **kwargs): + def getOrganizationWirelessRadioAfcPowerLimitsByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Create a zero touch deployment for a wireless access point** - https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-devices-provisioning-deployment + **List the AFC power limits of an organization by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-afc-power-limits-by-device - organizationId (string): Organization ID - - items (array): List of zero touch deployments to create - - meta (object): Metadata relevant to the paginated dataset + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter device's AFC power limits by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter device's AFC power limits by device serial numbers. This filter uses multiple exact matches. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], - "operation": "createOrganizationWirelessDevicesProvisioningDeployment", + "tags": ["wireless", "configure", "radio", "afc", "powerLimits", "byDevice"], + "operation": "getOrganizationWirelessRadioAfcPowerLimitsByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments" + resource = f"/organizations/{organizationId}/wireless/radio/afc/powerLimits/byDevice" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessRadioAfcPowerLimitsByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessRadioAutoRfByNetwork(self, organizationId: str, **kwargs): + """ + **List the AutoRF settings of an organization by network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-auto-rf-by-network + + - organizationId (string): Organization ID + - networkIds (array): Optional parameter to filter results by network. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "autoRf", "byNetwork"], + "operation": "getOrganizationWirelessRadioAutoRfByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/radio/autoRf/byNetwork" + + query_params = [ + "networkIds", + ] + 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"getOrganizationWirelessRadioAutoRfByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessRadioAutoRfChannelsPlanningActivities(self, organizationId: str, **kwargs): + """ + **List the channel planning activities of an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-auto-rf-channels-planning-activities + + - organizationId (string): Organization ID + - networkIds (array): Optional parameter to filter results by network. + - deviceSerials (array): Optional parameter to filter results by device serial. + - bands (array): Optional parameter to filter results by bands. Valid bands are 2.4, 5, and 6. + - channels (array): Optional parameter to filter results by channels. + - serials (array): Serial number of the devices for which information should be gathered. + - gFloorplanId (string): Geoaligned floorplan ID nodes for which information is gathered belong to. + - tags (array): Optional parameter to filter results by node tags. + - models (array): Optional parameter to filter results by access point models. + - rfProfiles (array): Optional parameter to filter results by RF Profiles. + - minimumRfHealthScore (integer): Minimum RF Health score for an AP to be retrieved. + - maximumRfHealthScore (integer): Maximum RF Health score for an AP to be retrieved. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "autoRf", "channels", "planning", "activities"], + "operation": "getOrganizationWirelessRadioAutoRfChannelsPlanningActivities", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/radio/autoRf/channels/planning/activities" + + query_params = [ + "networkIds", + "deviceSerials", + "bands", + "channels", + "serials", + "gFloorplanId", + "tags", + "models", + "rfProfiles", + "minimumRfHealthScore", + "maximumRfHealthScore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - body_params = [ - "items", - "meta", + array_params = [ + "networkIds", + "deviceSerials", + "bands", + "channels", + "serials", + "tags", + "models", + "rfProfiles", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + 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 = [] + body_params + 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"createOrganizationWirelessDevicesProvisioningDeployment: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRadioAutoRfChannelsPlanningActivities: ignoring unrecognized kwargs: {invalid}" ) - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def updateOrganizationWirelessDevicesProvisioningDeployments(self, organizationId: str, items: list, **kwargs): + def recalculateOrganizationWirelessRadioAutoRfChannels(self, organizationId: str, networkIds: list, **kwargs): """ - **Update a zero touch deployment** - https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-devices-provisioning-deployments + **Recalculates automatically assigned channels for every AP within specified the specified network(s)** + https://developer.cisco.com/meraki/api-v1/#!recalculate-organization-wireless-radio-auto-rf-channels - organizationId (string): Organization ID - - items (array): List of zero touch deployments to create - - meta (object): Metadata relevant to the paginated dataset + - networkIds (array): A list of network ids (limit: 15). """ - kwargs.update(locals()) + kwargs = locals() metadata = { - "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], - "operation": "updateOrganizationWirelessDevicesProvisioningDeployments", + "tags": ["wireless", "configure", "radio", "autoRf", "channels"], + "operation": "recalculateOrganizationWirelessRadioAutoRfChannels", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments" + resource = f"/organizations/{organizationId}/wireless/radio/autoRf/channels/recalculate" body_params = [ - "items", - "meta", + "networkIds", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -4211,55 +9928,47 @@ def updateOrganizationWirelessDevicesProvisioningDeployments(self, organizationI 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"updateOrganizationWirelessDevicesProvisioningDeployments: ignoring unrecognized kwargs: {invalid}" + f"recalculateOrganizationWirelessRadioAutoRfChannels: ignoring unrecognized kwargs: {invalid}" ) - return self._session.put(metadata, resource, payload) - - def deleteOrganizationWirelessDevicesProvisioningDeployment(self, organizationId: str, deploymentId: str): - """ - **Delete a zero touch deployment** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-devices-provisioning-deployment - - - organizationId (string): Organization ID - - deploymentId (string): Deployment ID - """ - - metadata = { - "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], - "operation": "deleteOrganizationWirelessDevicesProvisioningDeployment", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - deploymentId = urllib.parse.quote(str(deploymentId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments/{deploymentId}" - - return self._session.delete(metadata, resource) + return self._session.post(metadata, resource, payload) - def getOrganizationWirelessDevicesRadsecCertificatesAuthorities(self, organizationId: str, **kwargs): + def getOrganizationWirelessRadioOverridesByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Query for details on the organization's RADSEC device Certificate Authority certificates (CAs)** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-radsec-certificates-authorities + **Return a list of radio overrides** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-overrides-by-device - organizationId (string): Organization ID - - certificateAuthorityIds (array): Optional parameter to filter CAs by one or more CA IDs. All returned CAs will have an ID that is an exact match. + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. 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. + - networkIds (array): A list of network IDs. The returned radio overrides will be filtered to only include these networks. + - serials (array): A list of serial numbers. The returned radio overrides will be filtered to only include these serials. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities"], - "operation": "getOrganizationWirelessDevicesRadsecCertificatesAuthorities", + "tags": ["wireless", "configure", "radio", "overrides", "byDevice"], + "operation": "getOrganizationWirelessRadioOverridesByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities" + resource = f"/organizations/{organizationId}/wireless/radio/overrides/byDevice" query_params = [ - "certificateAuthorityIds", + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "certificateAuthorityIds", + "networkIds", + "serials", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4271,88 +9980,132 @@ def getOrganizationWirelessDevicesRadsecCertificatesAuthorities(self, organizati 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"getOrganizationWirelessDevicesRadsecCertificatesAuthorities: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRadioOverridesByDevice: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get(metadata, resource, params) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def updateOrganizationWirelessDevicesRadsecCertificatesAuthorities(self, organizationId: str, **kwargs): + def byOrganizationWirelessRadioRfHealthNeighborsRssiDevice(self, organizationId: str, **kwargs): """ - **Update an organization's RADSEC device Certificate Authority (CA) state** - https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-devices-radsec-certificates-authorities + **Show the by-device neighbor rssi information for the organization in the given interval** + https://developer.cisco.com/meraki/api-v1/#!by-organization-wireless-radio-rf-health-neighbors-rssi-device - organizationId (string): Organization ID - - status (string): The "status" to update the Certificate Authority to. Only valid option is "trusted". - - certificateAuthorityId (string): The ID of the Certificate Authority to update. + - networkIds (array): Networks for which information should be gathered. + - bands (array): Bands for which information should be gathered. Valid bands are 2.4, 5, and 6. + - channels (array): Channel for which information should be gathered. + - serials (array): Serial number of the devices for which information should be gathered. + - tags (array): Access Point tags for which information should be gathered. + - models (array): Access Point models for which information should be gathered. + - rfProfiles (array): Rf Profiles for which information should be gathered. + - gFloorplanId (string): Geoaligned floorplan ID nodes for which information is gathered belong to. + - minimumNeighborRssi (integer): Minimum Neighbor RSSI score for a neighbor entry to be retrieved. + - maximumNeighborRssi (integer): Maximum Neighbor RSSI score for a neighbor entry to be retrieved. + - minimumRfHealthScore (integer): Minimum RF Health score for an AP to be retrieved. + - maximumRfHealthScore (integer): Maximum RF Health score for an AP to be retrieved. + - rfScoreInterval (integer): Size of the rf score interval in seconds. + - rfScoreRetryOnEmpty (boolean): If true, the query will be retried further back if no data is present in the latest rf score interval. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities"], - "operation": "updateOrganizationWirelessDevicesRadsecCertificatesAuthorities", + "tags": ["wireless", "configure", "radio", "rfHealth", "neighbors", "rssi"], + "operation": "byOrganizationWirelessRadioRfHealthNeighborsRssiDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities" + resource = f"/organizations/{organizationId}/wireless/radio/rfHealth/neighbors/rssi/byDevice" - body_params = [ - "status", - "certificateAuthorityId", + query_params = [ + "networkIds", + "bands", + "channels", + "serials", + "tags", + "models", + "rfProfiles", + "gFloorplanId", + "minimumNeighborRssi", + "maximumNeighborRssi", + "minimumRfHealthScore", + "maximumRfHealthScore", + "rfScoreInterval", + "rfScoreRetryOnEmpty", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "bands", + "channels", + "serials", + "tags", + "models", + "rfProfiles", + ] + 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 = [] + body_params + 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"updateOrganizationWirelessDevicesRadsecCertificatesAuthorities: ignoring unrecognized kwargs: {invalid}" + f"byOrganizationWirelessRadioRfHealthNeighborsRssiDevice: ignoring unrecognized kwargs: {invalid}" ) - return self._session.put(metadata, resource, payload) - - def createOrganizationWirelessDevicesRadsecCertificatesAuthority(self, organizationId: str): - """ - **Create an organization's RADSEC device Certificate Authority (CA)** - https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-devices-radsec-certificates-authority - - - organizationId (string): Organization ID - """ - - metadata = { - "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities"], - "operation": "createOrganizationWirelessDevicesRadsecCertificatesAuthority", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities" - - return self._session.post(metadata, resource) + return self._session.get(metadata, resource, params) - def getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls(self, organizationId: str, **kwargs): + def getOrganizationWirelessRadioRfHealthOverviewByNetworkByInterval(self, organizationId: str, **kwargs): """ - **Query for certificate revocation list (CRL) for the organization's RADSEC device Certificate Authorities (CAs).** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-radsec-certificates-authorities-crls + **Show the by-network RF Health score overview information for the organization in the given interval** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-rf-health-overview-by-network-by-interval - organizationId (string): Organization ID - - certificateAuthorityIds (array): Optional parameter to filter CAs by one or more CA IDs. All returned CAs will have an ID that is an exact match. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 182 days, 14 hours, 54 minutes, and 36 seconds from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days, 10 hours, 29 minutes, and 6 seconds after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days, 10 hours, 29 minutes, and 6 seconds. The default is 14 days. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 7200, 86400. The default is 7200. Interval is calculated if time params are provided. + - networkIds (array): Networks for which information should be gathered. + - bands (array): Bands for which information should be gathered. Valid bands are 2.4, 5, and 6. + - minimumRfHealthScore (integer): Minimum RF Health score for a network to be retrieved. + - maximumRfHealthScore (integer): Maximum RF Health score for a network to be retrieved. + - minimumHighCciPercentage (integer): Minimum percentage of radios with high CCI for a network to be retrieved. + - maximumHighCciPercentage (integer): Maximum percentage of radios with high CCI for a network to be retrieved. + - minimumChannelChanges (integer): Minimum number of channel changes for a network to be retrieved. + - maximumChannelChanges (integer): Maximum number of channel changes for a network to be retrieved. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities", "crls"], - "operation": "getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls", + "tags": ["wireless", "configure", "radio", "rfHealth", "overview", "byNetwork", "byInterval"], + "operation": "getOrganizationWirelessRadioRfHealthOverviewByNetworkByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities/crls" + resource = f"/organizations/{organizationId}/wireless/radio/rfHealth/overview/byNetwork/byInterval" query_params = [ - "certificateAuthorityIds", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "bands", + "minimumRfHealthScore", + "maximumRfHealthScore", + "minimumHighCciPercentage", + "maximumHighCciPercentage", + "minimumChannelChanges", + "maximumChannelChanges", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "certificateAuthorityIds", + "networkIds", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4364,36 +10117,52 @@ def getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls(self, organi 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"getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRadioRfHealthOverviewByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" ) return self._session.get(metadata, resource, params) - def getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas(self, organizationId: str, **kwargs): + def getOrganizationWirelessRadioRrmByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Query for all delta certificate revocation list (CRL) for the organization's RADSEC device Certificate Authority (CA) with the given id.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-radsec-certificates-authorities-crls-deltas + **List the AutoRF settings of an organization by network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-rrm-by-network - organizationId (string): Organization ID - - certificateAuthorityIds (array): Parameter to filter CAs by one or more CA IDs. All returned CAs will have an ID that is an exact match. + - 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 results by network. + - startingAfter (string): Retrieving items after this network ID + - endingBefore (string): Retrieving items before this network ID + - perPage (integer): Number of items per page + - sortOrder (string): The sort order of items """ kwargs.update(locals()) + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities", "crls", "deltas"], - "operation": "getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas", + "tags": ["wireless", "configure", "radio", "rrm", "byNetwork"], + "operation": "getOrganizationWirelessRadioRrmByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities/crls/deltas" + resource = f"/organizations/{organizationId}/wireless/radio/rrm/byNetwork" query_params = [ - "certificateAuthorityIds", + "networkIds", + "startingAfter", + "endingBefore", + "perPage", + "sortOrder", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "certificateAuthorityIds", + "networkIds", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4405,47 +10174,31 @@ def getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas(self, 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"getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRadioRrmByNetwork: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get(metadata, resource, params) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesSystemCpuLoadHistory( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def getOrganizationWirelessRadioStatusByNetwork(self, organizationId: str, **kwargs): """ - **Return the CPU Load history for a list of wireless devices in the organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-system-cpu-load-history + **Show the status of this organization's radios, categorized by network and device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-status-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 - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 1 day from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 1 day after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 1 day. The default is 1 day. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. - - 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. - - networkIds (array): Optional parameter to filter the result set by the included set of network IDs - - serials (array): Optional parameter to filter device availabilities history by device serial numbers + - networkIds (array): Networks for which radio status should be returned. + - serials (array): Serials for which radio status should be returned. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "system", "cpu", "load", "history"], - "operation": "getOrganizationWirelessDevicesSystemCpuLoadHistory", + "tags": ["wireless", "configure", "radio", "status", "byNetwork"], + "operation": "getOrganizationWirelessRadioStatusByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/system/cpu/load/history" + resource = f"/organizations/{organizationId}/wireless/radio/status/byNetwork" query_params = [ - "t0", - "t1", - "timespan", - "perPage", - "startingAfter", - "endingBefore", "networkIds", "serials", ] @@ -4465,52 +10218,66 @@ def getOrganizationWirelessDevicesSystemCpuLoadHistory( 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"getOrganizationWirelessDevicesSystemCpuLoadHistory: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRadioStatusByNetwork: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationWirelessDevicesWirelessControllersByDevice( + def getOrganizationWirelessRfProfilesAssignmentsByDevice( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **List of Catalyst access points information** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-wireless-controllers-by-device + **List the RF profiles of an organization by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-rf-profiles-assignments-by-device - 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 access points by network ID. This filter uses multiple exact matches. - - serials (array): Optional parameter to filter access points by its cloud ID. This filter uses multiple exact matches. - - controllerSerials (array): Optional parameter to filter access points by its wireless LAN controller cloud ID. This filter uses multiple exact matches. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 100. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. + - networkIds (array): Optional parameter to filter devices by network. + - productTypes (array): Optional parameter to filter devices by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - name (string): Optional parameter to filter RF profiles by device name. All returned devices will have a name that contains the search term or is an exact match. + - mac (string): Optional parameter to filter RF profiles by device MAC address. All returned devices will have a MAC address that contains the search term or is an exact match. + - serial (string): Optional parameter to filter RF profiles by device serial number. All returned devices will have a serial number that contains the search term or is an exact match. + - model (string): Optional parameter to filter RF profiles by device model. All returned devices will have a model that contains the search term or is an exact match. + - macs (array): Optional parameter to filter RF profiles by one or more device MAC addresses. All returned devices will have a MAC address that is an exact match. + - serials (array): Optional parameter to filter RF profiles by one or more device serial numbers. All returned devices will have a serial number that is an exact match. + - models (array): Optional parameter to filter RF profiles by one or more device models. All returned devices will have a model that is an exact match. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "wirelessControllers", "byDevice"], - "operation": "getOrganizationWirelessDevicesWirelessControllersByDevice", + "tags": ["wireless", "configure", "rfProfiles", "assignments", "byDevice"], + "operation": "getOrganizationWirelessRfProfilesAssignmentsByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/wirelessControllers/byDevice" + resource = f"/organizations/{organizationId}/wireless/rfProfiles/assignments/byDevice" query_params = [ + "perPage", + "startingAfter", + "endingBefore", "networkIds", + "productTypes", + "name", + "mac", + "serial", + "model", + "macs", "serials", - "controllerSerials", - "perPage", - "startingAfter", - "endingBefore", + "models", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", + "productTypes", + "macs", "serials", - "controllerSerials", + "models", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4522,39 +10289,39 @@ def getOrganizationWirelessDevicesWirelessControllersByDevice( 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"getOrganizationWirelessDevicesWirelessControllersByDevice: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRfProfilesAssignmentsByDevice: 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): + def getOrganizationWirelessRoamingByNetworkByInterval(self, organizationId: str, networkIds: list, **kwargs): """ - **Return scanning API settings** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-location-scanning-by-network + **Get all wireless clients' roam events within the specified timespan grouped by network and time interval.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-roaming-by-network-by-interval - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 250. Default is 50. - - 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. - - networkIds (array): Optional parameter to filter scanning settings by network ID. + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 7 days. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 1800, 3600, 7200, 10800, 14400, 18000, 21600, 25200, 28800, 32400, 36000, 39600, 43200, 86400, 604800. The default is 7200. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "location", "scanning", "byNetwork"], - "operation": "getOrganizationWirelessLocationScanningByNetwork", + "tags": ["wireless", "monitor", "roaming", "byNetwork", "byInterval"], + "operation": "getOrganizationWirelessRoamingByNetworkByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/location/scanning/byNetwork" + resource = f"/organizations/{organizationId}/wireless/roaming/byNetwork/byInterval" query_params = [ - "perPage", - "startingAfter", - "endingBefore", "networkIds", + "t0", + "t1", + "timespan", + "interval", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} @@ -4571,44 +10338,49 @@ def getOrganizationWirelessLocationScanningByNetwork(self, organizationId: str, 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"getOrganizationWirelessLocationScanningByNetwork: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRoamingByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationWirelessLocationScanningReceivers(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Return scanning API receivers** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-location-scanning-receivers + **List the L2 isolation allow list MAC entry in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-firewall-isolation-allowlist-entries - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 250. Default is 50. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. - - networkIds (array): Optional parameter to filter scanning API receivers by network ID. + - networkIds (array): networkIds array to filter out results + - ssids (array): ssids number array to filter out results """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "location", "scanning", "receivers"], - "operation": "getOrganizationWirelessLocationScanningReceivers", + "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], + "operation": "getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers" + resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries" query_params = [ "perPage", "startingAfter", "endingBefore", "networkIds", + "ssids", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", + "ssids", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4620,41 +10392,39 @@ def getOrganizationWirelessLocationScanningReceivers(self, organizationId: str, 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"getOrganizationWirelessLocationScanningReceivers: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def createOrganizationWirelessLocationScanningReceiver( - self, organizationId: str, network: dict, url: str, version: str, radio: dict, sharedSecret: str, **kwargs + def createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry( + self, organizationId: str, client: dict, ssid: dict, network: dict, **kwargs ): """ - **Add new receiver for scanning API** - https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-location-scanning-receiver + **Create isolation allow list MAC entry for this organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-ssids-firewall-isolation-allowlist-entry - organizationId (string): Organization ID - - network (object): Add scanning API receiver for network - - url (string): Receiver Url - - version (string): Scanning API Version - - radio (object): Add scanning API Radio - - sharedSecret (string): Secret Value for Receiver + - client (object): The client of allowlist + - ssid (object): The SSID that allowlist belongs to + - network (object): The Network that allowlist belongs to + - description (string): The description of mac address """ - kwargs = locals() + kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "location", "scanning", "receivers"], - "operation": "createOrganizationWirelessLocationScanningReceiver", + "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], + "operation": "createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers" + resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries" body_params = [ + "description", + "client", + "ssid", "network", - "url", - "version", - "radio", - "sharedSecret", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -4663,37 +10433,54 @@ def createOrganizationWirelessLocationScanningReceiver( 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"createOrganizationWirelessLocationScanningReceiver: ignoring unrecognized kwargs: {invalid}" + f"createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry: ignoring unrecognized kwargs: {invalid}" ) return self._session.post(metadata, resource, payload) - def updateOrganizationWirelessLocationScanningReceiver(self, organizationId: str, receiverId: str, **kwargs): + def deleteOrganizationWirelessSsidsFirewallIsolationAllowlistEntry(self, organizationId: str, entryId: str): """ - **Change scanning API receiver settings** - https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-location-scanning-receiver + **Destroy isolation allow list MAC entry for this organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-ssids-firewall-isolation-allowlist-entry - organizationId (string): Organization ID - - receiverId (string): Receiver ID - - url (string): Receiver Url - - version (string): Scanning API Version - - radio (object): Add scanning API Radio + - entryId (string): Entry ID + """ + + metadata = { + "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], + "operation": "deleteOrganizationWirelessSsidsFirewallIsolationAllowlistEntry", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + entryId = urllib.parse.quote(str(entryId), safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries/{entryId}" + + return self._session.delete(metadata, resource) + + def updateOrganizationWirelessSsidsFirewallIsolationAllowlistEntry(self, organizationId: str, entryId: str, **kwargs): + """ + **Update isolation allow list MAC entry info** + https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-ssids-firewall-isolation-allowlist-entry + + - organizationId (string): Organization ID + - entryId (string): Entry ID + - description (string): The description of mac address + - client (object): The client of allowlist """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "location", "scanning", "receivers"], - "operation": "updateOrganizationWirelessLocationScanningReceiver", + "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], + "operation": "updateOrganizationWirelessSsidsFirewallIsolationAllowlistEntry", } organizationId = urllib.parse.quote(str(organizationId), safe="") - receiverId = urllib.parse.quote(str(receiverId), safe="") - resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers/{receiverId}" + entryId = urllib.parse.quote(str(entryId), safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries/{entryId}" body_params = [ - "url", - "version", - "radio", + "description", + "client", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -4702,58 +10489,41 @@ def updateOrganizationWirelessLocationScanningReceiver(self, organizationId: str 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"updateOrganizationWirelessLocationScanningReceiver: ignoring unrecognized kwargs: {invalid}" + f"updateOrganizationWirelessSsidsFirewallIsolationAllowlistEntry: ignoring unrecognized kwargs: {invalid}" ) return self._session.put(metadata, resource, payload) - def deleteOrganizationWirelessLocationScanningReceiver(self, organizationId: str, receiverId: str): - """ - **Delete a scanning API receiver** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-location-scanning-receiver - - - organizationId (string): Organization ID - - receiverId (string): Receiver ID - """ - - metadata = { - "tags": ["wireless", "configure", "location", "scanning", "receivers"], - "operation": "deleteOrganizationWirelessLocationScanningReceiver", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - receiverId = urllib.parse.quote(str(receiverId), safe="") - resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers/{receiverId}" - - return self._session.delete(metadata, resource) - - def getOrganizationWirelessMqttSettings(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationWirelessSsidsOpenRoamingByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Return MQTT Settings for networks** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-mqtt-settings + **Returns an array of objects, each containing SSID OpenRoaming configs for the corresponding network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-open-roaming-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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 250. Default is 50. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. - - networkIds (array): Optional parameter to filter mqtt settings by network ID. + - networkIds (array): Optional parameter to filter OpenRoaming configuration by Network Id. + - includeDisabledSsids (boolean): Optional parameter to include OpenRoaming configuration for disabled ssids. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "mqtt", "settings"], - "operation": "getOrganizationWirelessMqttSettings", + "tags": ["wireless", "configure", "ssids", "openRoaming", "byNetwork"], + "operation": "getOrganizationWirelessSsidsOpenRoamingByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/mqtt/settings" + resource = f"/organizations/{organizationId}/wireless/ssids/openRoaming/byNetwork" query_params = [ "perPage", "startingAfter", "endingBefore", "networkIds", + "includeDisabledSsids", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} @@ -4769,123 +10539,108 @@ def getOrganizationWirelessMqttSettings(self, organizationId: str, total_pages=1 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"getOrganizationWirelessMqttSettings: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationWirelessSsidsOpenRoamingByNetwork: ignoring unrecognized kwargs: {invalid}" + ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def updateOrganizationWirelessMqttSettings(self, organizationId: str, network: dict, mqtt: dict, **kwargs): + def getOrganizationWirelessSsidsPoliciesClientExclusionBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Add new broker config for wireless MQTT** - https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-mqtt-settings + **Returns an array of objects, each containing client exclusion enablement statuses for one SSID** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-policies-client-exclusion-by-ssid - organizationId (string): Organization ID - - network (object): Add MQTT Settings for network - - mqtt (object): MQTT Settings for network - - ble (object): MQTT BLE Settings for network - - wifi (object): MQTT Wi-Fi Settings for network + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter by Network ID. + - includeDisabledSsids (boolean): Optional parameter to include disabled SSID's. + - ssidNumbers (array): Optional parameter to filter by SSID numbers. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "mqtt", "settings"], - "operation": "updateOrganizationWirelessMqttSettings", + "tags": ["wireless", "configure", "ssids", "policies", "clientExclusion", "bySsid"], + "operation": "getOrganizationWirelessSsidsPoliciesClientExclusionBySsid", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/mqtt/settings" + resource = f"/organizations/{organizationId}/wireless/ssids/policies/clientExclusion/bySsid" - body_params = [ - "network", - "mqtt", - "ble", - "wifi", + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "includeDisabledSsids", + "ssidNumbers", ] - 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"updateOrganizationWirelessMqttSettings: ignoring unrecognized kwargs: {invalid}" - ) - - return self._session.put(metadata, resource, payload) - - def recalculateOrganizationWirelessRadioAutoRfChannels(self, organizationId: str, networkIds: list, **kwargs): - """ - **Recalculates automatically assigned channels for every AP within specified the specified network(s)** - https://developer.cisco.com/meraki/api-v1/#!recalculate-organization-wireless-radio-auto-rf-channels - - - organizationId (string): Organization ID - - networkIds (array): A list of network ids (limit: 15). - """ - - kwargs = locals() - - metadata = { - "tags": ["wireless", "configure", "radio", "autoRf", "channels"], - "operation": "recalculateOrganizationWirelessRadioAutoRfChannels", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/radio/autoRf/channels/recalculate" + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - body_params = [ + array_params = [ "networkIds", + "ssidNumbers", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + 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 = [] + body_params + 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"recalculateOrganizationWirelessRadioAutoRfChannels: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessSsidsPoliciesClientExclusionBySsid: ignoring unrecognized kwargs: {invalid}" ) - return self._session.post(metadata, resource, payload) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessRadioRrmByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): - """ - **List the AutoRF settings of an organization by network** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-rrm-by-network + def getOrganizationWirelessSsidsPoliciesClientExclusionStaticExclusionsBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns an array of objects, each containing a list of MAC's excluded from a given SSID** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-policies-client-exclusion-static-exclusions-by-ssid - 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 results by network. - - startingAfter (string): Retrieving items after this network ID - - endingBefore (string): Retrieving items before this network ID - - perPage (integer): Number of items per page - - sortOrder (string): The sort order of items + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter Network ID. + - includeDisabledSsids (boolean): Optional parameter to include disabled SSID's. + - ssidNumbers (array): Optional parameter to filter by SSID numbers. """ kwargs.update(locals()) - if "sortOrder" in kwargs: - options = ["ascending", "descending"] - assert kwargs["sortOrder"] in options, ( - f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["wireless", "configure", "radio", "rrm", "byNetwork"], - "operation": "getOrganizationWirelessRadioRrmByNetwork", + "tags": ["wireless", "configure", "ssids", "policies", "clientExclusion", "static", "exclusions", "bySsid"], + "operation": "getOrganizationWirelessSsidsPoliciesClientExclusionStaticExclusionsBySsid", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/radio/rrm/byNetwork" + resource = f"/organizations/{organizationId}/wireless/ssids/policies/clientExclusion/static/exclusions/bySsid" query_params = [ - "networkIds", + "perPage", "startingAfter", "endingBefore", - "perPage", - "sortOrder", + "networkIds", + "includeDisabledSsids", + "ssidNumbers", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", + "ssidNumbers", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4897,66 +10652,61 @@ def getOrganizationWirelessRadioRrmByNetwork(self, organizationId: str, total_pa 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"getOrganizationWirelessRadioRrmByNetwork: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessSsidsPoliciesClientExclusionStaticExclusionsBySsid: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessRfProfilesAssignmentsByDevice( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def getOrganizationWirelessSsidsProfiles(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the RF profiles of an organization by device** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-rf-profiles-assignments-by-device + **Returns the SSID profiles for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-profiles - 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 + - name (string): (Optional) Filter results by name. Case insensitive substring match. + - sortBy (string): Column to sort results by. Default is `name`. + - sortOrder (string): Direction to sort results by. Default is `asc`. + - profileIds (array): (Optional) Filter results by a list of SSID profile IDs. - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. - - networkIds (array): Optional parameter to filter devices by network. - - productTypes (array): Optional parameter to filter devices by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. - - name (string): Optional parameter to filter RF profiles by device name. All returned devices will have a name that contains the search term or is an exact match. - - mac (string): Optional parameter to filter RF profiles by device MAC address. All returned devices will have a MAC address that contains the search term or is an exact match. - - serial (string): Optional parameter to filter RF profiles by device serial number. All returned devices will have a serial number that contains the search term or is an exact match. - - model (string): Optional parameter to filter RF profiles by device model. All returned devices will have a model that contains the search term or is an exact match. - - macs (array): Optional parameter to filter RF profiles by one or more device MAC addresses. All returned devices will have a MAC address that is an exact match. - - serials (array): Optional parameter to filter RF profiles by one or more device serial numbers. All returned devices will have a serial number that is an exact match. - - models (array): Optional parameter to filter RF profiles by one or more device models. All returned devices will have a model that is an exact match. """ kwargs.update(locals()) + if "sortBy" in kwargs: + options = ["name"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["wireless", "configure", "rfProfiles", "assignments", "byDevice"], - "operation": "getOrganizationWirelessRfProfilesAssignmentsByDevice", + "tags": ["wireless", "configure", "ssids", "profiles"], + "operation": "getOrganizationWirelessSsidsProfiles", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/rfProfiles/assignments/byDevice" + resource = f"/organizations/{organizationId}/wireless/ssids/profiles" query_params = [ + "name", + "sortBy", + "sortOrder", + "profileIds", "perPage", "startingAfter", "endingBefore", - "networkIds", - "productTypes", - "name", - "mac", - "serial", - "model", - "macs", - "serials", - "models", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "networkIds", - "productTypes", - "macs", - "serials", - "models", + "profileIds", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4966,51 +10716,87 @@ def getOrganizationWirelessRfProfilesAssignmentsByDevice( 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"getOrganizationWirelessSsidsProfiles: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationWirelessSsidsProfile(self, organizationId: str, name: str, ssid: dict, **kwargs): + """ + **Create a new SSID profile in an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-ssids-profile + + - organizationId (string): Organization ID + - name (string): Name of the SSID profile + - ssid (object): SSID configuration for the profile + - precedence (object): Precedence configuration for the SSID profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "ssids", "profiles"], + "operation": "createOrganizationWirelessSsidsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/profiles" + + body_params = [ + "name", + "precedence", + "ssid", + ] + 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"getOrganizationWirelessRfProfilesAssignmentsByDevice: ignoring unrecognized kwargs: {invalid}" + f"createOrganizationWirelessSsidsProfile: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.post(metadata, resource, payload) - def getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def getOrganizationWirelessSsidsProfilesAssignments(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the L2 isolation allow list MAC entry in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-firewall-isolation-allowlist-entries + **List the SSID profile assignments in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-profiles-assignments - 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): The network IDs to include in the result set. + - ssidIds (array): The SSID IDs to include in the result set. + - profileIds (array): The SSID profile IDs to include in the result set. - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. - - networkIds (array): networkIds array to filter out results - - ssids (array): ssids number array to filter out results """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], - "operation": "getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries", + "tags": ["wireless", "configure", "ssids", "profiles", "assignments"], + "operation": "getOrganizationWirelessSsidsProfilesAssignments", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries" + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/assignments" query_params = [ + "networkIds", + "ssidIds", + "profileIds", "perPage", "startingAfter", "endingBefore", - "networkIds", - "ssids", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", - "ssids", + "ssidIds", + "profileIds", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -5022,37 +10808,33 @@ def getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries( 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"getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessSsidsProfilesAssignments: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry( - self, organizationId: str, client: dict, ssid: dict, network: dict, **kwargs - ): + def createOrganizationWirelessSsidsProfilesAssignment(self, organizationId: str, profile: dict, ssid: dict, **kwargs): """ - **Create isolation allow list MAC entry for this organization** - https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-ssids-firewall-isolation-allowlist-entry + **Assigns an SSID profile to an SSID in the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-ssids-profiles-assignment - organizationId (string): Organization ID - - client (object): The client of allowlist - - ssid (object): The SSID that allowlist belongs to - - network (object): The Network that allowlist belongs to - - description (string): The description of mac address + - profile (object): SSID profile to assign + - ssid (object): SSID to assign the SSID profile to + - network (object): Network containing the SSID (required if SSID number is used) """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], - "operation": "createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry", + "tags": ["wireless", "configure", "ssids", "profiles", "assignments"], + "operation": "createOrganizationWirelessSsidsProfilesAssignment", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries" + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/assignments" body_params = [ - "description", - "client", + "profile", "ssid", "network", ] @@ -5063,102 +10845,161 @@ def createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry( 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"createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry: ignoring unrecognized kwargs: {invalid}" + f"createOrganizationWirelessSsidsProfilesAssignment: ignoring unrecognized kwargs: {invalid}" ) return self._session.post(metadata, resource, payload) - def deleteOrganizationWirelessSsidsFirewallIsolationAllowlistEntry(self, organizationId: str, entryId: str): + def deleteOrganizationWirelessSsidsProfilesAssignments(self, organizationId: str, ssid: dict, **kwargs): """ - **Destroy isolation allow list MAC entry for this organization** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-ssids-firewall-isolation-allowlist-entry + **Unassigns the SSID profile assigned to an SSID** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-ssids-profiles-assignments - organizationId (string): Organization ID - - entryId (string): Entry ID + - ssid (object): SSID to delete the SSID profile assignment of + - network (object): Network containing the SSID (required if SSID number is used) """ + kwargs.update(locals()) + metadata = { - "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], - "operation": "deleteOrganizationWirelessSsidsFirewallIsolationAllowlistEntry", + "tags": ["wireless", "configure", "ssids", "profiles", "assignments"], + "operation": "deleteOrganizationWirelessSsidsProfilesAssignments", } organizationId = urllib.parse.quote(str(organizationId), safe="") - entryId = urllib.parse.quote(str(entryId), safe="") - resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries/{entryId}" + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/assignments" return self._session.delete(metadata, resource) - def updateOrganizationWirelessSsidsFirewallIsolationAllowlistEntry(self, organizationId: str, entryId: str, **kwargs): + def getOrganizationWirelessSsidsProfilesAssignmentsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Update isolation allow list MAC entry info** - https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-ssids-firewall-isolation-allowlist-entry + **List the SSID profile assignments in an organization, grouped by network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-profiles-assignments-by-network - organizationId (string): Organization ID - - entryId (string): Entry ID - - description (string): The description of mac address - - client (object): The client of allowlist + - 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): The network IDs to include in the result set. + - profileIds (array): The SSID profile IDs to include in the result set. + - networkGroupIds (array): The network group IDs to include in the result set. + - includeAllNetworks (boolean): When set to true, include all networks in the organization, even those without any SSID profile assignments. Defaults to false. + - excludeProfileIds (array): The SSID profile IDs to exclude from the result set. + - sortBy (string): Optional parameter to specify the field used to sort results. (default: network) + - sortOrder (string): Optional parameter to specify the sort order. Default value is asc. + - search (string): Optional parameter to search on network name or network group name. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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()) + if "sortBy" in kwargs: + options = ["group", "network"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], - "operation": "updateOrganizationWirelessSsidsFirewallIsolationAllowlistEntry", + "tags": ["wireless", "configure", "ssids", "profiles", "assignments", "byNetwork"], + "operation": "getOrganizationWirelessSsidsProfilesAssignmentsByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - entryId = urllib.parse.quote(str(entryId), safe="") - resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries/{entryId}" + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/assignments/byNetwork" - body_params = [ - "description", - "client", + query_params = [ + "networkIds", + "profileIds", + "networkGroupIds", + "includeAllNetworks", + "excludeProfileIds", + "sortBy", + "sortOrder", + "search", + "perPage", + "startingAfter", + "endingBefore", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "profileIds", + "networkGroupIds", + "excludeProfileIds", + ] + 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 = [] + body_params + 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"updateOrganizationWirelessSsidsFirewallIsolationAllowlistEntry: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessSsidsProfilesAssignmentsByNetwork: ignoring unrecognized kwargs: {invalid}" ) - return self._session.put(metadata, resource, payload) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessSsidsOpenRoamingByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationWirelessSsidsProfilesOverviews(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Returns an array of objects, each containing SSID OpenRoaming configs for the corresponding network** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-open-roaming-by-network + **Returns the SSID profiles' overview information for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-profiles-overviews - 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 + - name (string): (Optional) Filter results by name. Case insensitive substring match. + - sortBy (string): Column to sort results by. Default is `name`. + - sortOrder (string): Direction to sort results by. Default is `asc`. + - profileIds (array): (Optional) Filter results by a list of SSID profile IDs. - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. - - networkIds (array): Optional parameter to filter OpenRoaming configuration by Network Id. - - includeDisabledSsids (boolean): Optional parameter to include OpenRoaming configuration for disabled ssids. """ kwargs.update(locals()) + if "sortBy" in kwargs: + options = ["name"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["wireless", "configure", "ssids", "openRoaming", "byNetwork"], - "operation": "getOrganizationWirelessSsidsOpenRoamingByNetwork", + "tags": ["wireless", "configure", "ssids", "profiles", "overviews"], + "operation": "getOrganizationWirelessSsidsProfilesOverviews", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/ssids/openRoaming/byNetwork" + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/overviews" query_params = [ + "name", + "sortBy", + "sortOrder", + "profileIds", "perPage", "startingAfter", "endingBefore", - "networkIds", - "includeDisabledSsids", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "networkIds", + "profileIds", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -5170,11 +11011,67 @@ def getOrganizationWirelessSsidsOpenRoamingByNetwork(self, organizationId: str, 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"getOrganizationWirelessSsidsOpenRoamingByNetwork: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessSsidsProfilesOverviews: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) + def updateOrganizationWirelessSsidsProfile(self, organizationId: str, id: str, **kwargs): + """ + **Update this SSID profile** + https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-ssids-profile + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of the SSID profile + - ssid (object): SSID configuration for the profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "ssids", "profiles"], + "operation": "updateOrganizationWirelessSsidsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/{id}" + + body_params = [ + "name", + "ssid", + ] + 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"updateOrganizationWirelessSsidsProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationWirelessSsidsProfile(self, organizationId: str, id: str): + """ + **Delete an SSID profile** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-ssids-profile + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["wireless", "configure", "ssids", "profiles"], + "operation": "deleteOrganizationWirelessSsidsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/{id}" + + return self._session.delete(metadata, resource) + def getOrganizationWirelessSsidsStatusesByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **List status information of all BSSIDs in your organization** diff --git a/meraki/aio/api/wirelessController.py b/meraki/aio/api/wirelessController.py index ee7a75b..e4cb0e4 100644 --- a/meraki/aio/api/wirelessController.py +++ b/meraki/aio/api/wirelessController.py @@ -177,6 +177,59 @@ def getOrganizationWirelessControllerConnections(self, organizationId: str, tota return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessControllerConnectionsUnassigned( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List of unassigned Catalyst access points and summary information** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-controller-connections-unassigned + + - 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 + - controllerSerials (array): Optional parameter to filter access points by wireless LAN controller cloud ID. This filter uses multiple exact matches. + - supported (boolean): Optional parameter to filter access points based on if they are supported for dashboard monitoring. Values can be true/false, if not provided then all unassigned APs will be returned + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wirelessController", "configure", "connections", "unassigned"], + "operation": "getOrganizationWirelessControllerConnectionsUnassigned", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wirelessController/connections/unassigned" + + query_params = [ + "controllerSerials", + "supported", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "controllerSerials", + ] + 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"getOrganizationWirelessControllerConnectionsUnassigned: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessControllerDevicesInterfacesL2ByDevice( self, organizationId: str, total_pages=1, direction="next", **kwargs ): @@ -861,3 +914,36 @@ def getOrganizationWirelessControllerOverviewByDevice( ) return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def generateOrganizationWirelessControllerRegulatoryDomainPackage(self, organizationId: str, **kwargs): + """ + **Generate the regulatory domain package** + https://developer.cisco.com/meraki/api-v1/#!generate-organization-wireless-controller-regulatory-domain-package + + - organizationId (string): Organization ID + - networkIds (array): A list of network IDs to filter by + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wirelessController", "configure", "regulatoryDomain", "package"], + "operation": "generateOrganizationWirelessControllerRegulatoryDomainPackage", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wirelessController/regulatoryDomain/package/generate" + + body_params = [ + "networkIds", + ] + 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"generateOrganizationWirelessControllerRegulatoryDomainPackage: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) diff --git a/meraki/api/administered.py b/meraki/api/administered.py index 5f1be09..4362086 100644 --- a/meraki/api/administered.py +++ b/meraki/api/administered.py @@ -67,3 +67,36 @@ def revokeAdministeredIdentitiesMeApiKeys(self, suffix: str): resource = f"/administered/identities/me/api/keys/{suffix}/revoke" return self._session.post(metadata, resource) + + def getAdministeredSearchLive(self, query: str, organizationId: str, networkId: str, **kwargs): + """ + **List the appropriate results for a given global search utilizing live_search_react** + https://developer.cisco.com/meraki/api-v1/#!get-administered-search-live + + - query (string): Search keywords + - organizationId (string): Id of Organization you want to search with + - networkId (string): Id of NodeGroup you want to seach with + """ + + kwargs = locals() + + metadata = { + "tags": ["administered", "configure", "search", "live"], + "operation": "getAdministeredSearchLive", + } + resource = "/administered/search/live" + + query_params = [ + "query", + "organizationId", + "networkId", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getAdministeredSearchLive: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) diff --git a/meraki/api/appliance.py b/meraki/api/appliance.py index 88d35b2..f20e932 100644 --- a/meraki/api/appliance.py +++ b/meraki/api/appliance.py @@ -23,6 +23,112 @@ def getDeviceApplianceDhcpSubnets(self, serial: str): return self._session.get(metadata, resource) + def createDeviceApplianceInterfacesPortsUpdate(self, serial: str, **kwargs): + """ + **Update configurations for an appliance's specified port** + https://developer.cisco.com/meraki/api-v1/#!create-device-appliance-interfaces-ports-update + + - serial (string): Serial + - interface (object): The interface tuple used to identify the port + - enabled (boolean): Indicates whether the port is enabled + - personality (object): Describes the port's configurability + - uplink (object): The port's settings when in WAN mode + - downlink (object): The port's VLAN settings when in LAN mode + - speed (string): Link speed for the port, in Mbps + - duplex (string): Duplex configuration for the port + """ + + kwargs.update(locals()) + + if "speed" in kwargs and kwargs["speed"] is not None: + options = ["10", "100", "1000", "10000", "2500", "25000", "5000", "auto"] + assert kwargs["speed"] in options, f'''"speed" cannot be "{kwargs["speed"]}", & must be set to one of: {options}''' + if "duplex" in kwargs and kwargs["duplex"] is not None: + options = ["auto", "full", "half"] + assert kwargs["duplex"] in options, ( + f'''"duplex" cannot be "{kwargs["duplex"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["appliance", "configure", "interfaces", "ports", "update"], + "operation": "createDeviceApplianceInterfacesPortsUpdate", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/appliance/interfaces/ports/update" + + body_params = [ + "interface", + "enabled", + "personality", + "uplink", + "downlink", + "speed", + "duplex", + ] + 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"createDeviceApplianceInterfacesPortsUpdate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateDeviceApplianceInterfacesPort(self, serial: str, number: str, **kwargs): + """ + **Update configurations for an appliance's specified port** + https://developer.cisco.com/meraki/api-v1/#!update-device-appliance-interfaces-port + + - serial (string): Serial + - number (string): Number + - enabled (boolean): Indicates whether the port is enabled + - personality (object): Describes the port's configurability + - uplink (object): The port's settings when in WAN mode + - downlink (object): The port's VLAN settings when in LAN mode + - speed (string): Link speed for the port, in Mbps + - duplex (string): Duplex configuration for the port + """ + + kwargs.update(locals()) + + if "speed" in kwargs and kwargs["speed"] is not None: + options = ["10", "100", "1000", "10000", "2500", "25000", "5000", "auto"] + assert kwargs["speed"] in options, f'''"speed" cannot be "{kwargs["speed"]}", & must be set to one of: {options}''' + if "duplex" in kwargs and kwargs["duplex"] is not None: + options = ["auto", "full", "half"] + assert kwargs["duplex"] in options, ( + f'''"duplex" cannot be "{kwargs["duplex"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["appliance", "configure", "interfaces", "ports"], + "operation": "updateDeviceApplianceInterfacesPort", + } + serial = urllib.parse.quote(str(serial), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/devices/{serial}/appliance/interfaces/ports/{number}" + + body_params = [ + "enabled", + "personality", + "uplink", + "downlink", + "speed", + "duplex", + ] + 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"updateDeviceApplianceInterfacesPort: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getDeviceAppliancePerformance(self, serial: str, **kwargs): """ **Return the performance score for a single MX** @@ -1038,6 +1144,93 @@ def updateNetworkApplianceFirewallSettings(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) + def createNetworkApplianceInterfacesL3(self, networkId: str, ipv4: dict, **kwargs): + """ + **Create wired L3 interface** + https://developer.cisco.com/meraki/api-v1/#!create-network-appliance-interfaces-l-3 + + - networkId (string): Network ID + - ipv4 (object): IPv4 configuration + - port (object): Port configuration + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "interfaces", "l3"], + "operation": "createNetworkApplianceInterfacesL3", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/interfaces/l3" + + body_params = [ + "port", + "ipv4", + ] + 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"createNetworkApplianceInterfacesL3: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str, **kwargs): + """ + **Update wired L3 interface** + https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-interfaces-l-3 + + - networkId (string): Network ID + - interfaceId (string): Interface ID + - port (object): Port configuration + - ipv4 (object): IPv4 configuration + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "interfaces", "l3"], + "operation": "updateNetworkApplianceInterfacesL3", + } + networkId = urllib.parse.quote(str(networkId), safe="") + interfaceId = urllib.parse.quote(str(interfaceId), safe="") + resource = f"/networks/{networkId}/appliance/interfaces/l3/{interfaceId}" + + body_params = [ + "port", + "ipv4", + ] + 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"updateNetworkApplianceInterfacesL3: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str): + """ + **Delete wired L3 interface** + https://developer.cisco.com/meraki/api-v1/#!delete-network-appliance-interfaces-l-3 + + - networkId (string): Network ID + - interfaceId (string): Interface ID + """ + + metadata = { + "tags": ["appliance", "configure", "interfaces", "l3"], + "operation": "deleteNetworkApplianceInterfacesL3", + } + networkId = urllib.parse.quote(str(networkId), safe="") + interfaceId = urllib.parse.quote(str(interfaceId), safe="") + resource = f"/networks/{networkId}/appliance/interfaces/l3/{interfaceId}" + + return self._session.delete(metadata, resource) + def getNetworkAppliancePorts(self, networkId: str): """ **List per-port VLAN settings for all ports of a secure router or security appliance.** @@ -1087,6 +1280,9 @@ def updateNetworkAppliancePort(self, networkId: str, portId: str, **kwargs): - vlan (integer): Native VLAN when the port is in Trunk mode. Access VLAN when the port is in Access mode. - allowedVlans (string): Comma-delimited list of VLAN IDs (e.g. '2,15') for all devices. Secure Routers also support VLAN ranges (e.g. '2-10,15'). Use 'all' to permit all VLANs on the port. - accessPolicy (string): The name of the policy. Only applicable to Access ports. Valid values are: 'open', '8021x-radius', 'mac-radius', 'hybris-radius' for MX64 or Z3 or any MX supporting the per port authentication feature. Otherwise, 'open' is the only valid value and 'open' is the default value if the field is missing. + - peerSgtCapable (boolean): If true, Peer SGT is enabled for traffic through this port. Applicable to trunk port only, not access port. + - adaptivePolicyGroupId (string): Adaptive policy group ID that all traffic originating from this port is assigned to. + - sgt (object): Security Group Tag settings for the port. """ kwargs.update(locals()) @@ -1106,6 +1302,9 @@ def updateNetworkAppliancePort(self, networkId: str, portId: str, **kwargs): "vlan", "allowedVlans", "accessPolicy", + "peerSgtCapable", + "adaptivePolicyGroupId", + "sgt", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1674,6 +1873,7 @@ def updateNetworkApplianceSingleLan(self, networkId: str, **kwargs): - applianceIp (string): The appliance IP address of the single LAN - ipv6 (object): IPv6 configuration on the VLAN - mandatoryDhcp (object): Mandatory DHCP will enforce that clients connecting to this LAN must use the IP address assigned by the DHCP server. Clients who use a static IP address won't be able to associate. Only available on firmware versions 17.0 and above + - vrf (object): VRF configuration on the Single LAN """ kwargs.update(locals()) @@ -1690,6 +1890,7 @@ def updateNetworkApplianceSingleLan(self, networkId: str, **kwargs): "applianceIp", "ipv6", "mandatoryDhcp", + "vrf", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1833,6 +2034,7 @@ def createNetworkApplianceStaticRoute(self, networkId: str, name: str, subnet: s - subnet (string): Subnet of the route - gatewayIp (string): Gateway IP address (next hop) - gatewayVlanId (integer): Gateway VLAN ID + - vrf (object): VRF settings for the static route. """ kwargs.update(locals()) @@ -1849,6 +2051,7 @@ def createNetworkApplianceStaticRoute(self, networkId: str, name: str, subnet: s "subnet", "gatewayIp", "gatewayVlanId", + "vrf", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1893,6 +2096,7 @@ def updateNetworkApplianceStaticRoute(self, networkId: str, staticRouteId: str, - enabled (boolean): Whether the route should be enabled or not - fixedIpAssignments (object): Fixed DHCP IP assignments on the route - reservedIpRanges (array): DHCP reserved IP ranges + - vrf (object): VRF settings for the static route. """ kwargs.update(locals()) @@ -1913,6 +2117,7 @@ def updateNetworkApplianceStaticRoute(self, networkId: str, staticRouteId: str, "enabled", "fixedIpAssignments", "reservedIpRanges", + "vrf", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2301,6 +2506,7 @@ def updateNetworkApplianceTrafficShapingVpnExclusions(self, networkId: str, **kw - networkId (string): Network ID - custom (array): Custom VPN exclusion rules. Pass an empty array to clear existing rules. - majorApplications (array): Major Application based VPN exclusion rules. Pass an empty array to clear existing rules. + - applications (array): NBAR Application based VPN exclusion rules. Available for networks on >=19.2 firmware """ kwargs.update(locals()) @@ -2315,6 +2521,7 @@ def updateNetworkApplianceTrafficShapingVpnExclusions(self, networkId: str, **kw body_params = [ "custom", "majorApplications", + "applications", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2378,6 +2585,199 @@ def disconnectNetworkApplianceUmbrellaAccount(self, networkId: str): return self._session.post(metadata, resource) + def disableNetworkApplianceUmbrellaProtection(self, networkId: str): + """ + **Disable umbrella protection for an MX network** + https://developer.cisco.com/meraki/api-v1/#!disable-network-appliance-umbrella-protection + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["appliance", "configure", "umbrella"], + "operation": "disableNetworkApplianceUmbrellaProtection", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/disableProtection" + + return self._session.delete(metadata, resource) + + def exclusionsNetworkApplianceUmbrellaDomains(self, networkId: str, domains: list, **kwargs): + """ + **Specify one or more domain names to be excluded from being routed to Cisco Umbrella.** + https://developer.cisco.com/meraki/api-v1/#!exclusions-network-appliance-umbrella-domains + + - networkId (string): Network ID + - domains (array): Domain names to exclude from Umbrella DNS routing (e.g., 'example.com', 'corp.example.org'). Standard FQDNs only — wildcards are not supported. Values are lowercased before saving. Each call replaces the full exclusion list. + """ + + kwargs = locals() + + metadata = { + "tags": ["appliance", "configure", "umbrella", "domains"], + "operation": "exclusionsNetworkApplianceUmbrellaDomains", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/domains/exclusions" + + body_params = [ + "domains", + ] + 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"exclusionsNetworkApplianceUmbrellaDomains: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def enableNetworkApplianceUmbrellaProtection(self, networkId: str): + """ + **Enable umbrella protection for an MX network** + https://developer.cisco.com/meraki/api-v1/#!enable-network-appliance-umbrella-protection + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["appliance", "configure", "umbrella"], + "operation": "enableNetworkApplianceUmbrellaProtection", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/enableProtection" + + return self._session.post(metadata, resource) + + def policiesNetworkApplianceUmbrella(self, networkId: str, policyIds: list, **kwargs): + """ + **Update umbrella policies applied to MX network.** + https://developer.cisco.com/meraki/api-v1/#!policies-network-appliance-umbrella + + - networkId (string): Network ID + - policyIds (array): Array of umbrella policy IDs + """ + + kwargs = locals() + + metadata = { + "tags": ["appliance", "configure", "umbrella"], + "operation": "policiesNetworkApplianceUmbrella", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/policies" + + body_params = [ + "policyIds", + ] + 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"policiesNetworkApplianceUmbrella: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def addNetworkApplianceUmbrellaPolicies(self, networkId: str, policy: dict, **kwargs): + """ + **Add one Cisco Umbrella DNS security policy to an MX network by policy ID** + https://developer.cisco.com/meraki/api-v1/#!add-network-appliance-umbrella-policies + + - networkId (string): Network ID + - policy (object): Umbrella policy to add + """ + + kwargs = locals() + + metadata = { + "tags": ["appliance", "configure", "umbrella", "policies"], + "operation": "addNetworkApplianceUmbrellaPolicies", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/policies/add" + + body_params = [ + "policy", + ] + 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"addNetworkApplianceUmbrellaPolicies: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def removeNetworkApplianceUmbrellaPolicies(self, networkId: str, policy: dict, **kwargs): + """ + **Remove one Cisco Umbrella DNS security policy from an MX network by policy ID** + https://developer.cisco.com/meraki/api-v1/#!remove-network-appliance-umbrella-policies + + - networkId (string): Network ID + - policy (object): Umbrella policy to remove + """ + + kwargs = locals() + + metadata = { + "tags": ["appliance", "configure", "umbrella", "policies"], + "operation": "removeNetworkApplianceUmbrellaPolicies", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/policies/remove" + + body_params = [ + "policy", + ] + 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"removeNetworkApplianceUmbrellaPolicies: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def protectionNetworkApplianceUmbrella(self, networkId: str, enabled: bool, **kwargs): + """ + **Enable or disable umbrella protection for an appliance network** + https://developer.cisco.com/meraki/api-v1/#!protection-network-appliance-umbrella + + - networkId (string): Network ID + - enabled (boolean): Enable or disable umbrella protection + """ + + kwargs = locals() + + metadata = { + "tags": ["appliance", "configure", "umbrella"], + "operation": "protectionNetworkApplianceUmbrella", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/umbrella/protection" + + body_params = [ + "enabled", + ] + 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"protectionNetworkApplianceUmbrella: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def updateNetworkApplianceUplinksNat(self, networkId: str, uplinks: list, **kwargs): """ **Update uplink NAT settings of the specified network** @@ -2488,6 +2888,8 @@ def createNetworkApplianceVlan(self, networkId: str, id: str, name: str, **kwarg - dhcpBootNextServer (string): DHCP boot option to direct boot clients to the server to load the boot file from - dhcpBootFilename (string): DHCP boot option for boot filename - dhcpOptions (array): The list of DHCP options that will be included in DHCP responses. Each object in the list should have "code", "type", and "value" properties. + - adaptivePolicyGroupId (string): Adaptive policy group ID this VLAN is assigned to. + - sgt (object): Security Group Tag settings for the VLAN. - vrf (object): VRF configuration on the VLAN - uplinks (array): Per-uplink NAT exception override configuration on the VLAN. Applicable only for networks that support NAT exceptions. """ @@ -2535,6 +2937,8 @@ def createNetworkApplianceVlan(self, networkId: str, id: str, name: str, **kwarg "dhcpBootNextServer", "dhcpBootFilename", "dhcpOptions", + "adaptivePolicyGroupId", + "sgt", "vrf", "uplinks", ] @@ -2642,6 +3046,8 @@ def updateNetworkApplianceVlan(self, networkId: str, vlanId: str, **kwargs): - mask (integer): Mask used for the subnet of all bound to the template networks. Applicable only for template network. - ipv6 (object): IPv6 configuration on the VLAN - mandatoryDhcp (object): Mandatory DHCP will enforce that clients connecting to this VLAN must use the IP address assigned by the DHCP server. Clients who use a static IP address won't be able to associate. Only available on firmware versions 17.0 and above + - adaptivePolicyGroupId (string): Adaptive policy group ID that all traffic originating from this VLAN is assigned to. + - sgt (object): Security Group Tag settings for the VLAN. - vrf (object): VRF configuration on the VLAN - uplinks (array): Per-uplink NAT exception override configuration on the VLAN. Applicable only for networks that support NAT exceptions. """ @@ -2693,6 +3099,8 @@ def updateNetworkApplianceVlan(self, networkId: str, vlanId: str, **kwargs): "mask", "ipv6", "mandatoryDhcp", + "adaptivePolicyGroupId", + "sgt", "vrf", "uplinks", ] @@ -2781,9 +3189,44 @@ def updateNetworkApplianceVpnBgp(self, networkId: str, enabled: bool, **kwargs): return self._session.put(metadata, resource, payload) - def getNetworkApplianceVpnSiteToSiteVpn(self, networkId: str): + def updateNetworkApplianceVpnSiteToSiteHubVrfs(self, networkId: str, hubNetworkId: str, _json: list, **kwargs): """ - **Return the site-to-site VPN settings of a network** + **Update the VRF mappings for a source network and hub pair.** + https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-vpn-site-to-site-hub-vrfs + + - networkId (string): Network ID + - hubNetworkId (string): Hub network ID + - _json (array): The list of VRFs for this source and hub mapping. + """ + + kwargs = locals() + + metadata = { + "tags": ["appliance", "configure", "vpn", "siteToSite", "hubs", "vrfs"], + "operation": "updateNetworkApplianceVpnSiteToSiteHubVrfs", + } + networkId = urllib.parse.quote(str(networkId), safe="") + hubNetworkId = urllib.parse.quote(str(hubNetworkId), safe="") + resource = f"/networks/{networkId}/appliance/vpn/siteToSite/hubs/{hubNetworkId}/vrfs" + + body_params = [ + "_json", + ] + 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"updateNetworkApplianceVpnSiteToSiteHubVrfs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def getNetworkApplianceVpnSiteToSiteVpn(self, networkId: str): + """ + **Return the site-to-site VPN settings of a network** https://developer.cisco.com/meraki/api-v1/#!get-network-appliance-vpn-site-to-site-vpn - networkId (string): Network ID @@ -2807,6 +3250,8 @@ def updateNetworkApplianceVpnSiteToSiteVpn(self, networkId: str, mode: str, **kw - mode (string): The site-to-site VPN mode. Can be one of 'none', 'spoke' or 'hub' - hubs (array): The list of VPN hubs, in order of preference. In spoke mode, at least 1 hub is required. - subnets (array): The list of subnets and their VPN presence. + - peerSgtCapable (boolean): Whether or not Peer SGT is enabled for traffic to this VPN peer. + - sgt (object): Security Group Tag settings for the VPN peer. - subnet (object): Configuration of subnet features - hostTranslations (array): The list of VPN host translations. Host translations are supported starting from MX firmware version 26.1.2 """ @@ -2828,6 +3273,8 @@ def updateNetworkApplianceVpnSiteToSiteVpn(self, networkId: str, mode: str, **kw "mode", "hubs", "subnets", + "peerSgtCapable", + "sgt", "subnet", "hostTranslations", ] @@ -2916,6 +3363,167 @@ def swapNetworkApplianceWarmSpare(self, networkId: str): return self._session.post(metadata, resource) + def getOrganizationApplianceDevicesInterfacesL3(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List L3 interfaces across networks for the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-devices-interfaces-l-3 + + - 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 Network IDs to filter results + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "devices", "interfaces", "l3"], + "operation": "getOrganizationApplianceDevicesInterfacesL3", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/devices/interfaces/l3" + + 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"getOrganizationApplianceDevicesInterfacesL3: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationApplianceDevicesInterfacesPortsByDevice(self, organizationId: str, **kwargs): + """ + **Returns port configurations for appliances in a given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-devices-interfaces-ports-by-device + + - organizationId (string): Organization ID + - serials (array): Parameter to filter the results by device serials + - interfaces (array): Parameter to filter the results by specific interfaces + - numbers (array): Parameter to filter the results by specific ports + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "devices", "interfaces", "ports", "byDevice"], + "operation": "getOrganizationApplianceDevicesInterfacesPortsByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/devices/interfaces/ports/byDevice" + + query_params = [ + "serials", + "interfaces", + "numbers", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + "interfaces", + "numbers", + ] + 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"getOrganizationApplianceDevicesInterfacesPortsByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApplianceDevicesPortsTransceiversReadingsHistoryByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Return time-series digital optical monitoring (DOM) readings for ports on each DOM-enabled Catalyst appliance in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-devices-ports-transceivers-readings-history-by-device + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10. Default is 5. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 1200. Interval is calculated if time params are provided. + - networkIds (array): Networks for which information should be gathered. + - serials (array): Optional parameter to filter usage by appliance serial. + - portIds (array): Optional parameter to filter usage by port ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "devices", "ports", "transceivers", "readings", "history", "byDevice"], + "operation": "getOrganizationApplianceDevicesPortsTransceiversReadingsHistoryByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/devices/ports/transceivers/readings/history/byDevice" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "serials", + "portIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "portIds", + ] + 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"getOrganizationApplianceDevicesPortsTransceiversReadingsHistoryByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceDevicesRedundancyByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): @@ -2957,6 +3565,68 @@ def getOrganizationApplianceDevicesRedundancyByNetwork( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceDevicesSystemUtilizationByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Return the appliance utilization history for devices in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-devices-system-utilization-by-interval + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 2 hours. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 1200. The default is 1200. + - networkIds (array): Optional parameter to filter the result set by the included set of network IDs + - serials (array): Optional parameter to filter device utilization history by device serial numbers + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "devices", "system", "utilization", "byInterval"], + "operation": "getOrganizationApplianceDevicesSystemUtilizationByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/devices/system/utilization/byInterval" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationApplianceDevicesSystemUtilizationByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceDnsLocalProfiles(self, organizationId: str, **kwargs): """ **Fetch the local DNS profiles used in the organization** @@ -3632,6 +4302,66 @@ def getOrganizationApplianceFirewallMulticastForwardingByNetwork( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceInterfacesPacketsOverviewsByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns packet counter overviews for all interfaces on Secure Routers in the organization, including totals and average rates by packet type over the requested timespan.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-interfaces-packets-overviews-by-device + + - 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 + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 1 day. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 10. + - 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. + - networkIds (array): Optional parameter to filter Secure Routers in the provided networks + - serials (array): Optional parameter to filter Secure Routers by their serial numbers + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "interfaces", "packets", "overviews", "byDevice"], + "operation": "getOrganizationApplianceInterfacesPacketsOverviewsByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/interfaces/packets/overviews/byDevice" + + query_params = [ + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationApplianceInterfacesPacketsOverviewsByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceRoutingVrfsSettings(self, organizationId: str): """ **Return the VRF setting for an organization.** @@ -3682,21 +4412,70 @@ def updateOrganizationApplianceRoutingVrfsSettings(self, organizationId: str, en return self._session.put(metadata, resource, payload) - def getOrganizationApplianceSecurityEvents(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationApplianceSdwanInternetPolicies(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the security events for an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-security-events + **Get the SDWAN internet traffic preferences for an MX network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-sdwan-internet-policies - 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 - - t0 (string): The beginning of the timespan for the data. Data is gathered after the specified t0 value. The maximum lookback period is 365 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 31 days. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 100. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 200. Default is 50. - 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. - - sortOrder (string): Sorted order of security events based on event detection time. Order options are 'ascending' or 'descending'. Default is ascending order. + - wanTrafficUplinkPreferences (array): policies with respective traffic filters for an MX network + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "sdwan", "internetPolicies"], + "operation": "getOrganizationApplianceSdwanInternetPolicies", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/sdwan/internetPolicies" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "wanTrafficUplinkPreferences", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "wanTrafficUplinkPreferences", + ] + 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"getOrganizationApplianceSdwanInternetPolicies: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationApplianceSecurityEvents(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the security events for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-security-events + + - 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 + - t0 (string): The beginning of the timespan for the data. Data is gathered after the specified t0 value. The maximum lookback period is 365 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 31 days. + - 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. + - sortOrder (string): Sorted order of security events based on event detection time. Order options are 'ascending' or 'descending'. Default is ascending order. """ kwargs.update(locals()) @@ -3836,6 +4615,57 @@ def getOrganizationApplianceTrafficShapingVpnExclusionsByNetwork( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceUmbrellaPoliciesByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List Umbrella policy IDs applied to MX networks in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-umbrella-policies-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 + - 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. + - networkIds (array): Filter results to only the given network IDs + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "umbrella", "policies", "byNetwork"], + "operation": "getOrganizationApplianceUmbrellaPoliciesByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/umbrella/policies/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationApplianceUmbrellaPoliciesByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceUplinkStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **List the uplink status of every Meraki MX and Z series appliances in the organization** @@ -4021,6 +4851,282 @@ def getOrganizationApplianceUplinksUsageByNetwork(self, organizationId: str, **k return self._session.get(metadata, resource, params) + def getOrganizationApplianceVlans(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the VLANs for an Organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vlans + + - 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 + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "vlans"], + "operation": "getOrganizationApplianceVlans", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vlans" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationApplianceVlans: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationApplianceVpnConnectivityVpnPeersByNetwork(self, organizationId: str, **kwargs): + """ + **Summarizes by-device vpn peers for the organization in the given interval.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-connectivity-vpn-peers-by-network + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 3600, 14400, 86400. The default is 3600. Interval is calculated if time params are provided. + - networkIds (array): Filter results by network. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "vpn", "connectivity", "vpnPeers", "byNetwork"], + "operation": "getOrganizationApplianceVpnConnectivityVpnPeersByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vpn/connectivity/vpnPeers/byNetwork" + + query_params = [ + "t0", + "t1", + "timespan", + "interval", + "networkIds", + ] + 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"getOrganizationApplianceVpnConnectivityVpnPeersByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApplianceVpnRemoteAccessSecureClientAuthenticationByClient(self, organizationId: str, **kwargs): + """ + **Get authentication for all clients in organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-remote-access-secure-client-authentication-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "vpn", "remoteAccess", "secureClient", "authentication", "byClient"], + "operation": "getOrganizationApplianceVpnRemoteAccessSecureClientAuthenticationByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vpn/remoteAccess/secureClient/authentication/byClient" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationApplianceVpnRemoteAccessSecureClientAuthenticationByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApplianceVpnRemoteAccessSecureClientIpAssignmentByClient(self, organizationId: str, **kwargs): + """ + **Get IP assignment for all clients in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-remote-access-secure-client-ip-assignment-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "vpn", "remoteAccess", "secureClient", "ipAssignment", "byClient"], + "operation": "getOrganizationApplianceVpnRemoteAccessSecureClientIpAssignmentByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vpn/remoteAccess/secureClient/ipAssignment/byClient" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationApplianceVpnRemoteAccessSecureClientIpAssignmentByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApplianceVpnRemoteAccessSecureClientTunnelCreationByClient(self, organizationId: str, **kwargs): + """ + **Get tunnel creation events for all clients in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-remote-access-secure-client-tunnel-creation-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "vpn", "remoteAccess", "secureClient", "tunnelCreation", "byClient"], + "operation": "getOrganizationApplianceVpnRemoteAccessSecureClientTunnelCreationByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vpn/remoteAccess/secureClient/tunnelCreation/byClient" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationApplianceVpnRemoteAccessSecureClientTunnelCreationByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApplianceVpnSiteToSiteHubsVrfs(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return source-to-hub VRF mappings for site-to-site VPN within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-site-to-site-hubs-vrfs + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 500. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter source-to-hub mappings by source network IDs. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "vpn", "siteToSite", "hubs", "vrfs"], + "operation": "getOrganizationApplianceVpnSiteToSiteHubsVrfs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vpn/siteToSite/hubs/vrfs" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationApplianceVpnSiteToSiteHubsVrfs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceVpnSiteToSiteIpsecPeersSlas(self, organizationId: str): """ **Get the list of available IPsec SLA policies for an organization** diff --git a/meraki/api/batch/appliance.py b/meraki/api/batch/appliance.py index 3e5585e..eac132d 100644 --- a/meraki/api/batch/appliance.py +++ b/meraki/api/batch/appliance.py @@ -5,6 +5,98 @@ class ActionBatchAppliance(object): def __init__(self): super(ActionBatchAppliance, self).__init__() + def createDeviceApplianceInterfacesPortsUpdate(self, serial: str, **kwargs): + """ + **Update configurations for an appliance's specified port** + https://developer.cisco.com/meraki/api-v1/#!create-device-appliance-interfaces-ports-update + + - serial (string): Serial + - interface (object): The interface tuple used to identify the port + - enabled (boolean): Indicates whether the port is enabled + - personality (object): Describes the port's configurability + - uplink (object): The port's settings when in WAN mode + - downlink (object): The port's VLAN settings when in LAN mode + - speed (string): Link speed for the port, in Mbps + - duplex (string): Duplex configuration for the port + """ + + kwargs.update(locals()) + + if "speed" in kwargs and kwargs["speed"] is not None: + options = ["10", "100", "1000", "10000", "2500", "25000", "5000", "auto"] + assert kwargs["speed"] in options, f'''"speed" cannot be "{kwargs["speed"]}", & must be set to one of: {options}''' + if "duplex" in kwargs and kwargs["duplex"] is not None: + options = ["auto", "full", "half"] + assert kwargs["duplex"] in options, ( + f'''"duplex" cannot be "{kwargs["duplex"]}", & must be set to one of: {options}''' + ) + + serial = urllib.parse.quote(serial, safe="") + resource = f"/devices/{serial}/appliance/interfaces/ports/update" + + body_params = [ + "interface", + "enabled", + "personality", + "uplink", + "downlink", + "speed", + "duplex", + ] + 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 updateDeviceApplianceInterfacesPort(self, serial: str, number: str, **kwargs): + """ + **Update configurations for an appliance's specified port** + https://developer.cisco.com/meraki/api-v1/#!update-device-appliance-interfaces-port + + - serial (string): Serial + - number (string): Number + - enabled (boolean): Indicates whether the port is enabled + - personality (object): Describes the port's configurability + - uplink (object): The port's settings when in WAN mode + - downlink (object): The port's VLAN settings when in LAN mode + - speed (string): Link speed for the port, in Mbps + - duplex (string): Duplex configuration for the port + """ + + kwargs.update(locals()) + + if "speed" in kwargs and kwargs["speed"] is not None: + options = ["10", "100", "1000", "10000", "2500", "25000", "5000", "auto"] + assert kwargs["speed"] in options, f'''"speed" cannot be "{kwargs["speed"]}", & must be set to one of: {options}''' + if "duplex" in kwargs and kwargs["duplex"] is not None: + options = ["auto", "full", "half"] + assert kwargs["duplex"] in options, ( + f'''"duplex" cannot be "{kwargs["duplex"]}", & must be set to one of: {options}''' + ) + + serial = urllib.parse.quote(serial, safe="") + number = urllib.parse.quote(number, safe="") + resource = f"/devices/{serial}/appliance/interfaces/ports/{number}" + + body_params = [ + "enabled", + "personality", + "uplink", + "downlink", + "speed", + "duplex", + ] + 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 updateDeviceApplianceRadioSettings(self, serial: str, **kwargs): """ **Update the radio settings of an appliance** @@ -203,6 +295,81 @@ def updateNetworkApplianceFirewallMulticastForwarding(self, networkId: str, rule } return action + def createNetworkApplianceInterfacesL3(self, networkId: str, ipv4: dict, **kwargs): + """ + **Create wired L3 interface** + https://developer.cisco.com/meraki/api-v1/#!create-network-appliance-interfaces-l-3 + + - networkId (string): Network ID + - ipv4 (object): IPv4 configuration + - port (object): Port configuration + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/appliance/interfaces/l3" + + body_params = [ + "port", + "ipv4", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str, **kwargs): + """ + **Update wired L3 interface** + https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-interfaces-l-3 + + - networkId (string): Network ID + - interfaceId (string): Interface ID + - port (object): Port configuration + - ipv4 (object): IPv4 configuration + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + interfaceId = urllib.parse.quote(interfaceId, safe="") + resource = f"/networks/{networkId}/appliance/interfaces/l3/{interfaceId}" + + body_params = [ + "port", + "ipv4", + ] + 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 deleteNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str): + """ + **Delete wired L3 interface** + https://developer.cisco.com/meraki/api-v1/#!delete-network-appliance-interfaces-l-3 + + - networkId (string): Network ID + - interfaceId (string): Interface ID + """ + + networkId = urllib.parse.quote(networkId, safe="") + interfaceId = urllib.parse.quote(interfaceId, safe="") + resource = f"/networks/{networkId}/appliance/interfaces/l3/{interfaceId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + def updateNetworkAppliancePort(self, networkId: str, portId: str, **kwargs): """ **Update the per-port VLAN settings for a single secure router or security appliance port.** @@ -216,6 +383,9 @@ def updateNetworkAppliancePort(self, networkId: str, portId: str, **kwargs): - vlan (integer): Native VLAN when the port is in Trunk mode. Access VLAN when the port is in Access mode. - allowedVlans (string): Comma-delimited list of VLAN IDs (e.g. '2,15') for all devices. Secure Routers also support VLAN ranges (e.g. '2-10,15'). Use 'all' to permit all VLANs on the port. - accessPolicy (string): The name of the policy. Only applicable to Access ports. Valid values are: 'open', '8021x-radius', 'mac-radius', 'hybris-radius' for MX64 or Z3 or any MX supporting the per port authentication feature. Otherwise, 'open' is the only valid value and 'open' is the default value if the field is missing. + - peerSgtCapable (boolean): If true, Peer SGT is enabled for traffic through this port. Applicable to trunk port only, not access port. + - adaptivePolicyGroupId (string): Adaptive policy group ID that all traffic originating from this port is assigned to. + - sgt (object): Security Group Tag settings for the port. """ kwargs.update(locals()) @@ -231,6 +401,9 @@ def updateNetworkAppliancePort(self, networkId: str, portId: str, **kwargs): "vlan", "allowedVlans", "accessPolicy", + "peerSgtCapable", + "adaptivePolicyGroupId", + "sgt", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -477,6 +650,7 @@ def updateNetworkApplianceSingleLan(self, networkId: str, **kwargs): - applianceIp (string): The appliance IP address of the single LAN - ipv6 (object): IPv6 configuration on the VLAN - mandatoryDhcp (object): Mandatory DHCP will enforce that clients connecting to this LAN must use the IP address assigned by the DHCP server. Clients who use a static IP address won't be able to associate. Only available on firmware versions 17.0 and above + - vrf (object): VRF configuration on the Single LAN """ kwargs.update(locals()) @@ -489,6 +663,7 @@ def updateNetworkApplianceSingleLan(self, networkId: str, **kwargs): "applianceIp", "ipv6", "mandatoryDhcp", + "vrf", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -744,6 +919,7 @@ def updateNetworkApplianceTrafficShapingVpnExclusions(self, networkId: str, **kw - networkId (string): Network ID - custom (array): Custom VPN exclusion rules. Pass an empty array to clear existing rules. - majorApplications (array): Major Application based VPN exclusion rules. Pass an empty array to clear existing rules. + - applications (array): NBAR Application based VPN exclusion rules. Available for networks on >=19.2 firmware """ kwargs.update(locals()) @@ -754,6 +930,7 @@ def updateNetworkApplianceTrafficShapingVpnExclusions(self, networkId: str, **kw body_params = [ "custom", "majorApplications", + "applications", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -805,6 +982,165 @@ def disconnectNetworkApplianceUmbrellaAccount(self, networkId: str): } return action + def disableNetworkApplianceUmbrellaProtection(self, networkId: str): + """ + **Disable umbrella protection for an MX network** + https://developer.cisco.com/meraki/api-v1/#!disable-network-appliance-umbrella-protection + + - networkId (string): Network ID + """ + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/appliance/umbrella/disableProtection" + + action = { + "resource": resource, + "operation": "action", + } + return action + + def exclusionsNetworkApplianceUmbrellaDomains(self, networkId: str, domains: list, **kwargs): + """ + **Specify one or more domain names to be excluded from being routed to Cisco Umbrella.** + https://developer.cisco.com/meraki/api-v1/#!exclusions-network-appliance-umbrella-domains + + - networkId (string): Network ID + - domains (array): Domain names to exclude from Umbrella DNS routing (e.g., 'example.com', 'corp.example.org'). Standard FQDNs only — wildcards are not supported. Values are lowercased before saving. Each call replaces the full exclusion list. + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/appliance/umbrella/domains/exclusions" + + body_params = [ + "domains", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "action", + "body": payload, + } + return action + + def enableNetworkApplianceUmbrellaProtection(self, networkId: str): + """ + **Enable umbrella protection for an MX network** + https://developer.cisco.com/meraki/api-v1/#!enable-network-appliance-umbrella-protection + + - networkId (string): Network ID + """ + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/appliance/umbrella/enableProtection" + + action = { + "resource": resource, + "operation": "action", + } + return action + + def policiesNetworkApplianceUmbrella(self, networkId: str, policyIds: list, **kwargs): + """ + **Update umbrella policies applied to MX network.** + https://developer.cisco.com/meraki/api-v1/#!policies-network-appliance-umbrella + + - networkId (string): Network ID + - policyIds (array): Array of umbrella policy IDs + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/appliance/umbrella/policies" + + body_params = [ + "policyIds", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "action", + "body": payload, + } + return action + + def addNetworkApplianceUmbrellaPolicies(self, networkId: str, policy: dict, **kwargs): + """ + **Add one Cisco Umbrella DNS security policy to an MX network by policy ID. Idempotent — if the policy is already applied, the request succeeds and returns the current policy set unchanged.** + https://developer.cisco.com/meraki/api-v1/#!add-network-appliance-umbrella-policies + + - networkId (string): Network ID + - policy (object): Umbrella policy to add + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/appliance/umbrella/policies/add" + + body_params = [ + "policy", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "policies_add", + "body": payload, + } + return action + + def removeNetworkApplianceUmbrellaPolicies(self, networkId: str, policy: dict, **kwargs): + """ + **Remove one Cisco Umbrella DNS security policy from an MX network by policy ID. Returns 204 No Content on success. Behavior when the policy is not currently applied depends on the Cisco Umbrella API response.** + https://developer.cisco.com/meraki/api-v1/#!remove-network-appliance-umbrella-policies + + - networkId (string): Network ID + - policy (object): Umbrella policy to remove + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/appliance/umbrella/policies/remove" + + body_params = [ + "policy", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "policies_remove", + "body": payload, + } + return action + + def protectionNetworkApplianceUmbrella(self, networkId: str, enabled: bool, **kwargs): + """ + **Enable or disable umbrella protection for an appliance network. When 'enabled' is false, 'umbrella.organization.id' and 'umbrella.origin.id' are null in the response.** + https://developer.cisco.com/meraki/api-v1/#!protection-network-appliance-umbrella + + - networkId (string): Network ID + - enabled (boolean): Enable or disable umbrella protection + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/appliance/umbrella/protection" + + body_params = [ + "enabled", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "action", + "body": payload, + } + return action + def updateNetworkApplianceUplinksNat(self, networkId: str, uplinks: list, **kwargs): """ **Update uplink NAT settings of the specified network** @@ -853,6 +1189,8 @@ def createNetworkApplianceVlan(self, networkId: str, id: str, name: str, **kwarg - dhcpBootNextServer (string): DHCP boot option to direct boot clients to the server to load the boot file from - dhcpBootFilename (string): DHCP boot option for boot filename - dhcpOptions (array): The list of DHCP options that will be included in DHCP responses. Each object in the list should have "code", "type", and "value" properties. + - adaptivePolicyGroupId (string): Adaptive policy group ID this VLAN is assigned to. + - sgt (object): Security Group Tag settings for the VLAN. - vrf (object): VRF configuration on the VLAN - uplinks (array): Per-uplink NAT exception override configuration on the VLAN. Applicable only for networks that support NAT exceptions. """ @@ -896,6 +1234,8 @@ def createNetworkApplianceVlan(self, networkId: str, id: str, name: str, **kwarg "dhcpBootNextServer", "dhcpBootFilename", "dhcpOptions", + "adaptivePolicyGroupId", + "sgt", "vrf", "uplinks", ] @@ -959,6 +1299,8 @@ def updateNetworkApplianceVlan(self, networkId: str, vlanId: str, **kwargs): - mask (integer): Mask used for the subnet of all bound to the template networks. Applicable only for template network. - ipv6 (object): IPv6 configuration on the VLAN - mandatoryDhcp (object): Mandatory DHCP will enforce that clients connecting to this VLAN must use the IP address assigned by the DHCP server. Clients who use a static IP address won't be able to associate. Only available on firmware versions 17.0 and above + - adaptivePolicyGroupId (string): Adaptive policy group ID that all traffic originating from this VLAN is assigned to. + - sgt (object): Security Group Tag settings for the VLAN. - vrf (object): VRF configuration on the VLAN - uplinks (array): Per-uplink NAT exception override configuration on the VLAN. Applicable only for networks that support NAT exceptions. """ @@ -1006,6 +1348,8 @@ def updateNetworkApplianceVlan(self, networkId: str, vlanId: str, **kwargs): "mask", "ipv6", "mandatoryDhcp", + "adaptivePolicyGroupId", + "sgt", "vrf", "uplinks", ] @@ -1069,6 +1413,33 @@ def updateNetworkApplianceVpnBgp(self, networkId: str, enabled: bool, **kwargs): } return action + def updateNetworkApplianceVpnSiteToSiteHubVrfs(self, networkId: str, hubNetworkId: str, _json: list, **kwargs): + """ + **Update the VRF mappings for a source network and hub pair.** + https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-vpn-site-to-site-hub-vrfs + + - networkId (string): Network ID + - hubNetworkId (string): Hub network ID + - _json (array): The list of VRFs for this source and hub mapping. + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + hubNetworkId = urllib.parse.quote(hubNetworkId, safe="") + resource = f"/networks/{networkId}/appliance/vpn/siteToSite/hubs/{hubNetworkId}/vrfs" + + body_params = [ + "_json", + ] + 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 updateNetworkApplianceVpnSiteToSiteVpn(self, networkId: str, mode: str, **kwargs): """ **Update the site-to-site VPN settings of a network. Only valid for MX networks in NAT mode.** @@ -1078,6 +1449,8 @@ def updateNetworkApplianceVpnSiteToSiteVpn(self, networkId: str, mode: str, **kw - mode (string): The site-to-site VPN mode. Can be one of 'none', 'spoke' or 'hub' - hubs (array): The list of VPN hubs, in order of preference. In spoke mode, at least 1 hub is required. - subnets (array): The list of subnets and their VPN presence. + - peerSgtCapable (boolean): Whether or not Peer SGT is enabled for traffic to this VPN peer. + - sgt (object): Security Group Tag settings for the VPN peer. - subnet (object): Configuration of subnet features - hostTranslations (array): The list of VPN host translations. Host translations are supported starting from MX firmware version 26.1.2 """ @@ -1095,6 +1468,8 @@ def updateNetworkApplianceVpnSiteToSiteVpn(self, networkId: str, mode: str, **kw "mode", "hubs", "subnets", + "peerSgtCapable", + "sgt", "subnet", "hostTranslations", ] diff --git a/meraki/api/batch/camera.py b/meraki/api/batch/camera.py index 9a2e7b2..6f2993c 100644 --- a/meraki/api/batch/camera.py +++ b/meraki/api/batch/camera.py @@ -167,3 +167,82 @@ def updateDeviceCameraWirelessProfiles(self, serial: str, ids: dict, **kwargs): "body": payload, } return action + + def createNetworkCameraVideoWall(self, networkId: str, name: str, tiles: list, **kwargs): + """ + **Create a new video wall.** + https://developer.cisco.com/meraki/api-v1/#!create-network-camera-video-wall + + - networkId (string): Network ID + - name (string): The name of the video wall. + - tiles (array): The tiles that should appear on the video wall. + - index (integer): The order that this wall should appear on the video wall list. + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/camera/videoWalls" + + body_params = [ + "name", + "index", + "tiles", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateNetworkCameraVideoWall(self, networkId: str, id: str, name: str, tiles: list, **kwargs): + """ + **Update the specified video wall.** + https://developer.cisco.com/meraki/api-v1/#!update-network-camera-video-wall + + - networkId (string): Network ID + - id (string): ID + - name (string): The name of the video wall. + - tiles (array): The tiles that should appear on the video wall. + - index (integer): The order that this wall should appear on the video wall list. + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/networks/{networkId}/camera/videoWalls/{id}" + + body_params = [ + "name", + "index", + "tiles", + ] + 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 deleteNetworkCameraVideoWall(self, networkId: str, id: str): + """ + **Delete the specified video wall.** + https://developer.cisco.com/meraki/api-v1/#!delete-network-camera-video-wall + + - networkId (string): Network ID + - id (string): ID + """ + + networkId = urllib.parse.quote(networkId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/networks/{networkId}/camera/videoWalls/{id}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action diff --git a/meraki/api/batch/campusGateway.py b/meraki/api/batch/campusGateway.py index c2a6b8e..60c995d 100644 --- a/meraki/api/batch/campusGateway.py +++ b/meraki/api/batch/campusGateway.py @@ -82,3 +82,130 @@ def updateNetworkCampusGatewayCluster(self, networkId: str, clusterId: str, **kw "body": payload, } return action + + def deleteNetworkCampusGatewayCluster(self, networkId: str, clusterId: str): + """ + **Delete a cluster** + https://developer.cisco.com/meraki/api-v1/#!delete-network-campus-gateway-cluster + + - networkId (string): Network ID + - clusterId (string): Cluster ID + """ + + networkId = urllib.parse.quote(networkId, safe="") + clusterId = urllib.parse.quote(clusterId, safe="") + resource = f"/networks/{networkId}/campusGateway/clusters/{clusterId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def updateNetworkCampusGatewaySsidMdns(self, networkId: str, number: str, **kwargs): + """ + **Update the mDNS gateway settings and rules for a SSID and cluster** + https://developer.cisco.com/meraki/api-v1/#!update-network-campus-gateway-ssid-mdns + + - networkId (string): Network ID + - number (string): Number + - enabled (boolean): If true, mDNS gateway is enabled for this SSID and cluster. + - rules (array): List of mDNS forwarding rules. + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + number = urllib.parse.quote(number, safe="") + resource = f"/networks/{networkId}/campusGateway/ssids/{number}/mdns" + + body_params = [ + "enabled", + "rules", + ] + 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 provisionOrganizationCampusGatewayClusters( + self, + organizationId: str, + clusterId: str, + network: dict, + name: str, + uplinks: list, + tunnels: list, + nameservers: dict, + portChannels: list, + **kwargs, + ): + """ + **Provisions a cluster,adds campus gateways to it and associate/dissociate failover targets.** + https://developer.cisco.com/meraki/api-v1/#!provision-organization-campus-gateway-clusters + + - organizationId (string): Organization ID + - clusterId (string): ID of the cluster to be provisioned + - network (object): Network to be provisioned + - name (string): Name of the new cluster + - uplinks (array): Uplink interface settings of the cluster + - tunnels (array): Tunnel interface settings of the cluster: Reuse uplink or specify tunnel interface + - nameservers (object): Nameservers of the cluster + - portChannels (array): Port channel settings of the cluster + - devices (array): Devices to be added to the cluster + - failover (object): Failover targets for the cluster + - notes (string): Notes about cluster with max size of 511 characters allowed + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/provision" + + body_params = [ + "clusterId", + "network", + "name", + "uplinks", + "tunnels", + "nameservers", + "portChannels", + "devices", + "failover", + "notes", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "provision", + "body": payload, + } + return action + + def batchOrganizationCampusGatewayClustersTunnelingByClusterByNetworkUpdate(self, organizationId: str, **kwargs): + """ + **Update MCG cluster-network tunnel settings for multiple networks** + https://developer.cisco.com/meraki/api-v1/#!batch-organization-campus-gateway-clusters-tunneling-by-cluster-by-network-update + + - organizationId (string): Organization ID + - items (array): MCG cluster-network tunnel settings + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/tunneling/byCluster/byNetwork/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 diff --git a/meraki/api/batch/devices.py b/meraki/api/batch/devices.py index edc67a6..c3c5b13 100644 --- a/meraki/api/batch/devices.py +++ b/meraki/api/batch/devices.py @@ -107,6 +107,60 @@ def createDeviceCellularUplinksBandsMasksUpdate(self, serial: str, slot: str, ty } return action + def updateDeviceCliConfigFavorite(self, serial: str, configId: str, favorite: bool, **kwargs): + """ + **Favorite or unfavorite a configuration for an IOS-XE device** + https://developer.cisco.com/meraki/api-v1/#!update-device-cli-config-favorite + + - serial (string): Serial + - configId (string): Config ID + - favorite (boolean): Whether the config should be favorited + """ + + kwargs = locals() + + serial = urllib.parse.quote(serial, safe="") + configId = urllib.parse.quote(configId, safe="") + resource = f"/devices/{serial}/cli/configs/{configId}" + + body_params = [ + "favorite", + ] + 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 createDeviceConfigRestore(self, serial: str, configId: str, **kwargs): + """ + **Create a restore request for a specific config history record** + https://developer.cisco.com/meraki/api-v1/#!create-device-config-restore + + - serial (string): Serial + - configId (string): Config ID + - scheduledFor (string): Requested ISO 8601 UTC timestamp for when the restore should be scheduled + """ + + kwargs.update(locals()) + + serial = urllib.parse.quote(serial, safe="") + configId = urllib.parse.quote(configId, safe="") + resource = f"/devices/{serial}/cli/configs/{configId}/restores" + + body_params = [ + "scheduledFor", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "restore", + "body": payload, + } + return action + def createDeviceLiveToolsLedsBlink(self, serial: str, duration: int, **kwargs): """ **Enqueue a job to blink LEDs on a device. This endpoint has a rate limit of one request every 10 seconds.** @@ -134,6 +188,134 @@ def createDeviceLiveToolsLedsBlink(self, serial: str, duration: int, **kwargs): } return action + def createDeviceLiveToolsPortsStatus(self, serial: str, **kwargs): + """ + **Enqueue a job to retrieve port status for a device. This endpoint has a sustained rate limit of one request every five seconds per device, with an allowed burst of five requests.** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-ports-status + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + serial = urllib.parse.quote(serial, safe="") + resource = f"/devices/{serial}/liveTools/ports/status" + + body_params = [ + "callback", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "status", + "body": payload, + } + return action + + def createDeviceLiveToolsReboot(self, serial: str, **kwargs): + """ + **Enqueue a job to reboot a device. This endpoint has a rate limit of one request every 60 seconds.** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-reboot + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + serial = urllib.parse.quote(serial, safe="") + resource = f"/devices/{serial}/liveTools/reboot" + + body_params = [ + "callback", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "device", + "body": payload, + } + return action + + def createDeviceLiveToolsRoutingTableLookup(self, serial: str, **kwargs): + """ + **Enqueue a job to perform a routing table lookup request for a device. The routing table lookup request fetches a specific set of routes based on filters. Any combination of search filters can be applied. Only Cisco Secure Routers are supported.** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-routing-table-lookup + + - serial (string): Serial + - type (string): The type of route defined + - destination (object): The destination IP or subnet to lookup + - nextHop (object): The next hop to lookup + - vpn (object): VPN related search criteria + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = [ + "BGP", + "EIGRP", + "HSRP", + "IGRP", + "ISIS", + "LISP", + "NAT", + "ND", + "NHRP", + "OMP", + "OSPF", + "RIP", + "default WAN", + "direct", + "static", + ] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + + serial = urllib.parse.quote(serial, safe="") + resource = f"/devices/{serial}/liveTools/routingTable/lookups" + + body_params = [ + "type", + "destination", + "nextHop", + "vpn", + "callback", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "lookup", + "body": payload, + } + return action + + def createDeviceLiveToolsRoutingTableSummary(self, serial: str, **kwargs): + """ + **Enqueue a routing table summary job for a device. The job fetches summary data such as route counts by VRF and protocol. Only Cisco Secure Routers are supported.** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-routing-table-summary + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + serial = urllib.parse.quote(serial, safe="") + resource = f"/devices/{serial}/liveTools/routingTable/summaries" + + body_params = [ + "callback", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "summary", + "body": payload, + } + return action + def createDeviceLiveToolsThroughputTest(self, serial: str, **kwargs): """ **Enqueue a job to test a device throughput, the test will run for 10 secs to test throughput. This endpoint has a rate limit of one request every five seconds per device.** diff --git a/meraki/api/batch/insight.py b/meraki/api/batch/insight.py index 7e850f1..c2057ff 100644 --- a/meraki/api/batch/insight.py +++ b/meraki/api/batch/insight.py @@ -5,6 +5,83 @@ class ActionBatchInsight(object): def __init__(self): super(ActionBatchInsight, self).__init__() + def createOrganizationInsightApplication(self, organizationId: str, counterSetRuleId: int, **kwargs): + """ + **Add an Insight tracked application** + https://developer.cisco.com/meraki/api-v1/#!create-organization-insight-application + + - organizationId (string): Organization ID + - counterSetRuleId (integer): The id of the counter set rule + - enableSmartThresholds (boolean): Enable Smart Thresholds + - thresholds (object): Thresholds defined by a user for each application + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/insight/applications" + + body_params = [ + "counterSetRuleId", + "enableSmartThresholds", + "thresholds", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationInsightApplication(self, organizationId: str, applicationId: str, **kwargs): + """ + **Update an Insight tracked application** + https://developer.cisco.com/meraki/api-v1/#!update-organization-insight-application + + - organizationId (string): Organization ID + - applicationId (string): Application ID + - enableSmartThresholds (boolean): Enable Smart Thresholds + - thresholds (object): Thresholds defined by a user for each application + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + applicationId = urllib.parse.quote(applicationId, safe="") + resource = f"/organizations/{organizationId}/insight/applications/{applicationId}" + + body_params = [ + "enableSmartThresholds", + "thresholds", + ] + 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 deleteOrganizationInsightApplication(self, organizationId: str, applicationId: str): + """ + **Delete an Insight tracked application** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-insight-application + + - organizationId (string): Organization ID + - applicationId (string): Application ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + applicationId = urllib.parse.quote(applicationId, safe="") + resource = f"/organizations/{organizationId}/insight/applications/{applicationId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + def createOrganizationInsightMonitoredMediaServer(self, organizationId: str, name: str, address: str, **kwargs): """ **Add a media server to be monitored for this organization. Only valid for organizations with Meraki Insight.** @@ -83,3 +160,78 @@ def deleteOrganizationInsightMonitoredMediaServer(self, organizationId: str, mon "operation": "destroy", } return action + + def createOrganizationInsightWebApp(self, organizationId: str, name: str, hostname: str, **kwargs): + """ + **Add a custom web application for Insight to be able to track** + https://developer.cisco.com/meraki/api-v1/#!create-organization-insight-web-app + + - organizationId (string): Organization ID + - name (string): The name of the Web Application + - hostname (string): The hostname of Web Application + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/insight/webApps" + + body_params = [ + "name", + "hostname", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationInsightWebApp(self, organizationId: str, customCounterSetRuleId: str, **kwargs): + """ + **Update a custom web application for Insight to be able to track** + https://developer.cisco.com/meraki/api-v1/#!update-organization-insight-web-app + + - organizationId (string): Organization ID + - customCounterSetRuleId (string): Custom counter set rule ID + - name (string): The name of the Web Application + - hostname (string): The hostname of Web Application + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + customCounterSetRuleId = urllib.parse.quote(customCounterSetRuleId, safe="") + resource = f"/organizations/{organizationId}/insight/webApps/{customCounterSetRuleId}" + + body_params = [ + "name", + "hostname", + ] + 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 deleteOrganizationInsightWebApp(self, organizationId: str, customCounterSetRuleId: str): + """ + **Delete a custom web application by counter set rule id.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-insight-web-app + + - organizationId (string): Organization ID + - customCounterSetRuleId (string): Custom counter set rule ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + customCounterSetRuleId = urllib.parse.quote(customCounterSetRuleId, safe="") + resource = f"/organizations/{organizationId}/insight/webApps/{customCounterSetRuleId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action diff --git a/meraki/api/batch/nac.py b/meraki/api/batch/nac.py new file mode 100644 index 0000000..7a6720b --- /dev/null +++ b/meraki/api/batch/nac.py @@ -0,0 +1,316 @@ +import urllib + + +class ActionBatchNac(object): + def __init__(self): + super(ActionBatchNac, self).__init__() + + def createOrganizationNacCertificatesAuthoritiesCrl( + self, organizationId: str, caId: str, content: str, isDelta: bool, **kwargs + ): + """ + **Create a new CRL (either base or delta) for an existing CA** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-certificates-authorities-crl + + - organizationId (string): Organization ID + - caId (string): ID of the CRL issuer + - content (string): CRL content in PEM format + - isDelta (boolean): Whether it's a delta CRL or not + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls" + + body_params = [ + "caId", + "content", + "isDelta", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def deleteOrganizationNacCertificatesAuthoritiesCrl(self, organizationId: str, crlId: str): + """ + **Deletes a whole CRL, including all its deltas (in case of base CRL removal)** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-nac-certificates-authorities-crl + + - organizationId (string): Organization ID + - crlId (string): Crl ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + crlId = urllib.parse.quote(crlId, safe="") + resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls/{crlId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def createOrganizationNacCertificatesImport(self, organizationId: str, contents: str, **kwargs): + """ + **Import certificate for this organization or validate without persisting** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-certificates-import + + - organizationId (string): Organization ID + - contents (string): Certificate content in valid PEM format + - dryRun (boolean): If true, validates the certificate without persisting it + - profile (object): Profile object containing certificate config fields + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/nac/certificates/import" + + body_params = [ + "contents", + "dryRun", + "profile", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationNacCertificate(self, organizationId: str, certificateId: str, profile: dict, **kwargs): + """ + **Update certificate configuration by certificateId for this organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-nac-certificate + + - organizationId (string): Organization ID + - certificateId (string): Certificate ID + - profile (object): Profile object containing certificate config fields + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + certificateId = urllib.parse.quote(certificateId, safe="") + resource = f"/organizations/{organizationId}/nac/certificates/{certificateId}" + + body_params = [ + "profile", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "action", + "body": payload, + } + return action + + def bulkOrganizationNacClientsDelete(self, organizationId: str, clientIds: list, **kwargs): + """ + **Delete existing client(s) for the organization** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-nac-clients-delete + + - organizationId (string): Organization ID + - clientIds (array): List of ids for specific client retrieval + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/nac/clients/bulkDelete" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def createOrganizationNacClientsBulkEdit(self, organizationId: str, clientIds: list, **kwargs): + """ + **Bulk Update of existing clients for the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-clients-bulk-edit + + - organizationId (string): Organization ID + - clientIds (array): List of clients ids to apply the bulk edit operation on. + - description (string): User provided description to be applied on the list of clients provided + - groups (object): Client group information to be applied on the list of clients provided + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/nac/clients/bulkEdit" + + body_params = [ + "clientIds", + "description", + "groups", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "edit", + "body": payload, + } + return action + + def createOrganizationNacClientsBulkUpload( + self, organizationId: str, contents: str, updateClients: bool, createClientGroups: bool, **kwargs + ): + """ + **Bulk upload of clients, client groups and their associations for the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-clients-bulk-upload + + - organizationId (string): Organization ID + - contents (string): CSV file content in Base64 encoded string format + - updateClients (boolean): The updateClients indicates whether existing clients must be updated with new data from the CSV + - createClientGroups (boolean): The createClientGroups indicates whether new client groups must be created or not + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/nac/clients/bulkUpload" + + body_params = [ + "contents", + "updateClients", + "createClientGroups", + ] + 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 createOrganizationNacClientsGroup(self, organizationId: str, name: str, **kwargs): + """ + **Create a client group for the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-clients-group + + - organizationId (string): Organization ID + - name (string): The name of the group for access control model + - description (string): User provided description of the group + - members (array): List of client members associated with the group + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/nac/clients/groups" + + body_params = [ + "name", + "description", + "members", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationNacClientsGroup(self, organizationId: str, groupId: str, **kwargs): + """ + **Update an existing client group for the organization with bulk member operations** + https://developer.cisco.com/meraki/api-v1/#!update-organization-nac-clients-group + + - organizationId (string): Organization ID + - groupId (string): Group ID + - name (string): The name of the group for access control model + - description (string): User provided description of the group + - members (object): Bulk member operations with addList/removeList arrays + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + groupId = urllib.parse.quote(groupId, safe="") + resource = f"/organizations/{organizationId}/nac/clients/groups/{groupId}" + + body_params = [ + "name", + "description", + "members", + ] + 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 deleteOrganizationNacClientsGroup(self, organizationId: str, groupId: str): + """ + **Delete an existing client group for the organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-nac-clients-group + + - organizationId (string): Organization ID + - groupId (string): Group ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + groupId = urllib.parse.quote(groupId, safe="") + resource = f"/organizations/{organizationId}/nac/clients/groups/{groupId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def updateOrganizationNacClient(self, organizationId: str, clientId: str, mac: str, **kwargs): + """ + **Update an existing client for the organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-nac-client + + - organizationId (string): Organization ID + - clientId (string): Client ID + - mac (string): The MAC address of the client + - type (string): Type describes if the network client belongs to an individual user or corporate + - owner (string): The username of the owner of the client + - description (string): User provided description for the client + - uuid (string): Universally unique identifier of the client + - userDetails (array): List of users of this network client + - oui (object): Organizationally unique identifier assigned to a vendor of the client + - groups (object): Client group membership changes + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = ["BYOD", "corporate"] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + + organizationId = urllib.parse.quote(organizationId, safe="") + clientId = urllib.parse.quote(clientId, safe="") + resource = f"/organizations/{organizationId}/nac/clients/{clientId}" + + body_params = [ + "type", + "owner", + "mac", + "description", + "uuid", + "userDetails", + "oui", + "groups", + ] + 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 diff --git a/meraki/api/batch/networks.py b/meraki/api/batch/networks.py index 5fd9dc9..3b6e6d9 100644 --- a/meraki/api/batch/networks.py +++ b/meraki/api/batch/networks.py @@ -203,6 +203,31 @@ def removeNetworkDevices(self, networkId: str, serial: str, **kwargs): } return action + def updateNetworkDevicesSyslogServers(self, networkId: str, servers: list, **kwargs): + """ + **Updates the syslog servers configuration for a network.** + https://developer.cisco.com/meraki/api-v1/#!update-network-devices-syslog-servers + + - networkId (string): Network ID + - servers (array): A list of the syslog servers for this network; suggested maximum array size is 10 + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/devices/syslog/servers" + + body_params = [ + "servers", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "servers", + "body": payload, + } + return action + def updateNetworkFirmwareUpgrades(self, networkId: str, **kwargs): """ **Update firmware upgrade information for a network** @@ -467,6 +492,7 @@ def updateNetworkFloorPlan(self, networkId: str, floorPlanId: str, **kwargs): - topLeftCorner (object): The longitude and latitude of the top left corner of your floor plan. - topRightCorner (object): The longitude and latitude of the top right corner of your floor plan. - floorNumber (number): The floor number of the floors within the building + - buildingId (string): The ID of the building that this floor belongs to. - imageContents (string): The file contents (a base 64 encoded string) of your new image. Supported formats are PNG, GIF, and JPG. Note that all images are saved as PNG files, regardless of the format they are uploaded in. If you upload a new image, and you do NOT specify any new geolocation fields ('center, 'topLeftCorner', etc), the floor plan will be recentered with no rotation in order to maintain the aspect ratio of your new image. """ @@ -484,6 +510,7 @@ def updateNetworkFloorPlan(self, networkId: str, floorPlanId: str, **kwargs): "topLeftCorner", "topRightCorner", "floorNumber", + "buildingId", "imageContents", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -633,6 +660,58 @@ def deleteNetworkGroupPolicy(self, networkId: str, groupPolicyId: str, **kwargs) } return action + def updateNetworkLocationScanning(self, networkId: str, **kwargs): + """ + **Change scanning API settings** + https://developer.cisco.com/meraki/api-v1/#!update-network-location-scanning + + - networkId (string): Network ID + - analyticsEnabled (boolean): Collect location and scanning analytics + - scanningApiEnabled (boolean): Enable push API for scanning events, analytics must be enabled + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/locationScanning" + + body_params = [ + "analyticsEnabled", + "scanningApiEnabled", + ] + 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 updateNetworkLocationScanningHttpServers(self, networkId: str, endpoints: list, **kwargs): + """ + **Set the list of scanning API receivers. Old receivers will be removed** + https://developer.cisco.com/meraki/api-v1/#!update-network-location-scanning-http-servers + + - networkId (string): Network ID + - endpoints (array): A set of http server configurations + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/locationScanning/httpServers" + + body_params = [ + "endpoints", + ] + 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 createNetworkMerakiAuthUser(self, networkId: str, email: str, authorizations: list, **kwargs): """ **Authorize a user configured with Meraki Authentication for a network (currently supports 802.1X, splash guest, and client VPN users, and currently, organizations have a 50,000 user cap)** @@ -742,10 +821,17 @@ def createNetworkMqttBroker(self, networkId: str, name: str, host: str, port: in - port (integer): Host port though which the MQTT broker can be reached. - security (object): Security settings of the MQTT broker. - authentication (object): Authentication settings of the MQTT broker + - productType (string): The product type for which the MQTT broker is being created. """ kwargs.update(locals()) + if "productType" in kwargs: + options = ["camera", "wireless"] + assert kwargs["productType"] in options, ( + f'''"productType" cannot be "{kwargs["productType"]}", & must be set to one of: {options}''' + ) + networkId = urllib.parse.quote(networkId, safe="") resource = f"/networks/{networkId}/mqttBrokers" @@ -755,6 +841,7 @@ def createNetworkMqttBroker(self, networkId: str, name: str, host: str, port: in "port", "security", "authentication", + "productType", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -828,6 +915,7 @@ def updateNetworkSettings(self, networkId: str, **kwargs): - remoteStatusPageEnabled (boolean): Enables / disables access to the device status page (http://[device's LAN IP]). Optional. Can only be set if localStatusPageEnabled is set to true - localStatusPage (object): A hash of Local Status page(s)' authentication options applied to the Network. - securePort (object): A hash of SecureConnect options applied to the Network. + - fips (object): A hash of FIPS options applied to the Network - namedVlans (object): A hash of Named VLANs options applied to the Network. """ @@ -841,6 +929,7 @@ def updateNetworkSettings(self, networkId: str, **kwargs): "remoteStatusPageEnabled", "localStatusPage", "securePort", + "fips", "namedVlans", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -851,6 +940,116 @@ def updateNetworkSettings(self, networkId: str, **kwargs): } return action + def createNetworkSitesBuilding(self, networkId: str, name: str, **kwargs): + """ + **Create a new building** + https://developer.cisco.com/meraki/api-v1/#!create-network-sites-building + + - networkId (string): Network ID + - name (string): The name of the building + - floors (array): The floors of the building + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/sites/buildings" + + body_params = [ + "name", + "floors", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def deleteNetworkSitesBuilding(self, networkId: str, buildingId: str): + """ + **Delete a building** + https://developer.cisco.com/meraki/api-v1/#!delete-network-sites-building + + - networkId (string): Network ID + - buildingId (string): Building ID + """ + + networkId = urllib.parse.quote(networkId, safe="") + buildingId = urllib.parse.quote(buildingId, safe="") + resource = f"/networks/{networkId}/sites/buildings/{buildingId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def updateNetworkSitesBuilding(self, networkId: str, buildingId: str, **kwargs): + """ + **Update a building** + https://developer.cisco.com/meraki/api-v1/#!update-network-sites-building + + - networkId (string): Network ID + - buildingId (string): Building ID + - name (string): The name of the building + - floors (array): The floors of the building + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + buildingId = urllib.parse.quote(buildingId, safe="") + resource = f"/networks/{networkId}/sites/buildings/{buildingId}" + + body_params = [ + "name", + "floors", + ] + 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 updateNetworkSnmpTraps(self, networkId: str, **kwargs): + """ + **Update the SNMP trap configuration for the specified network** + https://developer.cisco.com/meraki/api-v1/#!update-network-snmp-traps + + - networkId (string): Network ID + - mode (string): SNMP trap protocol version + - receiver (object): Stores the port and address + - v2 (object): V2 mode + - v3 (object): V3 mode + """ + + kwargs.update(locals()) + + if "mode" in kwargs: + options = ["disabled", "v1/v2c", "v3"] + assert kwargs["mode"] in options, f'''"mode" cannot be "{kwargs["mode"]}", & must be set to one of: {options}''' + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/snmp/traps" + + body_params = [ + "mode", + "receiver", + "v2", + "v3", + ] + 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 splitNetwork(self, networkId: str): """ **Split a combined network into individual networks for each type of device** @@ -903,15 +1102,17 @@ 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. """ - kwargs = locals() + kwargs.update(locals()) networkId = urllib.parse.quote(networkId, safe="") resource = f"/networks/{networkId}/vlanProfiles" body_params = [ "name", + "allowedVlans", "vlanNames", "vlanGroups", "iname", diff --git a/meraki/api/batch/organizations.py b/meraki/api/batch/organizations.py index 4b8adf6..202a0cc 100644 --- a/meraki/api/batch/organizations.py +++ b/meraki/api/batch/organizations.py @@ -420,6 +420,255 @@ def deleteOrganizationAlertsProfile(self, organizationId: str, alertConfigId: st } return action + def createOrganizationApiPushProfile(self, organizationId: str, iname: str, topic: dict, receiver: dict, **kwargs): + """ + **Create a new push profile** + https://developer.cisco.com/meraki/api-v1/#!create-organization-api-push-profile + + - organizationId (string): Organization ID + - iname (string): Immutable name of the resource. Must be unique within resources of this type. + - topic (object): Push topic + - receiver (object): Push receiver profile + - name (string): Name of push profile + - description (string): Description of push profile + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/api/push/profiles" + + body_params = [ + "iname", + "name", + "description", + "topic", + "receiver", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationApiPushProfile(self, organizationId: str, iname: str, **kwargs): + """ + **Update a push profile** + https://developer.cisco.com/meraki/api-v1/#!update-organization-api-push-profile + + - organizationId (string): Organization ID + - iname (string): Iname + - name (string): Name of push profile + - description (string): Description of push profile + - topic (object): Push topic + - receiver (object): Push receiver profile + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + iname = urllib.parse.quote(iname, safe="") + resource = f"/organizations/{organizationId}/api/push/profiles/{iname}" + + body_params = [ + "name", + "description", + "topic", + "receiver", + ] + 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 deleteOrganizationApiPushProfile(self, organizationId: str, iname: str): + """ + **Delete a push profile** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-api-push-profile + + - organizationId (string): Organization ID + - iname (string): Iname + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + iname = urllib.parse.quote(iname, safe="") + resource = f"/organizations/{organizationId}/api/push/profiles/{iname}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def createOrganizationApiPushReceiversProfile(self, organizationId: str, iname: str, receiver: dict, **kwargs): + """ + **Create a new push receiver profile** + https://developer.cisco.com/meraki/api-v1/#!create-organization-api-push-receivers-profile + + - organizationId (string): Organization ID + - iname (string): Immutable name of the resource. Must be unique within resources of this type. + - receiver (object): Webhook receiver + - name (string): Name of receiver profile + - description (string): Description of receiver profile + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/api/push/receivers/profiles" + + body_params = [ + "iname", + "name", + "description", + "receiver", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def deleteOrganizationApiPushReceiversProfile(self, organizationId: str, iname: str): + """ + **Delete a push receiver profile** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-api-push-receivers-profile + + - organizationId (string): Organization ID + - iname (string): Iname + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + iname = urllib.parse.quote(iname, safe="") + resource = f"/organizations/{organizationId}/api/push/receivers/profiles/{iname}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def updateOrganizationApiPushReceiversProfile(self, organizationId: str, iname: str, **kwargs): + """ + **Update a push receiver profile** + https://developer.cisco.com/meraki/api-v1/#!update-organization-api-push-receivers-profile + + - organizationId (string): Organization ID + - iname (string): Iname + - name (string): Name of the receiver profile + - description (string): Description of the receiver profile + - receiver (object): API Push Receiver details + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + iname = urllib.parse.quote(iname, safe="") + resource = f"/organizations/{organizationId}/api/push/receivers/profiles/{iname}" + + body_params = [ + "name", + "description", + "receiver", + ] + 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 createOrganizationAuthRadiusServer(self, organizationId: str, address: str, secret: str, **kwargs): + """ + **Add an organization-wide RADIUS server** + https://developer.cisco.com/meraki/api-v1/#!create-organization-auth-radius-server + + - organizationId (string): Organization ID + - address (string): The IP address or FQDN of the RADIUS server + - secret (string): Shared secret of the RADIUS server + - name (string): The name of the RADIUS server + - modes (array): Available server modes + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/auth/radius/servers" + + body_params = [ + "name", + "address", + "modes", + "secret", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationAuthRadiusServer(self, organizationId: str, serverId: str, **kwargs): + """ + **Update an organization-wide RADIUS server** + https://developer.cisco.com/meraki/api-v1/#!update-organization-auth-radius-server + + - organizationId (string): Organization ID + - serverId (string): Server ID + - name (string): The name of the RADIUS server + - address (string): The IP address or FQDN of the RADIUS server + - modes (array): Available server modes + - secret (string): Shared secret of the RADIUS server + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + serverId = urllib.parse.quote(serverId, safe="") + resource = f"/organizations/{organizationId}/auth/radius/servers/{serverId}" + + body_params = [ + "name", + "address", + "modes", + "secret", + ] + 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 deleteOrganizationAuthRadiusServer(self, organizationId: str, serverId: str): + """ + **Delete an organization-wide RADIUS server from a organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-auth-radius-server + + - organizationId (string): Organization ID + - serverId (string): Server ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + serverId = urllib.parse.quote(serverId, safe="") + resource = f"/organizations/{organizationId}/auth/radius/servers/{serverId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + def createOrganizationBrandingPolicy(self, organizationId: str, name: str, **kwargs): """ **Add a new branding policy to an organization** @@ -541,6 +790,41 @@ def deleteOrganizationBrandingPolicy(self, organizationId: str, brandingPolicyId } return action + def importOrganizationCertificates(self, organizationId: str, managedBy: str, contents: str, description: str, **kwargs): + """ + **Import certificate for this organization** + https://developer.cisco.com/meraki/api-v1/#!import-organization-certificates + + - organizationId (string): Organization ID + - 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 + """ + + kwargs = locals() + + if "managedBy" in kwargs: + 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}''' + ) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/certificates/import" + + body_params = [ + "managedBy", + "contents", + "description", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + def createOrganizationConfigTemplate(self, organizationId: str, name: str, **kwargs): """ **Create a new configuration template** @@ -860,6 +1144,26 @@ def createOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, de } return action + def bulkOrganizationDevicesPacketCaptureSchedulesDelete(self, organizationId: str, scheduleIds: list, **kwargs): + """ + **Delete packet capture schedules** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-packet-capture-schedules-delete + + - organizationId (string): Organization ID + - scheduleIds (array): Delete the packet capture schedules of the specified schedule ids + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/bulkDelete" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + def reorderOrganizationDevicesPacketCaptureSchedules(self, organizationId: str, order: list, **kwargs): """ **Bulk update priorities of pcap schedules** @@ -936,38 +1240,262 @@ def deleteOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, sc kwargs = locals() organizationId = urllib.parse.quote(organizationId, safe="") - scheduleId = urllib.parse.quote(scheduleId, safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/{scheduleId}" + scheduleId = urllib.parse.quote(scheduleId, safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/{scheduleId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def tasksOrganizationDevicesPacketCapture(self, organizationId: str, packetId: str, task: str, **kwargs): + """ + **Enqueues a task for a specific packet capture. This endpoint has a sustained rate limit of one request every 60 seconds.** + https://developer.cisco.com/meraki/api-v1/#!tasks-organization-devices-packet-capture + + - organizationId (string): Organization ID + - packetId (string): Packet ID + - task (string): Type of task to enqueue. It can be one of: ["analysis", "reasoning", "summary", "highlights", "title", "flow"] + - networkId (string): Parameter to validate authorization by network access + """ + + kwargs.update(locals()) + + if "task" in kwargs: + options = ["analysis", "flow", "highlights", "reasoning", "summary", "title"] + assert kwargs["task"] in options, f'''"task" cannot be "{kwargs["task"]}", & must be set to one of: {options}''' + + organizationId = urllib.parse.quote(organizationId, safe="") + packetId = urllib.parse.quote(packetId, safe="") + resource = f"/organizations/{organizationId}/devices/packetCaptures/{packetId}/tasks" + + body_params = [ + "networkId", + "task", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "enqueue_task", + "body": payload, + } + return action + + def bulkOrganizationDevicesPlacementPositionsUpdate(self, organizationId: str, serials: list, **kwargs): + """ + **Bulk update the attributes related to positions for provided devices** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-placement-positions-update + + - organizationId (string): Organization ID + - serials (array): List of device serials on a floor plan to update + - height (object): Height of the devices on the floor plan + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/devices/placement/positions/bulkUpdate" + + body_params = [ + "serials", + "height", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "bulk_update", + "body": payload, + } + return action + + def updateOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str, **kwargs): + """ + **Update an early access feature opt-in for an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-early-access-features-opt-in + + - organizationId (string): Organization ID + - optInId (string): Opt in ID + - limitScopeToNetworks (array): A list of network IDs to apply the opt-in to + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + optInId = urllib.parse.quote(optInId, safe="") + resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" + + body_params = [ + "limitScopeToNetworks", + ] + 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 updateOrganizationExtensionsSdwanmanagerInterconnect( + self, organizationId: str, interconnectId: str, name: str, status: str, **kwargs + ): + """ + **Update name and status of an Interconnect** + https://developer.cisco.com/meraki/api-v1/#!update-organization-extensions-sdwanmanager-interconnect + + - organizationId (string): Organization ID + - interconnectId (string): Interconnect ID + - name (string): Interconnect name + - status (string): Interconnect status + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + interconnectId = urllib.parse.quote(interconnectId, safe="") + resource = f"/organizations/{organizationId}/extensions/sdwanmanager/interconnects/{interconnectId}" + + body_params = [ + "name", + "status", + ] + 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 createOrganizationExtensionsThousandEyesNetwork(self, organizationId: str, enabled: bool, networkId: str, **kwargs): + """ + **Add a ThousandEyes agent for this network. Only valid for networks with access to Meraki Insight. Organization must have a ThousandEyes account connected to perform this action.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-extensions-thousand-eyes-network + + - organizationId (string): Organization ID + - enabled (boolean): Whether or not the ThousandEyes agent is enabled for the network. + - networkId (string): Network that will have the ThousandEyes agent installed on. + - tests (array): An array of tests to be created + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks" + + body_params = [ + "enabled", + "networkId", + "tests", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationExtensionsThousandEyesNetwork(self, organizationId: str, networkId: str, enabled: bool, **kwargs): + """ + **Update a ThousandEyes agent from this network. Only valid for networks with access to Meraki Insight. Organization must have a ThousandEyes account connected to perform this action.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-extensions-thousand-eyes-network + + - organizationId (string): Organization ID + - networkId (string): Network ID + - enabled (boolean): Whether or not the ThousandEyes agent is enabled for the network. + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks/{networkId}" + + body_params = [ + "enabled", + ] + 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 deleteOrganizationExtensionsThousandEyesNetwork(self, organizationId: str, networkId: str): + """ + **Delete a ThousandEyes agent from this network. Only valid for networks with access to Meraki Insight. Organization must have a ThousandEyes account connected to perform this action.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-extensions-thousand-eyes-network + + - organizationId (string): Organization ID + - networkId (string): Network ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks/{networkId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def createOrganizationExtensionsThousandEyesTest(self, organizationId: str, **kwargs): + """ + **Create a ThousandEyes test based on a provided test template. Only valid for networks with access to Meraki Insight. Organization must have a ThousandEyes account connected to perform this action.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-extensions-thousand-eyes-test + + - organizationId (string): Organization ID + - tests (array): An array of tests to be created + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/tests" + body_params = [ + "tests", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { "resource": resource, - "operation": "destroy", + "operation": "create", + "body": payload, } return action - def updateOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str, **kwargs): + def resolveOrganizationIamAdminsAdministratorsMePermissions( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Update an early access feature opt-in for an organization** - https://developer.cisco.com/meraki/api-v1/#!update-organization-early-access-features-opt-in + **List the authenticated caller admin's permissions for an organization. Org-wide read and write admins receive a single organization-scoped permission item instead of per-network items. Scoped callers receive the network resources they can access in the requested organization, along with the effective allowed action for each resource.** + https://developer.cisco.com/meraki/api-v1/#!resolve-organization-iam-admins-administrators-me-permissions - organizationId (string): Organization ID - - optInId (string): Opt in ID - - limitScopeToNetworks (array): A list of network IDs to apply the opt-in to + - 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 + - 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. """ kwargs.update(locals()) organizationId = urllib.parse.quote(organizationId, safe="") - optInId = urllib.parse.quote(optInId, safe="") - resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" + resource = f"/organizations/{organizationId}/iam/admins/administrators/me/permissions/resolve" body_params = [ - "limitScopeToNetworks", + "perPage", + "startingAfter", + "endingBefore", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { "resource": resource, - "operation": "update", + "operation": "permissions/resolve", "body": payload, } return action @@ -1253,6 +1781,7 @@ def createOrganizationNetwork(self, organizationId: str, name: str, productTypes - timeZone (string): The timezone of the network. For a list of allowed timezones, please see the 'TZ' column in the table in this article. - copyFromNetworkId (string): The ID of the network to copy configuration from. Other provided parameters will override the copied configuration, except type which must match this network's type exactly. - notes (string): Add any notes or additional information about this network here. + - details (array): An array of details """ kwargs.update(locals()) @@ -1267,6 +1796,7 @@ def createOrganizationNetwork(self, organizationId: str, name: str, productTypes "timeZone", "copyFromNetworkId", "notes", + "details", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -1305,6 +1835,150 @@ def combineOrganizationNetworks(self, organizationId: str, name: str, networkIds } return action + def createOrganizationNetworksGroup(self, organizationId: str, name: str, **kwargs): + """ + **Create a network group** + https://developer.cisco.com/meraki/api-v1/#!create-organization-networks-group + + - organizationId (string): Organization ID + - name (string): The name of the network group + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/networks/groups" + + body_params = [ + "name", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationNetworksGroup(self, organizationId: str, groupId: str, name: str, **kwargs): + """ + **Update a network group** + https://developer.cisco.com/meraki/api-v1/#!update-organization-networks-group + + - organizationId (string): Organization ID + - groupId (string): Group ID + - name (string): The new name of the network group + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + groupId = urllib.parse.quote(groupId, safe="") + resource = f"/organizations/{organizationId}/networks/groups/{groupId}" + + body_params = [ + "name", + ] + 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 deleteOrganizationNetworksGroup(self, organizationId: str, groupId: str): + """ + **Delete a network group** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-networks-group + + - organizationId (string): Organization ID + - groupId (string): Group ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + groupId = urllib.parse.quote(groupId, safe="") + resource = f"/organizations/{organizationId}/networks/groups/{groupId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def bulkOrganizationNetworksGroupAssign(self, organizationId: str, groupId: str, networkIds: list, **kwargs): + """ + **Add networks to a network group** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-networks-group-assign + + - organizationId (string): Organization ID + - groupId (string): Group ID + - networkIds (array): A list of network IDs to add to the network group + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + groupId = urllib.parse.quote(groupId, safe="") + resource = f"/organizations/{organizationId}/networks/groups/{groupId}/bulkAssign" + + body_params = [ + "networkIds", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "bulk_assign", + "body": payload, + } + return action + + def bulkOrganizationNetworksGroupUnassign(self, organizationId: str, groupId: str, networkIds: list, **kwargs): + """ + **Remove networks from a network group** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-networks-group-unassign + + - organizationId (string): Organization ID + - groupId (string): Group ID + - networkIds (array): A list of network IDs to remove from the network group + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + groupId = urllib.parse.quote(groupId, safe="") + resource = f"/organizations/{organizationId}/networks/groups/{groupId}/bulkUnassign" + + body_params = [ + "networkIds", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "bulk_unassign", + "body": payload, + } + return action + + def deleteOrganizationOpenRoamingCertificate(self, organizationId: str, id: str): + """ + **Delete an open roaming certificate.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-open-roaming-certificate + + - organizationId (string): Organization ID + - id (string): ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/openRoaming/certificates/{id}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + def createOrganizationPoliciesGlobalFirewallRuleset(self, organizationId: str, name: str, **kwargs): """ **Create an Organization-Wide Policy Firewall Ruleset** @@ -1885,6 +2559,93 @@ def deleteOrganizationPolicyObject(self, organizationId: str, policyObjectId: st } return action + def createOrganizationRoutingVrf(self, organizationId: str, name: str, **kwargs): + """ + **Add an organization-wide VRF (Virtual Routing and Forwarding)** + https://developer.cisco.com/meraki/api-v1/#!create-organization-routing-vrf + + - organizationId (string): Organization ID + - name (string): The name of the VRF (Virtual Routing and Forwarding) + - description (string): Description of the VRF (Virtual Routing and Forwarding) + - routeDistinguisher (string): RD (Route Distinguisher) for the VRF (Virtual Routing and Forwarding) + - routeTarget (string): Route target are used to control the import and export of routes between VRFs + - appliance (object): This parameter is used to enable or disable the VRF on the WAN appliance + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/routing/vrfs" + + body_params = [ + "name", + "description", + "routeDistinguisher", + "routeTarget", + "appliance", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationRoutingVrf(self, organizationId: str, vrfId: str, **kwargs): + """ + **Update an organization-wide VRF (Virtual Routing and Forwarding)** + https://developer.cisco.com/meraki/api-v1/#!update-organization-routing-vrf + + - organizationId (string): Organization ID + - vrfId (string): Vrf ID + - name (string): The name of the VRF (Virtual Routing and Forwarding) + - description (string): Description of the VRF (Virtual Routing and Forwarding) + - routeDistinguisher (string): RD (Route Distinguisher) for the VRF (Virtual Routing and Forwarding) + - routeTarget (string): Route target are used to control the import and export of routes between VRFs + - appliance (object): This parameter is used to enable or disable the VRF on the WAN appliance + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + vrfId = urllib.parse.quote(vrfId, safe="") + resource = f"/organizations/{organizationId}/routing/vrfs/{vrfId}" + + body_params = [ + "name", + "description", + "routeDistinguisher", + "routeTarget", + "appliance", + ] + 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 deleteOrganizationRoutingVrf(self, organizationId: str, vrfId: str): + """ + **Delete a VRF (Virtual Routing and Forwarding) from a organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-routing-vrf + + - organizationId (string): Organization ID + - vrfId (string): Vrf ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + vrfId = urllib.parse.quote(vrfId, safe="") + resource = f"/organizations/{organizationId}/routing/vrfs/{vrfId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + def createOrganizationSamlIdp(self, organizationId: str, x509certSha1Fingerprint: str, **kwargs): """ **Create a SAML IdP for your organization.** @@ -2081,6 +2842,33 @@ def detachOrganizationSaseSites(self, organizationId: str, **kwargs): } return action + def enrollOrganizationSaseSites(self, organizationId: str, **kwargs): + """ + **Enroll sites in this organization to Secure Access. For an organization, a maximum of 2500 sites can be enrolled if they are in spoke mode or a maximum of 10 sites can be enrolled in hub mode.** + https://developer.cisco.com/meraki/api-v1/#!enroll-organization-sase-sites + + - organizationId (string): Organization ID + - items (array): List of Meraki SD-WAN sites with the associated regions to be enrolled. + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/sase/sites/enroll" + + body_params = [ + "items", + "callback", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + def updateOrganizationSaseSite(self, organizationId: str, siteId: str, **kwargs): """ **Update the configuration for a site. Currently, only supports updating default route enablement.** @@ -2202,3 +2990,94 @@ def createOrganizationSplashThemeAsset(self, organizationId: str, themeIdentifie "body": payload, } return action + + def createOrganizationWebhooksPayloadTemplate(self, organizationId: str, name: str, **kwargs): + """ + **Create a webhook payload template for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-webhooks-payload-template + + - organizationId (string): Organization ID + - name (string): The name of the new template + - body (string): The liquid template used for the body of the webhook message. Either `body` or `bodyFile` must be specified. + - headers (array): The liquid template used with the webhook headers. + - bodyFile (string): A file containing liquid template used for the body of the webhook message. Either `body` or `bodyFile` must be specified. + - headersFile (string): A file containing the liquid template used with the webhook headers. + - sharing (object): Information on which entities have access to the template + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/webhooks/payloadTemplates" + + body_params = [ + "name", + "body", + "headers", + "bodyFile", + "headersFile", + "sharing", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def deleteOrganizationWebhooksPayloadTemplate(self, organizationId: str, payloadTemplateId: str): + """ + **Destroy a webhook payload template for an organization. Does not work for included templates ('wpt_00001', 'wpt_00002', 'wpt_00003', 'wpt_00004', 'wpt_00005', 'wpt_00006', 'wpt_00007' or 'wpt_00008')** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-webhooks-payload-template + + - organizationId (string): Organization ID + - payloadTemplateId (string): Payload template ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + payloadTemplateId = urllib.parse.quote(payloadTemplateId, safe="") + resource = f"/organizations/{organizationId}/webhooks/payloadTemplates/{payloadTemplateId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def updateOrganizationWebhooksPayloadTemplate(self, organizationId: str, payloadTemplateId: str, **kwargs): + """ + **Update a webhook payload template for an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-webhooks-payload-template + + - organizationId (string): Organization ID + - payloadTemplateId (string): Payload template ID + - name (string): The name of the template + - body (string): The liquid template used for the body of the webhook message. + - headers (array): The liquid template used with the webhook headers. + - bodyFile (string): A file containing liquid template used for the body of the webhook message. + - headersFile (string): A file containing the liquid template used with the webhook headers. + - sharing (object): Information on which entities have access to the template + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + payloadTemplateId = urllib.parse.quote(payloadTemplateId, safe="") + resource = f"/organizations/{organizationId}/webhooks/payloadTemplates/{payloadTemplateId}" + + body_params = [ + "name", + "body", + "headers", + "bodyFile", + "headersFile", + "sharing", + ] + 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 diff --git a/meraki/api/batch/secureConnect.py b/meraki/api/batch/secureConnect.py new file mode 100644 index 0000000..aa0b6f8 --- /dev/null +++ b/meraki/api/batch/secureConnect.py @@ -0,0 +1,224 @@ +import urllib + + +class ActionBatchSecureConnect(object): + def __init__(self): + super(ActionBatchSecureConnect, self).__init__() + + def createOrganizationSecureConnectPrivateResourceGroup(self, organizationId: str, name: str, **kwargs): + """ + **Adds a new private resource group to an organization.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-private-resource-group + + - organizationId (string): Organization ID + - name (string): Name of group. This is required and should be unique across all groups for a given organization. Name cannot have any special characters other than spaces and hyphens. + - description (string): Optional text description for a group. + - resourceIds (array): List of resource ids assigned to this group. + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResourceGroups" + + body_params = [ + "name", + "description", + "resourceIds", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationSecureConnectPrivateResourceGroup(self, organizationId: str, id: str, name: str, **kwargs): + """ + **Updates a specific private resource group.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-secure-connect-private-resource-group + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of group. This is required and should be unique across all groups for a given organization. Name cannot have any special characters other than spaces and hyphens. + - description (string): Optional text description for a group. + - resourceIds (array): List of resource ids assigned to this group. + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResourceGroups/{id}" + + body_params = [ + "name", + "description", + "resourceIds", + ] + 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 deleteOrganizationSecureConnectPrivateResourceGroup(self, organizationId: str, id: str): + """ + **Deletes a specific private resource group.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-secure-connect-private-resource-group + + - organizationId (string): Organization ID + - id (string): ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResourceGroups/{id}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def createOrganizationSecureConnectPrivateResource( + self, organizationId: str, name: str, accessTypes: list, resourceAddresses: list, **kwargs + ): + """ + **Adds a new private resource to the organization.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-private-resource + + - organizationId (string): Organization ID + - name (string): Name of resource. This is required and should be unique across all resources for a given organization. Name cannot have any special characters other than spaces and hyphens. + - accessTypes (array): List of access types. + - resourceAddresses (array): List of resource addresses Protocols must be unique in this list. + - description (string): Optional text description for a resource. + - resourceGroupIds (array): List of resource group ids attached to this resource. + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResources" + + body_params = [ + "name", + "description", + "accessTypes", + "resourceAddresses", + "resourceGroupIds", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationSecureConnectPrivateResource( + self, organizationId: str, id: str, name: str, accessTypes: list, resourceAddresses: list, **kwargs + ): + """ + **Updates a specific private resource.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-secure-connect-private-resource + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of resource. This is required and should be unique across all resources for a given organization.Name cannot have any special characters other than spaces and hyphens. + - accessTypes (array): List of access types. + - resourceAddresses (array): List of resource addresses Protocols must be unique in this list. + - description (string): Optional text description for resource. + - resourceGroupIds (array): List of resource group ids attached to this resource. + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResources/{id}" + + body_params = [ + "name", + "description", + "accessTypes", + "resourceAddresses", + "resourceGroupIds", + ] + 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 deleteOrganizationSecureConnectPrivateResource(self, organizationId: str, id: str): + """ + **Deletes a specific private resource. If this is the last resource in a resource group you must remove it from that resource group before deleting.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-secure-connect-private-resource + + - organizationId (string): Organization ID + - id (string): ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResources/{id}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def createOrganizationSecureConnectSite(self, organizationId: str, **kwargs): + """ + **Enroll sites in this organization to Secure Connect. For an organization, a maximum of 4000 sites can be enrolled if they are in spoke mode or a maximum of 10 sites can be enrolled in hub mode.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-site + + - organizationId (string): Organization ID + - enrollments (array): List of Meraki SD-WAN sites with the associated regions to be enrolled. + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/secureConnect/sites" + + body_params = [ + "enrollments", + "callback", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def deleteOrganizationSecureConnectSites(self, organizationId: str, **kwargs): + """ + **Detach given sites from Secure Connect** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-secure-connect-sites + + - organizationId (string): Organization ID + - sites (array): List of site IDs to detach + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/secureConnect/sites" + + action = { + "resource": resource, + "operation": "destroy", + } + return action diff --git a/meraki/api/batch/sensor.py b/meraki/api/batch/sensor.py index 777ea1c..63e5f43 100644 --- a/meraki/api/batch/sensor.py +++ b/meraki/api/batch/sensor.py @@ -12,9 +12,10 @@ def createDeviceSensorCommand(self, serial: str, operation: str, **kwargs): - serial (string): Serial - operation (string): Operation to run on the sensor. 'enableDownstreamPower', 'disableDownstreamPower', and 'cycleDownstreamPower' turn power on/off to the device that is connected downstream of an MT40 power monitor. 'refreshData' causes an MT15 or MT40 device to upload its latest readings so that they are immediately available in the Dashboard API. + - arguments (array): Additional options to provide to commands run on the sensor, each with a corresponding 'name' and 'value'. """ - kwargs = locals() + kwargs.update(locals()) if "operation" in kwargs: options = ["cycleDownstreamPower", "disableDownstreamPower", "enableDownstreamPower", "refreshData"] @@ -26,6 +27,7 @@ def createDeviceSensorCommand(self, serial: str, operation: str, **kwargs): resource = f"/devices/{serial}/sensor/commands" body_params = [ + "arguments", "operation", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} diff --git a/meraki/api/batch/sm.py b/meraki/api/batch/sm.py index fab4bc9..738e149 100644 --- a/meraki/api/batch/sm.py +++ b/meraki/api/batch/sm.py @@ -5,6 +5,166 @@ class ActionBatchSm(object): def __init__(self): super(ActionBatchSm, self).__init__() + def createNetworkSmScript(self, networkId: str, name: str, platform: str, **kwargs): + """ + **Create a new script** + https://developer.cisco.com/meraki/api-v1/#!create-network-sm-script + + - networkId (string): Network ID + - name (string): Unique name to identify this script. + - platform (string): Platform that this script will run on. + - scope (string): The target scope of the script. (Either scope or targetGroupId must be present.) + - tags (array): The target tags of the script as an array of strings. Required if scope is one of withAny, withoutAny, withAll, withoutAll. + - targetGroupId (string): The tag target group ID that should be used to scope devices. Either scope or targetGroupId must be present. + - description (string): Description of this script. + - runAsUsername (string): Username that script should run as. + - externalSource (object): Properties for a script provided by a url instead of an upload + - upload (object): Properties for a script provided as an upload instead of a url + - schedule (object): When the script is intended to run + """ + + kwargs.update(locals()) + + if "platform" in kwargs and kwargs["platform"] is not None: + options = ["Windows", "macOS"] + assert kwargs["platform"] in options, ( + f'''"platform" cannot be "{kwargs["platform"]}", & must be set to one of: {options}''' + ) + if "scope" in kwargs: + options = ["all", "none", "withAll", "withAny", "withoutAll", "withoutAny"] + assert kwargs["scope"] in options, f'''"scope" cannot be "{kwargs["scope"]}", & must be set to one of: {options}''' + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/sm/scripts" + + body_params = [ + "name", + "platform", + "scope", + "tags", + "targetGroupId", + "description", + "runAsUsername", + "externalSource", + "upload", + "schedule", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def createNetworkSmScriptsJob(self, networkId: str, scriptId: str, **kwargs): + """ + **Create a job that will run a script on a set of devices** + https://developer.cisco.com/meraki/api-v1/#!create-network-sm-scripts-job + + - networkId (string): Network ID + - scriptId (string): ID of script that should be run on the matching devices + - deviceIds (array): List of device IDs to run that should run this script + - deviceFilter (string): Create job on all devices in-scope or devices that have failed to run this script + """ + + kwargs.update(locals()) + + if "deviceFilter" in kwargs: + options = ["All", "Failed"] + assert kwargs["deviceFilter"] in options, ( + f'''"deviceFilter" cannot be "{kwargs["deviceFilter"]}", & must be set to one of: {options}''' + ) + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/sm/scripts/jobs" + + body_params = [ + "scriptId", + "deviceIds", + "deviceFilter", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateNetworkSmScript(self, networkId: str, scriptId: str, **kwargs): + """ + **Update an existing script** + https://developer.cisco.com/meraki/api-v1/#!update-network-sm-script + + - networkId (string): Network ID + - scriptId (string): Script ID + - name (string): Unique name to identify this script. + - platform (string): Platform that this script will run on. + - scope (string): The target scope of the script. (Either scope or targetGroupId must be present.) + - tags (array): The target tags of the script as an array of strings. Required if scope is one of withAny, withoutAny, withAll, withoutAll. + - targetGroupId (string): The tag target group ID that should be used to scope devices. Either scope or targetGroupId must be present. + - description (string): Description of this script. + - runAsUsername (string): Username that script should run as. + - externalSource (object): Properties for a script provided by a url instead of an upload + - upload (object): Properties for a script provided as an upload instead of a url + - schedule (object): When the script is intended to run + """ + + kwargs.update(locals()) + + if "platform" in kwargs and kwargs["platform"] is not None: + options = ["Windows", "macOS"] + assert kwargs["platform"] in options, ( + f'''"platform" cannot be "{kwargs["platform"]}", & must be set to one of: {options}''' + ) + if "scope" in kwargs: + options = ["all", "none", "withAll", "withAny", "withoutAll", "withoutAny"] + assert kwargs["scope"] in options, f'''"scope" cannot be "{kwargs["scope"]}", & must be set to one of: {options}''' + + networkId = urllib.parse.quote(networkId, safe="") + scriptId = urllib.parse.quote(scriptId, safe="") + resource = f"/networks/{networkId}/sm/scripts/{scriptId}" + + body_params = [ + "name", + "platform", + "scope", + "tags", + "targetGroupId", + "description", + "runAsUsername", + "externalSource", + "upload", + "schedule", + ] + 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 deleteNetworkSmScript(self, networkId: str, scriptId: str): + """ + **Delete a script** + https://developer.cisco.com/meraki/api-v1/#!delete-network-sm-script + + - networkId (string): Network ID + - scriptId (string): Script ID + """ + + networkId = urllib.parse.quote(networkId, safe="") + scriptId = urllib.parse.quote(scriptId, safe="") + resource = f"/networks/{networkId}/sm/scripts/{scriptId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + def deleteNetworkSmUserAccessDevice(self, networkId: str, userAccessDeviceId: str): """ **Delete a User Access Device** @@ -111,6 +271,108 @@ def deleteOrganizationSmAdminsRole(self, organizationId: str, roleId: str): } return action + def createOrganizationSmAppleCloudEnrollmentSyncJob(self, organizationId: str, **kwargs): + """ + **Enqueue a sync job for an ADE account** + https://developer.cisco.com/meraki/api-v1/#!create-organization-sm-apple-cloud-enrollment-sync-job + + - organizationId (string): Organization ID + - adeAccountId (string): ADE Account ID + - fullSync (boolean): Whether or not job is full sync (defaults to full sync) + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/sm/apple/cloudEnrollment/syncJobs" + + body_params = [ + "adeAccountId", + "fullSync", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def createOrganizationSmBulkEnrollmentToken(self, organizationId: str, networkId: str, expiresAt: str, **kwargs): + """ + **Create a PccBulkEnrollmentToken** + https://developer.cisco.com/meraki/api-v1/#!create-organization-sm-bulk-enrollment-token + + - organizationId (string): Organization ID + - networkId (string): The id of the associated node_group. + - expiresAt (string): The expiration date. + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/sm/bulkEnrollment/token" + + body_params = [ + "networkId", + "expiresAt", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationSmBulkEnrollmentToken(self, organizationId: str, tokenId: str, **kwargs): + """ + **Update a PccBulkEnrollmentToken** + https://developer.cisco.com/meraki/api-v1/#!update-organization-sm-bulk-enrollment-token + + - organizationId (string): Organization ID + - tokenId (string): Token ID + - networkId (string): The id of the associated node_group. + - expiresAt (string): The expiration date. + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + tokenId = urllib.parse.quote(tokenId, safe="") + resource = f"/organizations/{organizationId}/sm/bulkEnrollment/token/{tokenId}" + + body_params = [ + "networkId", + "expiresAt", + ] + 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 deleteOrganizationSmBulkEnrollmentToken(self, organizationId: str, tokenId: str): + """ + **Delete a PccBulkEnrollmentToken** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-sm-bulk-enrollment-token + + - organizationId (string): Organization ID + - tokenId (string): Token ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + tokenId = urllib.parse.quote(tokenId, safe="") + resource = f"/organizations/{organizationId}/sm/bulkEnrollment/token/{tokenId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + def updateOrganizationSmSentryPoliciesAssignments(self, organizationId: str, items: list, **kwargs): """ **Update an Organizations Sentry Policies using the provided list. Sentry Policies are ordered in descending order of priority (i.e. highest priority at the bottom, this is opposite the Dashboard UI). Policies not present in the request will be deleted.** diff --git a/meraki/api/batch/support.py b/meraki/api/batch/support.py new file mode 100644 index 0000000..e884c29 --- /dev/null +++ b/meraki/api/batch/support.py @@ -0,0 +1,3 @@ +class ActionBatchSupport(object): + def __init__(self): + super(ActionBatchSupport, self).__init__() diff --git a/meraki/api/batch/switch.py b/meraki/api/batch/switch.py index c469c7b..71d3516 100644 --- a/meraki/api/batch/switch.py +++ b/meraki/api/batch/switch.py @@ -30,6 +30,40 @@ def cycleDeviceSwitchPorts(self, serial: str, ports: list, **kwargs): } return action + def updateDeviceSwitchPortsMirror(self, serial: str, source: dict, destination: dict, **kwargs): + """ + **Update a port mirror** + https://developer.cisco.com/meraki/api-v1/#!update-device-switch-ports-mirror + + - serial (string): The switch identifier + - source (object): Source ports mirror configuration + - destination (object): Destination port mirror configuration + - tags (array): Port mirror tags + - role (string): Switch role can be source or destination + - comment (string): My pretty comment + """ + + kwargs.update(locals()) + + serial = urllib.parse.quote(serial, safe="") + resource = f"/devices/{serial}/switch/ports/mirror" + + body_params = [ + "serial", + "source", + "destination", + "tags", + "role", + "comment", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "mirrors/update", + "body": payload, + } + return action + def updateDeviceSwitchPort(self, serial: str, portId: str, **kwargs): """ **Update a switch port** @@ -45,6 +79,7 @@ def updateDeviceSwitchPort(self, serial: str, portId: str, **kwargs): - vlan (integer): The VLAN of the switch port. For a trunk port, this is the native VLAN. A null value will clear the value set for trunk ports. - voiceVlan (integer): The voice VLAN of the switch port. Only applicable to access ports. - allowedVlans (string): The VLANs allowed on the switch port. Only applicable to trunk ports. + - activeVlans (string): The VLANs that are active on the switch port. Only applicable to trunk ports. - isolationEnabled (boolean): The isolation status of the switch port. - rstpEnabled (boolean): The rapid spanning tree protocol status. - stpGuard (string): The state of the STP guard ('disabled', 'root guard', 'bpdu guard' or 'loop guard'). @@ -101,6 +136,7 @@ def updateDeviceSwitchPort(self, serial: str, portId: str, **kwargs): "vlan", "voiceVlan", "allowedVlans", + "activeVlans", "isolationEnabled", "rstpEnabled", "stpGuard", @@ -146,6 +182,12 @@ def createDeviceSwitchRoutingInterface(self, serial: str, name: str, **kwargs): - multicastRouting (string): Enable multicast support if, multicast routing between VLANs is required. Options are: 'disabled', 'enabled' or 'IGMP snooping querier'. Default is 'disabled'. - vlanId (integer): The VLAN this L3 interface is on. VLAN must be between 1 and 4094. - defaultGateway (string): The next hop for any traffic that isn't going to a directly connected subnet or over a static route. This IP address must exist in a subnet with a L3 interface. Required if this is the first IPv4 interface. + - isSwitchDefaultGateway (boolean): When true, the switch uses the IPv4 uplink gateway as its IPv4 default gateway. This can only be set if the interface is designated as the IPv4 uplink and the switch is running IOS XE version >= 17.18.3. + - uplinkV4 (boolean): When true, this interface is used as static IPv4 uplink. + - candidateUplinkV4 (boolean): When true, this interface is a UAC candidate for IPv4 Uplink. + - uplinkV6 (boolean): When true, this interface is used as static IPv6 uplink. + - staticV4Dns1 (string): Primary IPv4 DNS server address + - staticV4Dns2 (string): Secondary IPv4 DNS server address - ospfSettings (object): The OSPF routing settings of the interface. - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher @@ -176,6 +218,12 @@ def createDeviceSwitchRoutingInterface(self, serial: str, name: str, **kwargs): "multicastRouting", "vlanId", "defaultGateway", + "isSwitchDefaultGateway", + "uplinkV4", + "candidateUplinkV4", + "uplinkV6", + "staticV4Dns1", + "staticV4Dns2", "ospfSettings", "ipv6", "vrf", @@ -204,6 +252,12 @@ def updateDeviceSwitchRoutingInterface(self, serial: str, interfaceId: str, **kw - multicastRouting (string): Enable multicast support if, multicast routing between VLANs is required. Options are: 'disabled', 'enabled' or 'IGMP snooping querier'. Default is 'disabled'. - vlanId (integer): The VLAN this L3 interface is on. VLAN must be between 1 and 4094. - defaultGateway (string): The next hop for any traffic that isn't going to a directly connected subnet or over a static route. This IP address must exist in a subnet with a L3 interface. Required if this is the first IPv4 interface. + - isSwitchDefaultGateway (boolean): When true, the switch uses the IPv4 uplink gateway as its IPv4 default gateway. This can only be set if the interface is designated as the IPv4 uplink and the switch is running IOS XE version >= 17.18.3. + - uplinkV4 (boolean): When true, this interface is used as static IPv4 uplink. + - candidateUplinkV4 (boolean): When true, this interface is a UAC candidate for IPv4 Uplink. + - uplinkV6 (boolean): When true, this interface is used as static IPv6 uplink. + - staticV4Dns1 (string): Primary IPv4 DNS server address + - staticV4Dns2 (string): Secondary IPv4 DNS server address - ospfSettings (object): The OSPF routing settings of the interface. - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher @@ -231,6 +285,12 @@ def updateDeviceSwitchRoutingInterface(self, serial: str, interfaceId: str, **kw "multicastRouting", "vlanId", "defaultGateway", + "isSwitchDefaultGateway", + "uplinkV4", + "candidateUplinkV4", + "uplinkV6", + "staticV4Dns1", + "staticV4Dns2", "ospfSettings", "ipv6", "vrf", @@ -802,6 +862,7 @@ def createNetworkSwitchLinkAggregation(self, networkId: str, **kwargs): - networkId (string): Network ID - switchPorts (array): Array of switch or stack ports for creating aggregation group. Minimum 2 and maximum 8 ports are supported. - switchProfilePorts (array): Array of switch profile ports for creating aggregation group. Minimum 2 and maximum 8 ports are supported. + - esiMhPairId (string): ESI-MH pair ID. Required when creating a downstream aggregation across ESI-MH pair member switches. """ kwargs.update(locals()) @@ -812,6 +873,7 @@ def createNetworkSwitchLinkAggregation(self, networkId: str, **kwargs): body_params = [ "switchPorts", "switchProfilePorts", + "esiMhPairId", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -928,6 +990,97 @@ def updateNetworkSwitchPortSchedule(self, networkId: str, portScheduleId: str, * } return action + def createNetworkSwitchPortsProfile(self, networkId: str, **kwargs): + """ + **Create a port profile in a network** + https://developer.cisco.com/meraki/api-v1/#!create-network-switch-ports-profile + + - networkId (string): Network ID + - name (string): The name of the profile. + - description (string): Text describing the profile. + - tags (array): Space-seperated list of tags + - defaultRadiusProfileName (string): When present, the default RADIUS attribute value for RADIUS-based port profile application + - authentication (object): Authentication settings for RADIUS-based port profile application. + - port (object): Configuration settings for port profile + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/switch/ports/profiles" + + body_params = [ + "name", + "description", + "tags", + "defaultRadiusProfileName", + "authentication", + "port", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "profiles/create", + "body": payload, + } + return action + + def updateNetworkSwitchPortsProfile(self, networkId: str, id: str, **kwargs): + """ + **Update a port profile in a network** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-ports-profile + + - networkId (string): Network ID + - id (string): ID + - name (string): The name of the profile. + - description (string): Text describing the profile. + - tags (array): Space-seperated list of tags + - defaultRadiusProfileName (string): When present, the default RADIUS attribute value for RADIUS-based port profile application + - authentication (object): Authentication settings for RADIUS-based port profile application. + - port (object): Configuration settings for port profile + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/networks/{networkId}/switch/ports/profiles/{id}" + + body_params = [ + "name", + "description", + "tags", + "defaultRadiusProfileName", + "authentication", + "port", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "profiles/update", + "body": payload, + } + return action + + def deleteNetworkSwitchPortsProfile(self, networkId: str, id: str): + """ + **Delete a port profile from a network** + https://developer.cisco.com/meraki/api-v1/#!delete-network-switch-ports-profile + + - networkId (string): Network ID + - id (string): ID + """ + + networkId = urllib.parse.quote(networkId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/networks/{networkId}/switch/ports/profiles/{id}" + + action = { + "resource": resource, + "operation": "profiles/destroy", + } + return action + def createNetworkSwitchQosRule(self, networkId: str, vlan: int, **kwargs): """ **Add a quality of service rule** @@ -1245,6 +1398,105 @@ def updateNetworkSwitchSettings(self, networkId: str, **kwargs): } return action + def updateNetworkSwitchSpanningTree(self, networkId: str, **kwargs): + """ + **Updates Spanning Tree configuration** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-spanning-tree + + - networkId (string): Network ID + - enabled (boolean): Network-level spanning Tree enable + - mode (string): Catalyst Spanning Tree Protocol mode (mst, rpvst+) + - priorities (array): Spanning tree priority for switches/stacks or switch templates. An empty array will clear the priority settings. + """ + + kwargs.update(locals()) + + if "mode" in kwargs: + options = ["mst", "rpvst+"] + assert kwargs["mode"] in options, f'''"mode" cannot be "{kwargs["mode"]}", & must be set to one of: {options}''' + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/switch/spanningTree" + + body_params = [ + "enabled", + "mode", + "priorities", + ] + 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 updateNetworkSwitchStack(self, networkId: str, switchStackId: str, **kwargs): + """ + **Update a switch stack** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-stack + + - networkId (string): Network ID + - switchStackId (string): Switch stack ID + - name (string): The name of the stack + - members (array): The list of switches that should be in the stack + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + switchStackId = urllib.parse.quote(switchStackId, safe="") + resource = f"/networks/{networkId}/switch/stacks/{switchStackId}" + + body_params = [ + "name", + "members", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "stacks/actions/update", + "body": payload, + } + return action + + def updateNetworkSwitchStackPortsMirror( + self, networkId: str, switchStackId: str, source: dict, destination: dict, **kwargs + ): + """ + **Update switch port mirrors for switch stacks** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-stack-ports-mirror + + - networkId (string): Network ID + - switchStackId (string): Switch stack ID + - source (object): Source port details + - destination (object): Destination port Details + - tags (array): Port mirror tags + - role (string): Switch role can be source or destination + - comment (string): My pretty comment + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + switchStackId = urllib.parse.quote(switchStackId, safe="") + resource = f"/networks/{networkId}/switch/stacks/{switchStackId}/ports/mirror" + + body_params = [ + "source", + "destination", + "tags", + "role", + "comment", + ] + 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 createNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId: str, name: str, **kwargs): """ **Create a layer 3 interface for a switch stack** @@ -1261,6 +1513,12 @@ def createNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId - multicastRouting (string): Enable multicast support if, multicast routing between VLANs is required. Options are: 'disabled', 'enabled' or 'IGMP snooping querier'. Default is 'disabled'. - vlanId (integer): The VLAN this L3 interface is on. VLAN must be between 1 and 4094. - defaultGateway (string): The next hop for any traffic that isn't going to a directly connected subnet or over a static route. This IP address must exist in a subnet with a L3 interface. Required if this is the first IPv4 interface. + - isSwitchDefaultGateway (boolean): When true, the switch uses the IPv4 uplink gateway as its IPv4 default gateway. This can only be set if the interface is designated as the IPv4 uplink and the switch is running IOS XE version >= 17.18.3. + - uplinkV4 (boolean): When true, this interface is used as static IPv4 uplink. + - candidateUplinkV4 (boolean): When true, this interface is a UAC candidate for IPv4 Uplink. + - uplinkV6 (boolean): When true, this interface is used as static IPv6 uplink. + - staticV4Dns1 (string): Primary IPv4 DNS server address + - staticV4Dns2 (string): Secondary IPv4 DNS server address - ospfSettings (object): The OSPF routing settings of the interface. - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher @@ -1292,6 +1550,12 @@ def createNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId "multicastRouting", "vlanId", "defaultGateway", + "isSwitchDefaultGateway", + "uplinkV4", + "candidateUplinkV4", + "uplinkV6", + "staticV4Dns1", + "staticV4Dns2", "ospfSettings", "ipv6", "vrf", @@ -1321,6 +1585,12 @@ def updateNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId - multicastRouting (string): Enable multicast support if, multicast routing between VLANs is required. Options are: 'disabled', 'enabled' or 'IGMP snooping querier'. Default is 'disabled'. - vlanId (integer): The VLAN this L3 interface is on. VLAN must be between 1 and 4094. - defaultGateway (string): The next hop for any traffic that isn't going to a directly connected subnet or over a static route. This IP address must exist in a subnet with a L3 interface. Required if this is the first IPv4 interface. + - isSwitchDefaultGateway (boolean): When true, the switch uses the IPv4 uplink gateway as its IPv4 default gateway. This can only be set if the interface is designated as the IPv4 uplink and the switch is running IOS XE version >= 17.18.3. + - uplinkV4 (boolean): When true, this interface is used as static IPv4 uplink. + - candidateUplinkV4 (boolean): When true, this interface is a UAC candidate for IPv4 Uplink. + - uplinkV6 (boolean): When true, this interface is used as static IPv6 uplink. + - staticV4Dns1 (string): Primary IPv4 DNS server address + - staticV4Dns2 (string): Secondary IPv4 DNS server address - ospfSettings (object): The OSPF routing settings of the interface. - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher @@ -1349,6 +1619,12 @@ def updateNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId "multicastRouting", "vlanId", "defaultGateway", + "isSwitchDefaultGateway", + "uplinkV4", + "candidateUplinkV4", + "uplinkV6", + "staticV4Dns1", + "staticV4Dns2", "ospfSettings", "ipv6", "vrf", @@ -1613,6 +1889,47 @@ def updateNetworkSwitchStp(self, networkId: str, **kwargs): } return action + def updateOrganizationConfigTemplateSwitchProfilePortsMirror( + self, organizationId: str, configTemplateId: str, profileId: str, source: dict, destination: dict, **kwargs + ): + """ + **Update a port mirror** + https://developer.cisco.com/meraki/api-v1/#!update-organization-config-template-switch-profile-ports-mirror + + - organizationId (string): Organization ID + - configTemplateId (string): Config template ID + - profileId (string): Profile ID + - source (object): Source ports mirror configuration + - destination (object): Destination port mirror configuration + - tags (array): Port mirror tags + - role (string): Switch role can be source or destination + - comment (string): My pretty comment + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + configTemplateId = urllib.parse.quote(configTemplateId, safe="") + profileId = urllib.parse.quote(profileId, safe="") + resource = ( + f"/organizations/{organizationId}/configTemplates/{configTemplateId}/switch/profiles/{profileId}/ports/mirror" + ) + + body_params = [ + "source", + "destination", + "tags", + "role", + "comment", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "mirrors/update", + "body": payload, + } + return action + def updateOrganizationConfigTemplateSwitchProfilePort( self, organizationId: str, configTemplateId: str, profileId: str, portId: str, **kwargs ): @@ -1632,6 +1949,7 @@ def updateOrganizationConfigTemplateSwitchProfilePort( - vlan (integer): The VLAN of the switch template port. For a trunk port, this is the native VLAN. A null value will clear the value set for trunk ports. - voiceVlan (integer): The voice VLAN of the switch template port. Only applicable to access ports. - allowedVlans (string): The VLANs allowed on the switch template port. Only applicable to trunk ports. + - activeVlans (string): The VLANs that are active on the switch template port. Only applicable to trunk ports. - isolationEnabled (boolean): The isolation status of the switch template port. - rstpEnabled (boolean): The rapid spanning tree protocol status. - stpGuard (string): The state of the STP guard ('disabled', 'root guard', 'bpdu guard' or 'loop guard'). @@ -1690,6 +2008,7 @@ def updateOrganizationConfigTemplateSwitchProfilePort( "vlan", "voiceVlan", "allowedVlans", + "activeVlans", "isolationEnabled", "rstpEnabled", "stpGuard", @@ -1718,6 +2037,33 @@ def updateOrganizationConfigTemplateSwitchProfilePort( } return action + def cloneOrganizationSwitchProfilesToTemplateNetwork(self, organizationId: str, **kwargs): + """ + **Clone existing switch templates into a destination template network.** + https://developer.cisco.com/meraki/api-v1/#!clone-organization-switch-profiles-to-template-network + + - organizationId (string): Organization ID + - profileIds (array): Switch profile IDs to clone + - templateNodeGroupId (string): Destination template network ID + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/cloneProfilesToTemplateNetwork" + + body_params = [ + "profileIds", + "templateNodeGroupId", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "cloneProfilesToTemplateNetwork", + "body": payload, + } + return action + def cloneOrganizationSwitchDevices(self, organizationId: str, sourceSerial: str, targetSerials: list, **kwargs): """ **Clone port-level and some switch-level configuration settings from a source switch to one or more target switches. Cloned settings include: Aggregation Groups, Power Settings, Multicast Settings, MTU Configuration, STP Bridge priority, Port Mirroring** @@ -1744,3 +2090,762 @@ def cloneOrganizationSwitchDevices(self, organizationId: str, sourceSerial: str, "body": payload, } return action + + def createOrganizationSwitchPortsProfile(self, organizationId: str, **kwargs): + """ + **Create a port profile in an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-ports-profile + + - organizationId (string): Organization ID + - name (string): The name of the profile. + - description (string): Text describing the profile. + - isOrganizationWide (boolean): The scope of the profile whether it is organization level or network level + - networks (object): The networks which are included/excluded in the profile + - networkId (string): The network identifier + - tags (array): Space-seperated list of tags + - defaultRadiusProfileName (string): When present, the default RADIUS attribute value for RADIUS-based port profile application + - authentication (object): Authentication settings for RADIUS-based port profile application. + - port (object): Configuration settings for port profile + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles" + + body_params = [ + "name", + "description", + "isOrganizationWide", + "networks", + "networkId", + "tags", + "defaultRadiusProfileName", + "authentication", + "port", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "profiles/create", + "body": payload, + } + return action + + def batchOrganizationSwitchPortsProfilesAssignmentsAssign(self, organizationId: str, items: list, **kwargs): + """ + **Batch assign or unassign port profiles to switch ports** + https://developer.cisco.com/meraki/api-v1/#!batch-organization-switch-ports-profiles-assignments-assign + + - organizationId (string): Organization ID + - items (array): Array of assignment operations (max 100) + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/assignments/batchAssign" + + body_params = [ + "items", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "batch_assign", + "body": payload, + } + return action + + def createOrganizationSwitchPortsProfilesAutomation(self, organizationId: str, **kwargs): + """ + **Create a port profile automation for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-ports-profiles-automation + + - organizationId (string): Organization ID + - name (string): Name of the port profile automation. + - description (string): Text describing the port profile automation. + - fallbackProfile (object): Configuration settings for port profile + - rules (array): Configuration settings for port profile automation rules + - assignedSwitchPorts (array): assigned switch ports + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/automations" + + body_params = [ + "name", + "description", + "fallbackProfile", + "rules", + "assignedSwitchPorts", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "automations/actions/update", + "body": payload, + } + return action + + def updateOrganizationSwitchPortsProfilesAutomation(self, organizationId: str, id: str, **kwargs): + """ + **Update a port profile automation in an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-switch-ports-profiles-automation + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of the port profile automation. + - description (string): Text describing the port profile automation. + - fallbackProfile (object): Configuration settings for port profile + - rules (array): Configuration settings for port profile automation rules + - assignedSwitchPorts (array): assigned switch ports + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/automations/{id}" + + body_params = [ + "name", + "description", + "fallbackProfile", + "rules", + "assignedSwitchPorts", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "automations/actions/update", + "body": payload, + } + return action + + def deleteOrganizationSwitchPortsProfilesAutomation(self, organizationId: str, id: str): + """ + **Delete an automation port profile from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-ports-profiles-automation + + - organizationId (string): Organization ID + - id (string): ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/automations/{id}" + + action = { + "resource": resource, + "operation": "automations/actions/destroy", + } + return action + + def createOrganizationSwitchPortsProfilesNetworksAssignment( + self, organizationId: str, type: str, profile: dict, network: dict, **kwargs + ): + """ + **Create Network and Smart Ports Profile association for a specific profile** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-ports-profiles-networks-assignment + + - organizationId (string): Organization ID + - type (string): Type of association + - profile (object): Smart Port Profile object + - network (object): Network object + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments" + + body_params = [ + "type", + "profile", + "network", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "profiles/create", + "body": payload, + } + return action + + def batchOrganizationSwitchPortsProfilesNetworksAssignmentsCreate(self, organizationId: str, items: list, **kwargs): + """ + **Batch Create Network and Smart Ports Profile associations for a specific profile** + https://developer.cisco.com/meraki/api-v1/#!batch-organization-switch-ports-profiles-networks-assignments-create + + - organizationId (string): Organization ID + - items (array): Array of network and profile associations + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments/batchCreate" + + body_params = [ + "items", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "batch_create", + "body": payload, + } + return action + + def bulkOrganizationSwitchPortsProfilesNetworksAssignmentsDelete(self, organizationId: str, items: list, **kwargs): + """ + **Bulk delete Network and Smart Port Profile associations** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-switch-ports-profiles-networks-assignments-delete + + - organizationId (string): Organization ID + - items (array): Array of assignments to delete + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments/bulkDelete" + + body_params = [ + "items", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "bulk_destroy", + "body": payload, + } + return action + + def deleteOrganizationSwitchPortsProfilesNetworksAssignment(self, organizationId: str, assignmentId: str): + """ + **Delete Network and Smart Port profile association for a specific profile** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-ports-profiles-networks-assignment + + - organizationId (string): Organization ID + - assignmentId (string): Assignment ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + assignmentId = urllib.parse.quote(assignmentId, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments/{assignmentId}" + + action = { + "resource": resource, + "operation": "profiles/destroy", + } + return action + + def createOrganizationSwitchPortsProfilesRadiusAssignment(self, organizationId: str, network: dict, **kwargs): + """ + **Create a port profile RADIUS assignment** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-ports-profiles-radius-assignment + + - organizationId (string): Organization ID + - network (object): The network where the RADIUS name is assigned + - portProfile (object): The assigned port profile + - radius (object): The RADIUS options for this assignment + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/radius/assignments" + + body_params = [ + "network", + "portProfile", + "radius", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationSwitchPortsProfilesRadiusAssignment(self, organizationId: str, id: str, **kwargs): + """ + **Update a port profile RADIUS assignment** + https://developer.cisco.com/meraki/api-v1/#!update-organization-switch-ports-profiles-radius-assignment + + - organizationId (string): Organization ID + - id (string): ID + - network (object): The network where the RADIUS name is assigned + - portProfile (object): The assigned port profile + - radius (object): The RADIUS options for this assignment + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/radius/assignments/{id}" + + body_params = [ + "network", + "portProfile", + "radius", + ] + 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 deleteOrganizationSwitchPortsProfilesRadiusAssignment(self, organizationId: str, id: str): + """ + **Deletes a port profile RADIUS assignment** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-ports-profiles-radius-assignment + + - organizationId (string): Organization ID + - id (string): ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/radius/assignments/{id}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def updateOrganizationSwitchPortsProfile(self, organizationId: str, id: str, **kwargs): + """ + **Update a port profile in an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-switch-ports-profile + + - organizationId (string): Organization ID + - id (string): ID + - name (string): The name of the profile. + - description (string): Text describing the profile. + - isOrganizationWide (boolean): The scope of the profile whether it is organization level or network level + - networks (object): The networks which are included/excluded in the profile + - networkId (string): The network identifier + - tags (array): Space-seperated list of tags + - defaultRadiusProfileName (string): When present, the default RADIUS attribute value for RADIUS-based port profile application + - authentication (object): Authentication settings for RADIUS-based port profile application. + - port (object): Configuration settings for port profile + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/{id}" + + body_params = [ + "name", + "description", + "isOrganizationWide", + "networks", + "networkId", + "tags", + "defaultRadiusProfileName", + "authentication", + "port", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "profiles/update", + "body": payload, + } + return action + + def deleteOrganizationSwitchPortsProfile(self, organizationId: str, id: str): + """ + **Delete a port profile from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-ports-profile + + - organizationId (string): Organization ID + - id (string): ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/{id}" + + action = { + "resource": resource, + "operation": "profiles/destroy", + } + return action + + def createOrganizationSwitchRoutingBgpAutonomousSystem(self, organizationId: str, number: int, **kwargs): + """ + **Create an autonomous system. Border Gateway Protocol requires IOS XE 17.18 or higher** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-autonomous-system + + - organizationId (string): Organization ID + - number (integer): The autonomous system number (CLI: 'router bgp ') + - description (string): A description for the autonomous system + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/autonomousSystems" + + body_params = [ + "number", + "description", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "systems/create", + "body": payload, + } + return action + + def updateOrganizationSwitchRoutingBgpAutonomousSystem(self, organizationId: str, autonomousSystemId: str, **kwargs): + """ + **Update an autonomous system. Border Gateway Protocol requires IOS XE 17.18 or higher** + https://developer.cisco.com/meraki/api-v1/#!update-organization-switch-routing-bgp-autonomous-system + + - organizationId (string): Organization ID + - autonomousSystemId (string): Autonomous system ID + - number (integer): The autonomous system number (CLI: 'router bgp ') + - description (string): A description for the autonomous system + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + autonomousSystemId = urllib.parse.quote(autonomousSystemId, safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/autonomousSystems/{autonomousSystemId}" + + body_params = [ + "number", + "description", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "systems/update", + "body": payload, + } + return action + + def deleteOrganizationSwitchRoutingBgpAutonomousSystem(self, organizationId: str, autonomousSystemId: str): + """ + **Delete an autonomous system from an organization. Border Gateway Protocol requires IOS XE 17.18 or higher** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-routing-bgp-autonomous-system + + - organizationId (string): Organization ID + - autonomousSystemId (string): Autonomous system ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + autonomousSystemId = urllib.parse.quote(autonomousSystemId, safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/autonomousSystems/{autonomousSystemId}" + + action = { + "resource": resource, + "operation": "systems/destroy", + } + return action + + def createOrganizationSwitchRoutingBgpFiltersFilterListsDeploy( + self, organizationId: str, filterList: dict, network: dict, rules: list, **kwargs + ): + """ + **Create or update a filter list, in addition to its associated rules. Border Gateway Protocol requires IOS XE 17.18 or higher** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-filters-filter-lists-deploy + + - organizationId (string): Organization ID + - filterList (object): Information regarding the filter list + - network (object): Information regarding the network the filter list belongs to + - rules (array): Information regarding the filter list rules + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/filterLists/deploy" + + body_params = [ + "filterList", + "network", + "rules", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "deploy", + "body": payload, + } + return action + + def deleteOrganizationSwitchRoutingBgpFiltersFilterList(self, organizationId: str, listId: str): + """ + **Delete a filter list. Border Gateway Protocol requires IOS XE 17.18 or higher** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-routing-bgp-filters-filter-list + + - organizationId (string): Organization ID + - listId (string): List ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + listId = urllib.parse.quote(listId, safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/filterLists/{listId}" + + action = { + "resource": resource, + "operation": "lists/destroy", + } + return action + + def createOrganizationSwitchRoutingBgpFiltersPrefixListsDeploy( + self, organizationId: str, network: dict, prefixList: dict, rules: list, **kwargs + ): + """ + **Create or update a prefix list, in addition to its associated rules. Border Gateway Protocol requires IOS XE 17.18 or higher** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-filters-prefix-lists-deploy + + - organizationId (string): Organization ID + - network (object): Information regarding the network the prefix list belongs to + - prefixList (object): Information regarding the prefix list + - rules (array): Information regarding the prefix list rules + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/prefixLists/deploy" + + body_params = [ + "network", + "prefixList", + "rules", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "deploy", + "body": payload, + } + return action + + def deleteOrganizationSwitchRoutingBgpFiltersPrefixList(self, organizationId: str, listId: str): + """ + **Delete a prefix list. Border Gateway Protocol requires IOS XE 17.18 or higher** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-routing-bgp-filters-prefix-list + + - organizationId (string): Organization ID + - listId (string): List ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + listId = urllib.parse.quote(listId, safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/prefixLists/{listId}" + + action = { + "resource": resource, + "operation": "lists/destroy", + } + return action + + def createOrganizationSwitchRoutingBgpPeersGroupsDeploy( + self, + organizationId: str, + addressFamily: dict, + network: dict, + peerGroup: dict, + peerGroupAddressFamilyBindingProfile: dict, + peerGroupProfile: dict, + policies: list, + router: dict, + **kwargs, + ): + """ + **Create or update a peer group, in addition to an associated peer group profile, peer group address family binding, peer group address family binding profile and routing policies associated with the peer group. Border Gateway Protocol requires IOS XE 17.18 or higher** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-peers-groups-deploy + + - organizationId (string): Organization ID + - addressFamily (object): Information regarding the address family the peer group address family binding belongs to + - network (object): Information regarding the network the peer group profile belongs to + - peerGroup (object): Information regarding the peer group + - peerGroupAddressFamilyBindingProfile (object): Information regarding the peer group address family binding profile + - peerGroupProfile (object): Information regarding the peer group profile + - policies (array): Information regarding the routing policies + - router (object): Information regarding the router this peer group belongs to + - peerGroupAddressFamilyBinding (object): Information regarding the peer group address family binding. Only required when updating. + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/groups/deploy" + + body_params = [ + "addressFamily", + "network", + "peerGroup", + "peerGroupAddressFamilyBinding", + "peerGroupAddressFamilyBindingProfile", + "peerGroupProfile", + "policies", + "router", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "deploy", + "body": payload, + } + return action + + def createOrganizationSwitchRoutingBgpPeersNeighborsDeploy( + self, + organizationId: str, + addressFamily: dict, + neighbor: dict, + neighborAddressFamilyBinding: dict, + peerGroup: dict, + policies: list, + router: dict, + **kwargs, + ): + """ + **Create or update a neighor, in addition to an associated neighbor address family binding and routing policies associated with the neighbor. Border Gateway Protocol requires IOS XE 17.18 or higher** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-peers-neighbors-deploy + + - organizationId (string): Organization ID + - addressFamily (object): Information regarding the address family this binding is bound to + - neighbor (object): Information regarding the BPG neighbor + - neighborAddressFamilyBinding (object): Information regarding the neighbor address family binding + - peerGroup (object): Information regarding the peer group this neighbor belongs to + - policies (array): Information regarding the routing policies related to the neighbor + - router (object): Information regarding the router this neighbor peers with + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/neighbors/deploy" + + body_params = [ + "addressFamily", + "neighbor", + "neighborAddressFamilyBinding", + "peerGroup", + "policies", + "router", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "deploy", + "body": payload, + } + return action + + def createOrganizationSwitchRoutingBgpRoutersDeploy( + self, + organizationId: str, + addressFamily: dict, + addressFamilyPrefixes: list, + addressFamilyProfile: dict, + autonomousSystem: dict, + router: dict, + switch: dict, + **kwargs, + ): + """ + **Create a BGP router, in addition to an associated address family, address family prefixes, and address family profile. This is helpful for the initial deployment of a BGP router.. Border Gateway Protocol requires IOS XE 17.18 or higher** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-routers-deploy + + - organizationId (string): Organization ID + - addressFamily (object): Information regarding the address family + - addressFamilyPrefixes (array): The list of network prefixes to which the address family applies + - addressFamilyProfile (object): Information regarding the profile applied to the address family + - autonomousSystem (object): Information regarding the router's autonomous system + - router (object): Information regarding the BPG router + - switch (object): The router's switch node. When the router is part of a switch stack, this is the switch stack's active node + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers/deploy" + + body_params = [ + "addressFamily", + "addressFamilyPrefixes", + "addressFamilyProfile", + "autonomousSystem", + "router", + "switch", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "deploy", + "body": payload, + } + return action + + def createOrganizationSwitchRoutingBgpRoutersPeersDeploy( + self, organizationId: str, addressFamily: dict, peerGroups: list, router: dict, **kwargs + ): + """ + **Create and update listen ranges, update peers' enabled flag, and delete peer groups for a BGP router. Border Gateway Protocol requires IOS XE 17.18 or higher** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-routers-peers-deploy + + - organizationId (string): Organization ID + - addressFamily (object): Information regarding the address family + - peerGroups (array): Information regarding the peer group peers for a router's peer group + - router (object): Information regarding the BPG router + """ + + kwargs = locals() + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers/peers/deploy" + + body_params = [ + "addressFamily", + "peerGroups", + "router", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "peers_deploy", + "body": payload, + } + return action + + def deleteOrganizationSwitchRoutingBgpRouter(self, organizationId: str, routerId: str): + """ + **Delete a router from an organization. Border Gateway Protocol requires IOS XE 17.18 or higher** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-routing-bgp-router + + - organizationId (string): Organization ID + - routerId (string): Router ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + routerId = urllib.parse.quote(routerId, safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers/{routerId}" + + action = { + "resource": resource, + "operation": "ms/actions/bgp/routers/destroy", + } + return action diff --git a/meraki/api/batch/users.py b/meraki/api/batch/users.py new file mode 100644 index 0000000..a194ca6 --- /dev/null +++ b/meraki/api/batch/users.py @@ -0,0 +1,359 @@ +import urllib + + +class ActionBatchUsers(object): + def __init__(self): + super(ActionBatchUsers, self).__init__() + + def createOrganizationIamUsersAuthorization(self, organizationId: str, authZone: dict, **kwargs): + """ + **Authorize a Meraki end user for an auth zone.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-authorization + + - organizationId (string): Organization ID + - authZone (object): Auth zone + - email (string): Meraki end user's email + - idpUserId (string): Meraki end user's ID + - startsAt (string): Start time of the desired access for the authorization. Defaults to now. + - expiresAt (string): Expiration time of the desired access for the authorization + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations" + + body_params = [ + "email", + "idpUserId", + "authZone", + "startsAt", + "expiresAt", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationIamUsersAuthorizations(self, organizationId: str, **kwargs): + """ + **Update a Meraki end user's access to an auth zone.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-iam-users-authorizations + + - organizationId (string): Organization ID + - authorizationId (string): Authorization ID + - email (string): Meraki end user's email + - authZone (object): Auth zone + - startsAt (string): Start time of the desired access for the authorization + - expiresAt (string): Expiration time of the desired access for the authorization + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations" + + body_params = [ + "authorizationId", + "email", + "authZone", + "startsAt", + "expiresAt", + ] + 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 revokeOrganizationIamUsersAuthorizationsAuthorization(self, organizationId: str, authZone: dict, **kwargs): + """ + **Revoke a Meraki end user's access to an auth zone.** + https://developer.cisco.com/meraki/api-v1/#!revoke-organization-iam-users-authorizations-authorization + + - organizationId (string): Organization ID + - authZone (object): Auth zone + - email (string): Meraki end user's email + - authorizationId (string): Authorization ID + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations/authorization/revoke" + + body_params = [ + "email", + "authorizationId", + "authZone", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "revoke", + "body": payload, + } + return action + + def deleteOrganizationIamUsersAuthorization(self, organizationId: str, authorizationId: str): + """ + **Delete an authorization for a Meraki end user.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-iam-users-authorization + + - organizationId (string): Organization ID + - authorizationId (string): Authorization ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + authorizationId = urllib.parse.quote(authorizationId, safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations/{authorizationId}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def createOrganizationIamUsersIdp(self, organizationId: str, name: str, type: str, idpConfig: dict, **kwargs): + """ + **Create an identity provider for an organization. Only Entra ID(Azure AD) is supported at this time.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idp + + - organizationId (string): Organization ID + - name (string): Name of the identity provider + - type (string): Type of the identity provider + - idpConfig (object): Identity provider configuration. Required for external identity providers. + - description (string): Optional. Description of the identity provider + - syncType (string): The synchronization method for the identity provider. Set to 'proactive' to sync all users and groups from your identity provider. + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = ["Azure AD"] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + if "syncType" in kwargs and kwargs["syncType"] is not None: + options = ["proactive"] + assert kwargs["syncType"] in options, ( + f'''"syncType" cannot be "{kwargs["syncType"]}", & must be set to one of: {options}''' + ) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/iam/users/idps" + + body_params = [ + "name", + "type", + "description", + "idpConfig", + "syncType", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def createOrganizationIamUsersIdpsTestConnectivity(self, organizationId: str, **kwargs): + """ + **Test connectivity to an Entra ID identity provider.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idps-test-connectivity + + - organizationId (string): Organization ID + - idpId (string): Id of the identity provider + - idpConfig (object): Identity provider configuration. Required for external identity providers. + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/testConnectivity" + + body_params = [ + "idpId", + "idpConfig", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "test_connectivity", + "body": payload, + } + return action + + def createOrganizationIamUsersIdpsUser(self, organizationId: str, **kwargs): + """ + **Create a Meraki user** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idps-user + + - organizationId (string): Organization ID + - displayName (string): A human-readable identifier for the created user. + - email (string): An email address identified with the user. + - password (string): The password for the user account. + - sendPassword (boolean): If true, sends an email with the password to the user. + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/users" + + body_params = [ + "displayName", + "email", + "password", + "sendPassword", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationIamUsersIdpsUser(self, organizationId: str, id: str, **kwargs): + """ + **Update a Meraki user** + https://developer.cisco.com/meraki/api-v1/#!update-organization-iam-users-idps-user + + - organizationId (string): Organization ID + - id (string): ID + - displayName (string): A human-readable identifier for the created user. + - email (string): An email address identified with the user. + - password (string): The password for the user account. + - sendPassword (boolean): If true, sends an email with the password to the user. + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/users/{id}" + + body_params = [ + "displayName", + "email", + "password", + "sendPassword", + ] + 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 deleteOrganizationIamUsersIdpsUser(self, organizationId: str, id: str): + """ + **Delete a Meraki end user** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-iam-users-idps-user + + - organizationId (string): Organization ID + - id (string): ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/users/{id}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def createOrganizationIamUsersIdpSync(self, organizationId: str, idpId: str, **kwargs): + """ + **Trigger an IdP sync for an identity provider. Only Entra ID(Azure AD) is supported at this time.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idp-sync + + - organizationId (string): Organization ID + - idpId (string): Idp ID + - emails (array): List of emails to sync + - force (boolean): Force a complete sync of all users and groups + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + idpId = urllib.parse.quote(idpId, safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/{idpId}/sync" + + body_params = [ + "emails", + "force", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def updateOrganizationIamUsersIdp(self, organizationId: str, id: str, **kwargs): + """ + **Update an identity provider. Only Entra ID(Azure AD) is supported at this time.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-iam-users-idp + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of the identity provider + - description (string): Description of the identity provider + - idpConfig (object): Identity provider configuration. You can update individual attributes + - syncType (string): The synchronization method for the identity provider. Set to 'proactive' to sync all users and groups from your identity provider. Set to 'null' for on-demand user and group provisioning. + """ + + kwargs.update(locals()) + + if "syncType" in kwargs and kwargs["syncType"] is not None: + options = ["proactive"] + assert kwargs["syncType"] in options, ( + f'''"syncType" cannot be "{kwargs["syncType"]}", & must be set to one of: {options}''' + ) + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/{id}" + + body_params = [ + "name", + "description", + "idpConfig", + "syncType", + ] + 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 deleteOrganizationIamUsersIdp(self, organizationId: str, id: str): + """ + **Delete a identity provider from an organization. Only Entra ID(Azure AD) is supported at this time.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-iam-users-idp + + - organizationId (string): Organization ID + - id (string): ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/{id}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action diff --git a/meraki/api/batch/wireless.py b/meraki/api/batch/wireless.py index 318bb1d..ca73d36 100644 --- a/meraki/api/batch/wireless.py +++ b/meraki/api/batch/wireless.py @@ -42,6 +42,7 @@ def updateDeviceWirelessBluetoothSettings(self, serial: str, **kwargs): Dashboard's automatically generated value. - minor (integer): Desired minor value of the beacon. If the value is set to null it will reset to Dashboard's automatically generated value. + - transmit (object): Transmit settings including power, interval, and advertised power. """ kwargs.update(locals()) @@ -53,6 +54,7 @@ def updateDeviceWirelessBluetoothSettings(self, serial: str, **kwargs): "uuid", "major", "minor", + "transmit", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -89,6 +91,60 @@ def updateDeviceWirelessElectronicShelfLabel(self, serial: str, **kwargs): } return action + def updateDeviceWirelessRadioAfcPosition(self, serial: str, **kwargs): + """ + **Update the position attributes for this device** + https://developer.cisco.com/meraki/api-v1/#!update-device-wireless-radio-afc-position + + - serial (string): Serial + - height (object): Height attributes + - gps (object): GPS attributes + """ + + kwargs.update(locals()) + + serial = urllib.parse.quote(serial, safe="") + resource = f"/devices/{serial}/wireless/radio/afc/position" + + body_params = [ + "height", + "gps", + ] + 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 updateDeviceWirelessRadioOverrides(self, serial: str, **kwargs): + """ + **Update 2.4 GHz, 5 GHz, and 6 GHz radio settings (channel, channel width, power, and enable/disable) that override RF profiles.** + https://developer.cisco.com/meraki/api-v1/#!update-device-wireless-radio-overrides + + - serial (string): Serial + - rfProfile (object): This device's RF profile + - radios (array): Radio overrides. + """ + + kwargs.update(locals()) + + serial = urllib.parse.quote(serial, safe="") + resource = f"/devices/{serial}/wireless/radio/overrides" + + body_params = [ + "rfProfile", + "radios", + ] + 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 updateDeviceWirelessRadioSettings(self, serial: str, **kwargs): """ **Update 2.4 GHz and 5 GHz radio settings (channel, channel width, power) that override RF profiles. For 6 GHz support or radio enable/disable, use updateDeviceWirelessRadioOverrides instead.** @@ -332,6 +388,7 @@ def createNetworkWirelessEthernetPortsProfile(self, networkId: str, name: str, p - name (string): AP port profile name - ports (array): AP ports configuration - usbPorts (array): AP usb ports configuration + - security (object): AP port security configuration """ kwargs.update(locals()) @@ -343,6 +400,7 @@ def createNetworkWirelessEthernetPortsProfile(self, networkId: str, name: str, p "name", "ports", "usbPorts", + "security", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -414,6 +472,7 @@ def updateNetworkWirelessEthernetPortsProfile(self, networkId: str, profileId: s - name (string): AP port profile name - ports (array): AP ports configuration - usbPorts (array): AP usb ports configuration + - security (object): AP port security configuration """ kwargs.update(locals()) @@ -426,6 +485,7 @@ def updateNetworkWirelessEthernetPortsProfile(self, networkId: str, profileId: s "name", "ports", "usbPorts", + "security", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} action = { @@ -481,6 +541,89 @@ def updateNetworkWirelessLocationScanning(self, networkId: str, **kwargs): } return action + def updateNetworkWirelessLocationWayfinding(self, networkId: str, **kwargs): + """ + **Change client wayfinding settings** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-location-wayfinding + + - networkId (string): Network ID + - enabled (boolean): Whether to enable client wayfinding on that network (only supported on Wireless networks). + - maintenanceWindow (object): Maintenance window during which optimization might take place to improve location accuracy. + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/wireless/location/wayfinding" + + body_params = [ + "enabled", + "maintenanceWindow", + ] + 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 updateNetworkWirelessOpportunisticPcap(self, networkId: str, **kwargs): + """ + **Update the Opportunistic Pcap settings for a wireless network** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-opportunistic-pcap + + - networkId (string): Network ID + - enablement (object): Enablement settings + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/wireless/opportunisticPcap" + + body_params = [ + "enablement", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "factory", + "body": payload, + } + return action + + def updateNetworkWirelessRadioAutoRf(self, networkId: str, **kwargs): + """ + **Update the AutoRF settings for a wireless network** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-radio-auto-rf + + - networkId (string): Network ID + - busyHour (object): Busy Hour settings + - channel (object): Channel settings + - fra (object): FRA settings + - aiRrm (object): AI-RRM settings + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/wireless/radio/autoRf" + + body_params = [ + "busyHour", + "channel", + "fra", + "aiRrm", + ] + 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 updateNetworkWirelessRadioRrm(self, networkId: str, **kwargs): """ **Update the AutoRF settings for a wireless network** @@ -703,6 +846,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - number (string): Number - name (string): The name of the SSID - enabled (boolean): Whether or not the SSID is enabled + - localAuth (boolean): Extended local auth flag for Enterprise NAC - authMode (string): The association control method for the SSID ('open', 'open-enhanced', 'psk', 'open-with-radius', 'open-enhanced-with-radius', 'open-with-nac', '8021x-meraki', '8021x-nac', '8021x-radius', '8021x-google', '8021x-entra', '8021x-localradius', 'ipsk-with-radius', 'ipsk-without-radius', 'ipsk-with-nac' or 'ipsk-with-radius-easy-psk') - enterpriseAdminAccess (string): Whether or not an SSID is accessible by 'enterprise' administrators ('access disabled' or 'access enabled') - ssidAdminAccessible (boolean): SSID Administrator access status @@ -734,6 +878,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - radiusAccountingInterimInterval (integer): The interval (in seconds) in which accounting information is updated and sent to the RADIUS accounting server. - radiusAttributeForGroupPolicies (string): Specify the RADIUS attribute used to look up group policies ('Filter-Id', 'Reply-Message', 'Airespace-ACL-Name' or 'Aruba-User-Role'). Access points must receive this attribute in the RADIUS Access-Accept message - ipAssignmentMode (string): The client IP assignment mode ('NAT mode', 'Bridge mode', 'Layer 3 roaming', 'Ethernet over GRE', 'Layer 3 roaming with a concentrator', 'VPN' or 'Campus Gateway') + - campusGateway (object): Campus gateway settings - useVlanTagging (boolean): Whether or not traffic should be directed to use specific VLANs. This param is only valid if the ipAssignmentMode is 'Bridge mode' or 'Layer 3 roaming' - concentratorNetworkId (string): The concentrator to use when the ipAssignmentMode is 'Layer 3 roaming with a concentrator' or 'VPN'. - secondaryConcentratorNetworkId (string): The secondary concentrator to use when the ipAssignmentMode is 'VPN'. If configured, the APs will switch to using this concentrator if the primary concentrator is unreachable. This param is optional. ('disabled' represents no secondary concentrator.) @@ -763,6 +908,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - dnsRewrite (object): DNS servers rewrite settings - speedBurst (object): The SpeedBurst setting for this SSID' - namedVlans (object): Named VLAN settings. + - security (object): Security settings for the SSID - localAuthFallback (object): The current configuration for Local Authentication Fallback. Enables the Access Point (AP) to store client authentication data for a specified duration that can be adjusted as needed. - radiusAccountingStartDelay (integer): The delay (in seconds) before sending the first RADIUS accounting start message. Must be between 0 and 60 seconds. """ @@ -850,6 +996,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): body_params = [ "name", "enabled", + "localAuth", "authMode", "enterpriseAdminAccess", "ssidAdminAccessible", @@ -881,6 +1028,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): "radiusAccountingInterimInterval", "radiusAttributeForGroupPolicies", "ipAssignmentMode", + "campusGateway", "useVlanTagging", "concentratorNetworkId", "secondaryConcentratorNetworkId", @@ -910,6 +1058,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): "dnsRewrite", "speedBurst", "namedVlans", + "security", "localAuthFallback", "radiusAccountingStartDelay", ] @@ -1244,6 +1393,117 @@ def updateNetworkWirelessSsidOpenRoaming(self, networkId: str, number: str, **kw } return action + def updateNetworkWirelessSsidPoliciesClientExclusion(self, networkId: str, number: str, **kwargs): + """ + **Update the client exclusion status configuration for a given SSID** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-ssid-policies-client-exclusion + + - networkId (string): Network ID + - number (string): Number + - static (object): Static client exclusion status + - dynamic (object): Dynamic client exclusion configuration + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + number = urllib.parse.quote(number, safe="") + resource = f"/networks/{networkId}/wireless/ssids/{number}/policies/clientExclusion" + + body_params = [ + "static", + "dynamic", + ] + 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 updateNetworkWirelessSsidPoliciesClientExclusionStaticExclusions( + self, networkId: str, number: str, macs: list, **kwargs + ): + """ + **Replace the static client exclusion list for the given SSID (use PUT /exclusions)** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-ssid-policies-client-exclusion-static-exclusions + + - networkId (string): Network ID + - number (string): Number + - macs (array): MAC addresses to set as static exclusion list + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + number = urllib.parse.quote(number, safe="") + resource = f"/networks/{networkId}/wireless/ssids/{number}/policies/clientExclusion/static/exclusions" + + body_params = [ + "macs", + ] + 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 createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkAdd( + self, networkId: str, number: str, macs: list, **kwargs + ): + """ + **Add MAC addresses to the existing static client exclusion list for the given SSID (use POST /bulkAdd)** + https://developer.cisco.com/meraki/api-v1/#!create-network-wireless-ssid-policies-client-exclusion-static-exclusions-bulk-add + + - networkId (string): Network ID + - number (string): Number + - macs (array): MAC addresses to add to static exclusion + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + number = urllib.parse.quote(number, safe="") + resource = f"/networks/{networkId}/wireless/ssids/{number}/policies/clientExclusion/static/exclusions/bulkAdd" + + body_params = [ + "macs", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkRemove( + self, networkId: str, number: str, macs: list, **kwargs + ): + """ + **Remove MAC addresses from the existing static client exclusion list for the given SSID (use POST /bulkRemove)** + https://developer.cisco.com/meraki/api-v1/#!create-network-wireless-ssid-policies-client-exclusion-static-exclusions-bulk-remove + + - networkId (string): Network ID + - number (string): Number + - macs (array): MAC addresses to remove from static exclusion + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + number = urllib.parse.quote(number, safe="") + resource = f"/networks/{networkId}/wireless/ssids/{number}/policies/clientExclusion/static/exclusions/bulkRemove" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + def updateNetworkWirelessSsidSchedules(self, networkId: str, number: str, **kwargs): """ **Update the outage schedule for the SSID** @@ -1288,6 +1548,7 @@ def updateNetworkWirelessSsidSplashSettings(self, networkId: str, number: str, * - redirectUrl (string): The custom redirect URL where the users will go after the splash page. - useRedirectUrl (boolean): The Boolean indicating whether the the user will be redirected to the custom redirect URL after the splash page. A custom redirect URL must be set if this is true. - welcomeMessage (string): The welcome message for the users on the splash page. + - language (string): Language of splash page. - userConsent (object): User consent settings - themeId (string): The id of the selected splash theme. - splashLogo (object): The logo used in the splash page. @@ -1309,6 +1570,32 @@ def updateNetworkWirelessSsidSplashSettings(self, networkId: str, number: str, * assert kwargs["splashTimeout"] in options, ( f'''"splashTimeout" cannot be "{kwargs["splashTimeout"]}", & must be set to one of: {options}''' ) + if "language" in kwargs: + options = [ + "DA", + "DE", + "EL", + "EN", + "ES", + "FI", + "FR", + "GL", + "IT", + "JA", + "KO", + "NL", + "NO", + "PL", + "PT", + "RU", + "SK", + "SV", + "UK", + "ZH", + ] + assert kwargs["language"] in options, ( + f'''"language" cannot be "{kwargs["language"]}", & must be set to one of: {options}''' + ) if "controllerDisconnectionBehavior" in kwargs: options = ["default", "open", "restricted"] assert kwargs["controllerDisconnectionBehavior"] in options, ( @@ -1326,6 +1613,7 @@ def updateNetworkWirelessSsidSplashSettings(self, networkId: str, number: str, * "redirectUrl", "useRedirectUrl", "welcomeMessage", + "language", "userConsent", "themeId", "splashLogo", @@ -1443,6 +1731,33 @@ def updateNetworkWirelessZigbee(self, networkId: str, **kwargs): } return action + def createOrganizationWirelessDevicesLiveToolsClientDisconnect(self, organizationId: str, clientId: str, **kwargs): + """ + **Enqueue a job to disconnect a client from an AP. This endpoint has a sustained rate limit of one request every five seconds per device, with an allowed burst of five requests.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-devices-live-tools-client-disconnect + + - organizationId (string): Organization ID + - clientId (string): Client ID + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + clientId = urllib.parse.quote(clientId, safe="") + resource = f"/organizations/{organizationId}/wireless/devices/liveTools/clients/{clientId}/disconnect" + + body_params = [ + "callback", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "disconnect", + "body": payload, + } + return action + def createOrganizationWirelessDevicesProvisioningDeployment(self, organizationId: str, items: list, **kwargs): """ **Create a zero touch deployment for a wireless access point** @@ -1738,6 +2053,133 @@ def updateOrganizationWirelessSsidsFirewallIsolationAllowlistEntry(self, organiz } return action + def createOrganizationWirelessSsidsProfile(self, organizationId: str, name: str, ssid: dict, **kwargs): + """ + **Create a new SSID profile in an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-ssids-profile + + - organizationId (string): Organization ID + - name (string): Name of the SSID profile + - ssid (object): SSID configuration for the profile + - precedence (object): Precedence configuration for the SSID profile + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/profiles" + + body_params = [ + "name", + "precedence", + "ssid", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def createOrganizationWirelessSsidsProfilesAssignment(self, organizationId: str, profile: dict, ssid: dict, **kwargs): + """ + **Assigns an SSID profile to an SSID in the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-ssids-profiles-assignment + + - organizationId (string): Organization ID + - profile (object): SSID profile to assign + - ssid (object): SSID to assign the SSID profile to + - network (object): Network containing the SSID (required if SSID number is used) + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/assignments" + + body_params = [ + "profile", + "ssid", + "network", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "create", + "body": payload, + } + return action + + def deleteOrganizationWirelessSsidsProfilesAssignments(self, organizationId: str, ssid: dict, **kwargs): + """ + **Unassigns the SSID profile assigned to an SSID** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-ssids-profiles-assignments + + - organizationId (string): Organization ID + - ssid (object): SSID to delete the SSID profile assignment of + - network (object): Network containing the SSID (required if SSID number is used) + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/assignments" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + + def updateOrganizationWirelessSsidsProfile(self, organizationId: str, id: str, **kwargs): + """ + **Update this SSID profile** + https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-ssids-profile + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of the SSID profile + - ssid (object): SSID configuration for the profile + """ + + kwargs.update(locals()) + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/{id}" + + body_params = [ + "name", + "ssid", + ] + 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 deleteOrganizationWirelessSsidsProfile(self, organizationId: str, id: str): + """ + **Delete an SSID profile** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-ssids-profile + + - organizationId (string): Organization ID + - id (string): ID + """ + + organizationId = urllib.parse.quote(organizationId, safe="") + id = urllib.parse.quote(id, safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/{id}" + + action = { + "resource": resource, + "operation": "destroy", + } + return action + def updateOrganizationWirelessZigbeeDevice(self, organizationId: str, id: str, enrolled: bool, **kwargs): """ **Endpoint to update zigbee gateways** diff --git a/meraki/api/camera.py b/meraki/api/camera.py index 2f83425..7d98331 100644 --- a/meraki/api/camera.py +++ b/meraki/api/camera.py @@ -739,6 +739,97 @@ def getNetworkCameraSchedules(self, networkId: str): return self._session.get(metadata, resource) + def createNetworkCameraVideoWall(self, networkId: str, name: str, tiles: list, **kwargs): + """ + **Create a new video wall.** + https://developer.cisco.com/meraki/api-v1/#!create-network-camera-video-wall + + - networkId (string): Network ID + - name (string): The name of the video wall. + - tiles (array): The tiles that should appear on the video wall. + - index (integer): The order that this wall should appear on the video wall list. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["camera", "configure", "videoWalls"], + "operation": "createNetworkCameraVideoWall", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/camera/videoWalls" + + body_params = [ + "name", + "index", + "tiles", + ] + 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"createNetworkCameraVideoWall: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateNetworkCameraVideoWall(self, networkId: str, id: str, name: str, tiles: list, **kwargs): + """ + **Update the specified video wall.** + https://developer.cisco.com/meraki/api-v1/#!update-network-camera-video-wall + + - networkId (string): Network ID + - id (string): ID + - name (string): The name of the video wall. + - tiles (array): The tiles that should appear on the video wall. + - index (integer): The order that this wall should appear on the video wall list. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["camera", "configure", "videoWalls"], + "operation": "updateNetworkCameraVideoWall", + } + networkId = urllib.parse.quote(str(networkId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/networks/{networkId}/camera/videoWalls/{id}" + + body_params = [ + "name", + "index", + "tiles", + ] + 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"updateNetworkCameraVideoWall: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteNetworkCameraVideoWall(self, networkId: str, id: str): + """ + **Delete the specified video wall.** + https://developer.cisco.com/meraki/api-v1/#!delete-network-camera-video-wall + + - networkId (string): Network ID + - id (string): ID + """ + + metadata = { + "tags": ["camera", "configure", "videoWalls"], + "operation": "deleteNetworkCameraVideoWall", + } + networkId = urllib.parse.quote(str(networkId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/networks/{networkId}/camera/videoWalls/{id}" + + return self._session.delete(metadata, resource) + def createNetworkCameraWirelessProfile(self, networkId: str, name: str, ssid: dict, **kwargs): """ **Creates a new camera wireless profile for this network.** @@ -1091,6 +1182,45 @@ def getOrganizationCameraDetectionsHistoryByBoundaryByInterval( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationCameraDevicesConfigurations(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Lists all the capabilities of cameras in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-camera-devices-configurations + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 20. + - 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": ["camera", "configure", "devices", "configurations"], + "operation": "getOrganizationCameraDevicesConfigurations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/camera/devices/configurations" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationCameraDevicesConfigurations: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationCameraOnboardingStatuses(self, organizationId: str, **kwargs): """ **Fetch onboarding status of cameras** @@ -1336,3 +1466,104 @@ def updateOrganizationCameraRole(self, organizationId: str, roleId: str, **kwarg self._session._logger.warning(f"updateOrganizationCameraRole: ignoring unrecognized kwargs: {invalid}") return self._session.put(metadata, resource, payload) + + def getOrganizationCameraVideoWalls(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return a list of video walls.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-camera-video-walls + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 10 - 250. Default is 50. + - 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. + - networkIds (array): A list of network ids to filter video walls on + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["camera", "configure", "videoWalls"], + "operation": "getOrganizationCameraVideoWalls", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/camera/videoWalls" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationCameraVideoWalls: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationCameraVideoWall(self, organizationId: str, id: str): + """ + **Return the specified video wall.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-camera-video-wall + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["camera", "configure", "videoWalls"], + "operation": "getOrganizationCameraVideoWall", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/camera/videoWalls/{id}" + + return self._session.get(metadata, resource) + + def getOrganizationCameraVideoWallVideoLink(self, organizationId: str, id: str, **kwargs): + """ + **Returns video wall link to the specified video wall id** + https://developer.cisco.com/meraki/api-v1/#!get-organization-camera-video-wall-video-link + + - organizationId (string): Organization ID + - id (string): ID + - timestamp (string): [optional] The video link will start at this time. The timestamp should be a string in ISO8601 format. If no timestamp is specified, we will assume current time. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["camera", "configure", "videoWalls", "videoLink"], + "operation": "getOrganizationCameraVideoWallVideoLink", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/camera/videoWalls/{id}/videoLink" + + query_params = [ + "timestamp", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationCameraVideoWallVideoLink: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) diff --git a/meraki/api/campusGateway.py b/meraki/api/campusGateway.py index c563618..cc456d9 100644 --- a/meraki/api/campusGateway.py +++ b/meraki/api/campusGateway.py @@ -96,6 +96,150 @@ def updateNetworkCampusGatewayCluster(self, networkId: str, clusterId: str, **kw return self._session.put(metadata, resource, payload) + def deleteNetworkCampusGatewayCluster(self, networkId: str, clusterId: str): + """ + **Delete a cluster** + https://developer.cisco.com/meraki/api-v1/#!delete-network-campus-gateway-cluster + + - networkId (string): Network ID + - clusterId (string): Cluster ID + """ + + metadata = { + "tags": ["campusGateway", "configure", "clusters"], + "operation": "deleteNetworkCampusGatewayCluster", + } + networkId = urllib.parse.quote(str(networkId), safe="") + clusterId = urllib.parse.quote(str(clusterId), safe="") + resource = f"/networks/{networkId}/campusGateway/clusters/{clusterId}" + + return self._session.delete(metadata, resource) + + def getNetworkCampusGatewaySsidMdns(self, networkId: str, number: str): + """ + **List the currently configured mDNS settings for the SSID** + https://developer.cisco.com/meraki/api-v1/#!get-network-campus-gateway-ssid-mdns + + - networkId (string): Network ID + - number (string): Number + """ + + metadata = { + "tags": ["campusGateway", "configure", "ssids", "mdns"], + "operation": "getNetworkCampusGatewaySsidMdns", + } + networkId = urllib.parse.quote(str(networkId), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/networks/{networkId}/campusGateway/ssids/{number}/mdns" + + return self._session.get(metadata, resource) + + def updateNetworkCampusGatewaySsidMdns(self, networkId: str, number: str, **kwargs): + """ + **Update the mDNS gateway settings and rules for a SSID and cluster** + https://developer.cisco.com/meraki/api-v1/#!update-network-campus-gateway-ssid-mdns + + - networkId (string): Network ID + - number (string): Number + - enabled (boolean): If true, mDNS gateway is enabled for this SSID and cluster. + - rules (array): List of mDNS forwarding rules. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["campusGateway", "configure", "ssids", "mdns"], + "operation": "updateNetworkCampusGatewaySsidMdns", + } + networkId = urllib.parse.quote(str(networkId), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/networks/{networkId}/campusGateway/ssids/{number}/mdns" + + body_params = [ + "enabled", + "rules", + ] + 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"updateNetworkCampusGatewaySsidMdns: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getOrganizationCampusGatewayClientsUsageByNetworkByCluster( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns client usage details for campus gateway clusters within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-clients-usage-by-network-by-cluster + + - 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 + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 1 hour and be less than or equal to 7 days. The default is 2 hours. + - networkIds (array): Filter results by a list of network IDs. + - networkGroupIds (array): Limit the results to clients that belong to one of the provided network groups. + - clusterIds (array): Filter results by a list of cluster IDs. + - usageUnits (string): Usage units to use in the response. + """ + + kwargs.update(locals()) + + if "usageUnits" in kwargs: + options = ["GB", "KB", "MB", "TB"] + assert kwargs["usageUnits"] in options, ( + f'''"usageUnits" cannot be "{kwargs["usageUnits"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["campusGateway", "monitor", "clients", "usage", "byNetwork", "byCluster"], + "operation": "getOrganizationCampusGatewayClientsUsageByNetworkByCluster", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clients/usage/byNetwork/byCluster" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "networkGroupIds", + "clusterIds", + "usageUnits", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "networkGroupIds", + "clusterIds", + ] + 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"getOrganizationCampusGatewayClientsUsageByNetworkByCluster: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationCampusGatewayClusters(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Get the details of campus gateway clusters** @@ -143,6 +287,556 @@ def getOrganizationCampusGatewayClusters(self, organizationId: str, total_pages= return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationCampusGatewayClustersFailoverTargets( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the details of a Failover Targets for a Campus Gateway cluster** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-clusters-failover-targets + + - 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 networks. This filter uses multiple exact matches. + - clusterIds (array): Optional parameter to filter clusters. This filter uses multiple exact matches. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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": ["campusGateway", "configure", "clusters", "failover", "targets"], + "operation": "getOrganizationCampusGatewayClustersFailoverTargets", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/failover/targets" + + query_params = [ + "networkIds", + "clusterIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "clusterIds", + ] + 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"getOrganizationCampusGatewayClustersFailoverTargets: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationCampusGatewayClustersFailoverTargetsByCluster( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get available backup cluster targets for campus gateway failover configuration** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-clusters-failover-targets-by-cluster + + - 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): Networks for which backup cluster targets should be gathered. + - clusterIds (array): Cluster IDs to filter backup cluster targets. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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": ["campusGateway", "configure", "clusters", "failover", "targets", "byCluster"], + "operation": "getOrganizationCampusGatewayClustersFailoverTargetsByCluster", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/failover/targets/byCluster" + + query_params = [ + "networkIds", + "clusterIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "clusterIds", + ] + 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"getOrganizationCampusGatewayClustersFailoverTargetsByCluster: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationCampusGatewayClustersNetworksOverviews( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List networks tunneling through Campus Gateway clusters with their AP, ssids and client counts** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-clusters-networks-overviews + + - 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 + - clusterIds (array): Optional parameter to filter by MCG cluster IDs. This filter uses multiple exact matches. + - siteIds (array): Optional parameter to filter by site IDs. This filter uses multiple exact matches. + - networkIds (array): Optional parameter to filter networks. This filter uses multiple exact matches. + - tunnelingSources (array): Optional parameter to filter networks by tunneling source. 'configured' returns networks explicitly set up to tunnel through the campus gateway. 'roaming' returns networks tunneling due to AP roaming or disaster recovery. 'roaming' is only effective when 'clusterIds' is also provided; without 'clusterIds', the filter defaults to configured-only behavior. Defaults to 'configured' if omitted. + - search (string): Optional parameter to filter networks by wireless network name. This filter uses case-insensitive substring matching. + - sortBy (string): Optional parameter to sort results. Default is 'name'. Use 'siteName' to sort by site name. + - sortOrder (string): Optional parameter to specify sort direction. Default is 'asc'. + - 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. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["clients", "clusterId", "connections", "name", "networkId", "siteName", "ssids"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["campusGateway", "configure", "clusters", "networks", "overviews"], + "operation": "getOrganizationCampusGatewayClustersNetworksOverviews", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/networks/overviews" + + query_params = [ + "clusterIds", + "siteIds", + "networkIds", + "tunnelingSources", + "search", + "sortBy", + "sortOrder", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "clusterIds", + "siteIds", + "networkIds", + "tunnelingSources", + ] + 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"getOrganizationCampusGatewayClustersNetworksOverviews: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def provisionOrganizationCampusGatewayClusters( + self, + organizationId: str, + clusterId: str, + network: dict, + name: str, + uplinks: list, + tunnels: list, + nameservers: dict, + portChannels: list, + **kwargs, + ): + """ + **Provisions a cluster,adds campus gateways to it and associate/dissociate failover targets.** + https://developer.cisco.com/meraki/api-v1/#!provision-organization-campus-gateway-clusters + + - organizationId (string): Organization ID + - clusterId (string): ID of the cluster to be provisioned + - network (object): Network to be provisioned + - name (string): Name of the new cluster + - uplinks (array): Uplink interface settings of the cluster + - tunnels (array): Tunnel interface settings of the cluster: Reuse uplink or specify tunnel interface + - nameservers (object): Nameservers of the cluster + - portChannels (array): Port channel settings of the cluster + - devices (array): Devices to be added to the cluster + - failover (object): Failover targets for the cluster + - notes (string): Notes about cluster with max size of 511 characters allowed + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["campusGateway", "configure", "clusters"], + "operation": "provisionOrganizationCampusGatewayClusters", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/provision" + + body_params = [ + "clusterId", + "network", + "name", + "uplinks", + "tunnels", + "nameservers", + "portChannels", + "devices", + "failover", + "notes", + ] + 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"provisionOrganizationCampusGatewayClusters: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationCampusGatewayClustersSsids(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List SSIDs tunneling through Campus Gateway clusters** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-clusters-ssids + + - 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 + - clusterIds (array): Optional parameter to filter by MCG cluster IDs. This filter uses multiple exact matches. + - networkIds (array): Optional parameter to filter networks. This filter uses multiple exact matches. + - search (string): Optional parameter to filter SSIDs by name. This filter uses case-insensitive starts with string matching. + - sortBy (string): Optional parameter to sort results. Default is 'networkId'. + - sortOrder (string): Optional parameter to specify sort direction. Default is 'asc'. + - 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. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["clusterId", "name", "networkId", "ssidId"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["campusGateway", "configure", "clusters", "ssids"], + "operation": "getOrganizationCampusGatewayClustersSsids", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/ssids" + + query_params = [ + "clusterIds", + "networkIds", + "search", + "sortBy", + "sortOrder", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "clusterIds", + "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"getOrganizationCampusGatewayClustersSsids: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationCampusGatewayClustersTunnelingByClusterByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List all the MCG cluster-network tunnel settings** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-clusters-tunneling-by-cluster-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 + - clusterIds (array): Optional parameter to filter MCG clusters. This filter uses multiple exact matches + - dataEncryptionEnabled (boolean): Optional parameter to filter cluster-network tunnel settings by data encryption configuration + - networkIds (array): Optional parameter to filter networks. This filter uses multiple exact matches + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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": ["campusGateway", "configure", "clusters", "tunneling", "byCluster", "byNetwork"], + "operation": "getOrganizationCampusGatewayClustersTunnelingByClusterByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/tunneling/byCluster/byNetwork" + + query_params = [ + "clusterIds", + "dataEncryptionEnabled", + "networkIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "clusterIds", + "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"getOrganizationCampusGatewayClustersTunnelingByClusterByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def batchOrganizationCampusGatewayClustersTunnelingByClusterByNetworkUpdate(self, organizationId: str, **kwargs): + """ + **Update MCG cluster-network tunnel settings for multiple networks** + https://developer.cisco.com/meraki/api-v1/#!batch-organization-campus-gateway-clusters-tunneling-by-cluster-by-network-update + + - organizationId (string): Organization ID + - items (array): MCG cluster-network tunnel settings + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["campusGateway", "configure", "clusters", "tunneling", "byCluster", "byNetwork"], + "operation": "batchOrganizationCampusGatewayClustersTunnelingByClusterByNetworkUpdate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/clusters/tunneling/byCluster/byNetwork/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"batchOrganizationCampusGatewayClustersTunnelingByClusterByNetworkUpdate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationCampusGatewayConnections(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the details of APs tunneling through the Campus Gateway clusters** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-connections + + - 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 networks. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter connections(APs) by its own serials. This filter uses multiple exact matches. + - campusGatewaySerials (array): Optional parameter to filter connections(APs) by MCG serials. This filter uses multiple exact matches. + - campusGatewayClusterIds (array): Optional parameter to filter connections(APs) by MCG cluster IDs. This filter uses multiple exact matches. + - campusGatewayTunnelStatuses (array): Optional parameter to filter connections(APs) by tunnel statuses. This filter uses multiple exact matches. + - search (string): Optional parameter to filter connections(APs) on AP name, serial, MAC address, network name, or interface IP address. This filter uses partial string matching (ILIKE). + - models (array): Optional parameter to filter connections(APs) by device model names. This filter uses multiple exact matches. + - dataEncryptionStatuses (array): Optional parameter to filter connections(APs) by data encryption status. This filter uses multiple exact matches. + - sortBy (string): Optional parameter to sort results. Available options: name, serial, status, interfaces, clients, dataEncryption, networkName. Default is 'serial'. + - sortOrder (string): Optional parameter to specify sort direction. Default is 'asc'. + - 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. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["clients", "dataEncryption", "interfaces", "name", "networkName", "serial", "status"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["campusGateway", "configure", "connections"], + "operation": "getOrganizationCampusGatewayConnections", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/connections" + + query_params = [ + "networkIds", + "serials", + "campusGatewaySerials", + "campusGatewayClusterIds", + "campusGatewayTunnelStatuses", + "search", + "models", + "dataEncryptionStatuses", + "sortBy", + "sortOrder", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "campusGatewaySerials", + "campusGatewayClusterIds", + "campusGatewayTunnelStatuses", + "models", + "dataEncryptionStatuses", + ] + 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"getOrganizationCampusGatewayConnections: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationCampusGatewayConnectionsOverview(self, organizationId: str, **kwargs): + """ + **List the count of connections(APs) with tunneling status up and down through the Campus Gateway clusters** + https://developer.cisco.com/meraki/api-v1/#!get-organization-campus-gateway-connections-overview + + - organizationId (string): Organization ID + - networkIds (array): Optional parameter to filter networks. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter connections(APs) by its own serials. This filter uses multiple exact matches. + - campusGatewaySerials (array): Optional parameter to filter connections(APs) by Campus Gateway serials. This filter uses multiple exact matches. + - campusGatewayClusterIds (array): Optional parameter to filter connections(APs) by Campus Gateway cluster IDs. This filter uses multiple exact matches. + - campusGatewayTunnelStatuses (array): Optional parameter to filter connections(APs) by tunnel statuses. This filter uses multiple exact matches. + - search (string): Optional setting that lets you filter access points (APs) by name, serial number, MAC address, network name, or interface IP address. The filter matches partial text, not just exact values (uses ILIKE matching). + - models (array): Optional parameter to filter connections(APs) by device model names. This filter uses multiple exact matches. + - dataEncryptionStatuses (array): Optional parameter to filter connections(APs) by data encryption status. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["campusGateway", "configure", "connections", "overview"], + "operation": "getOrganizationCampusGatewayConnectionsOverview", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/campusGateway/connections/overview" + + query_params = [ + "networkIds", + "serials", + "campusGatewaySerials", + "campusGatewayClusterIds", + "campusGatewayTunnelStatuses", + "search", + "models", + "dataEncryptionStatuses", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "campusGatewaySerials", + "campusGatewayClusterIds", + "campusGatewayTunnelStatuses", + "models", + "dataEncryptionStatuses", + ] + 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"getOrganizationCampusGatewayConnectionsOverview: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + def getOrganizationCampusGatewayDevicesUplinksLocalOverridesByDevice( self, organizationId: str, total_pages=1, direction="next", **kwargs ): diff --git a/meraki/api/devices.py b/meraki/api/devices.py index ab404ce..e1f5909 100644 --- a/meraki/api/devices.py +++ b/meraki/api/devices.py @@ -232,6 +232,72 @@ def createDeviceCellularUplinksBandsMasksUpdate(self, serial: str, slot: str, ty return self._session.post(metadata, resource, payload) + def updateDeviceCliConfigFavorite(self, serial: str, configId: str, favorite: bool, **kwargs): + """ + **Favorite or unfavorite a configuration for an IOS-XE device** + https://developer.cisco.com/meraki/api-v1/#!update-device-cli-config-favorite + + - serial (string): Serial + - configId (string): Config ID + - favorite (boolean): Whether the config should be favorited + """ + + kwargs = locals() + + metadata = { + "tags": ["devices", "configure", "cli", "configs"], + "operation": "updateDeviceCliConfigFavorite", + } + serial = urllib.parse.quote(str(serial), safe="") + configId = urllib.parse.quote(str(configId), safe="") + resource = f"/devices/{serial}/cli/configs/{configId}" + + body_params = [ + "favorite", + ] + 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"updateDeviceCliConfigFavorite: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def createDeviceConfigRestore(self, serial: str, configId: str, **kwargs): + """ + **Create a restore request for a specific config history record** + https://developer.cisco.com/meraki/api-v1/#!create-device-config-restore + + - serial (string): Serial + - configId (string): Config ID + - scheduledFor (string): Requested ISO 8601 UTC timestamp for when the restore should be scheduled + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "configure", "cli", "configs"], + "operation": "createDeviceConfigRestore", + } + serial = urllib.parse.quote(str(serial), safe="") + configId = urllib.parse.quote(str(configId), safe="") + resource = f"/devices/{serial}/cli/configs/{configId}/restores" + + body_params = [ + "scheduledFor", + ] + 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"createDeviceConfigRestore: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + def getDeviceClients(self, serial: str, **kwargs): """ **List the clients of a device, up to a maximum of a month ago** @@ -265,6 +331,56 @@ def getDeviceClients(self, serial: str, **kwargs): return self._session.get(metadata, resource, params) + def createDeviceLiveToolsAclHitCount(self, serial: str, **kwargs): + """ + **Enqueue a job to perform an ACL hit count for the device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-acl-hit-count + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "aclHitCount"], + "operation": "createDeviceLiveToolsAclHitCount", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/aclHitCount" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsAclHitCount: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsAclHitCount(self, serial: str, id: str): + """ + **Return an ACL hit count live tool job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-acl-hit-count + + - serial (string): Serial + - id (string): ID + """ + + metadata = { + "tags": ["devices", "liveTools", "aclHitCount"], + "operation": "getDeviceLiveToolsAclHitCount", + } + serial = urllib.parse.quote(str(serial), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/devices/{serial}/liveTools/aclHitCount/{id}" + + return self._session.get(metadata, resource) + def createDeviceLiveToolsArpTable(self, serial: str, **kwargs): """ **Enqueue a job to perform a ARP table request for the device** @@ -367,6 +483,75 @@ def getDeviceLiveToolsCableTest(self, serial: str, id: str): return self._session.get(metadata, resource) + def getDeviceLiveToolsClientsDisconnect(self, serial: str, id: str): + """ + **Return a client disconnect job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-clients-disconnect + + - serial (string): Serial + - id (string): ID + """ + + metadata = { + "tags": ["devices", "liveTools", "clients", "disconnect"], + "operation": "getDeviceLiveToolsClientsDisconnect", + } + serial = urllib.parse.quote(str(serial), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/devices/{serial}/liveTools/clients/disconnect/{id}" + + return self._session.get(metadata, resource) + + def createDeviceLiveToolsDhcpLease(self, serial: str, **kwargs): + """ + **Enqueue a job to perform a DHCP leases request for the device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-dhcp-lease + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "dhcpLeases"], + "operation": "createDeviceLiveToolsDhcpLease", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/dhcpLeases" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsDhcpLease: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsDhcpLease(self, serial: str, dhcpLeasesId: str): + """ + **Return a DHCP leases live tool job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-dhcp-lease + + - serial (string): Serial + - dhcpLeasesId (string): Dhcp leases ID + """ + + metadata = { + "tags": ["devices", "liveTools", "dhcpLeases"], + "operation": "getDeviceLiveToolsDhcpLease", + } + serial = urllib.parse.quote(str(serial), safe="") + dhcpLeasesId = urllib.parse.quote(str(dhcpLeasesId), safe="") + resource = f"/devices/{serial}/liveTools/dhcpLeases/{dhcpLeasesId}" + + return self._session.get(metadata, resource) + def createDeviceLiveToolsLedsBlink(self, serial: str, duration: int, **kwargs): """ **Enqueue a job to blink LEDs on a device** @@ -521,6 +706,56 @@ def getDeviceLiveToolsMulticastRouting(self, serial: str, multicastRoutingId: st return self._session.get(metadata, resource) + def createDeviceLiveToolsOspfNeighbor(self, serial: str, **kwargs): + """ + **Enqueue a job to perform a OSPF neighbors request for the device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-ospf-neighbor + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "ospfNeighbors"], + "operation": "createDeviceLiveToolsOspfNeighbor", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/ospfNeighbors" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsOspfNeighbor: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsOspfNeighbor(self, serial: str, ospfNeighborsId: str): + """ + **Return an OSPF neighbors live tool job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-ospf-neighbor + + - serial (string): Serial + - ospfNeighborsId (string): Ospf neighbors ID + """ + + metadata = { + "tags": ["devices", "liveTools", "ospfNeighbors"], + "operation": "getDeviceLiveToolsOspfNeighbor", + } + serial = urllib.parse.quote(str(serial), safe="") + ospfNeighborsId = urllib.parse.quote(str(ospfNeighborsId), safe="") + resource = f"/devices/{serial}/liveTools/ospfNeighbors/{ospfNeighborsId}" + + return self._session.get(metadata, resource) + def createDeviceLiveToolsPing(self, serial: str, target: str, **kwargs): """ **Enqueue a job to ping a target host from the device** @@ -679,6 +914,344 @@ def getDeviceLiveToolsPortsCycle(self, serial: str, id: str): return self._session.get(metadata, resource) + def createDeviceLiveToolsPortsStatus(self, serial: str, **kwargs): + """ + **Enqueue a job to retrieve port status for a device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-ports-status + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "ports", "status"], + "operation": "createDeviceLiveToolsPortsStatus", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/ports/status" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsPortsStatus: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsPortsStatus(self, serial: str, jobId: str): + """ + **Return a port status live tool job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-ports-status + + - serial (string): Serial + - jobId (string): Job ID + """ + + metadata = { + "tags": ["devices", "liveTools", "ports", "status"], + "operation": "getDeviceLiveToolsPortsStatus", + } + serial = urllib.parse.quote(str(serial), safe="") + jobId = urllib.parse.quote(str(jobId), safe="") + resource = f"/devices/{serial}/liveTools/ports/status/{jobId}" + + return self._session.get(metadata, resource) + + def createDeviceLiveToolsReboot(self, serial: str, **kwargs): + """ + **Enqueue a job to reboot a device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-reboot + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "reboot"], + "operation": "createDeviceLiveToolsReboot", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/reboot" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsReboot: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsReboot(self, serial: str, rebootId: str): + """ + **Return a reboot job** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-reboot + + - serial (string): Serial + - rebootId (string): Reboot ID + """ + + metadata = { + "tags": ["devices", "liveTools", "reboot"], + "operation": "getDeviceLiveToolsReboot", + } + serial = urllib.parse.quote(str(serial), safe="") + rebootId = urllib.parse.quote(str(rebootId), safe="") + resource = f"/devices/{serial}/liveTools/reboot/{rebootId}" + + return self._session.get(metadata, resource) + + def createDeviceLiveToolsRoutingTable(self, serial: str, **kwargs): + """ + **Enqueue a job to perform a routing table request for the device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-routing-table + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "routingTable"], + "operation": "createDeviceLiveToolsRoutingTable", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/routingTable" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsRoutingTable: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def createDeviceLiveToolsRoutingTableLookup(self, serial: str, **kwargs): + """ + **Enqueue a job to perform a routing table lookup request for a device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-routing-table-lookup + + - serial (string): Serial + - type (string): The type of route defined + - destination (object): The destination IP or subnet to lookup + - nextHop (object): The next hop to lookup + - vpn (object): VPN related search criteria + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = [ + "BGP", + "EIGRP", + "HSRP", + "IGRP", + "ISIS", + "LISP", + "NAT", + "ND", + "NHRP", + "OMP", + "OSPF", + "RIP", + "default WAN", + "direct", + "static", + ] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["devices", "liveTools", "routingTable", "lookups"], + "operation": "createDeviceLiveToolsRoutingTableLookup", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/routingTable/lookups" + + body_params = [ + "type", + "destination", + "nextHop", + "vpn", + "callback", + ] + 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"createDeviceLiveToolsRoutingTableLookup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsRoutingTableLookup(self, serial: str, id: str): + """ + **Return a routing table live tool lookup job for a device** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-routing-table-lookup + + - serial (string): Serial + - id (string): ID + """ + + metadata = { + "tags": ["devices", "liveTools", "routingTable", "lookups"], + "operation": "getDeviceLiveToolsRoutingTableLookup", + } + serial = urllib.parse.quote(str(serial), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/devices/{serial}/liveTools/routingTable/lookups/{id}" + + return self._session.get(metadata, resource) + + def createDeviceLiveToolsRoutingTableSummary(self, serial: str, **kwargs): + """ + **Enqueue a routing table summary job for a device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-routing-table-summary + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "routingTable", "summaries"], + "operation": "createDeviceLiveToolsRoutingTableSummary", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/routingTable/summaries" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsRoutingTableSummary: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsRoutingTableSummary(self, serial: str, id: str): + """ + **Return the status and result of a routing table summary job** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-routing-table-summary + + - serial (string): Serial + - id (string): ID + """ + + metadata = { + "tags": ["devices", "liveTools", "routingTable", "summaries"], + "operation": "getDeviceLiveToolsRoutingTableSummary", + } + serial = urllib.parse.quote(str(serial), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/devices/{serial}/liveTools/routingTable/summaries/{id}" + + return self._session.get(metadata, resource) + + def getDeviceLiveToolsRoutingTable(self, serial: str, id: str): + """ + **Return an routing table live tool job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-routing-table + + - serial (string): Serial + - id (string): ID + """ + + metadata = { + "tags": ["devices", "liveTools", "routingTable"], + "operation": "getDeviceLiveToolsRoutingTable", + } + serial = urllib.parse.quote(str(serial), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/devices/{serial}/liveTools/routingTable/{id}" + + return self._session.get(metadata, resource) + + def createDeviceLiveToolsSpeedTest(self, serial: str, **kwargs): + """ + **Enqueue a job to execute a speed test from a device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-speed-test + + - serial (string): Serial + - interface (string): Optional filter for a specific WAN interface. Valid interfaces are wan1, wan2, wan3, wan4. Default will return wan1. + """ + + kwargs.update(locals()) + + if "interface" in kwargs: + options = ["wan1", "wan2", "wan3", "wan4"] + assert kwargs["interface"] in options, ( + f'''"interface" cannot be "{kwargs["interface"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["devices", "liveTools", "speedTest"], + "operation": "createDeviceLiveToolsSpeedTest", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/speedTest" + + body_params = [ + "interface", + ] + 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"createDeviceLiveToolsSpeedTest: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsSpeedTest(self, serial: str, id: str): + """ + **Returns a speed test result in megabits per second** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-speed-test + + - serial (string): Serial + - id (string): ID + """ + + metadata = { + "tags": ["devices", "liveTools", "speedTest"], + "operation": "getDeviceLiveToolsSpeedTest", + } + serial = urllib.parse.quote(str(serial), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/devices/{serial}/liveTools/speedTest/{id}" + + return self._session.get(metadata, resource) + def createDeviceLiveToolsThroughputTest(self, serial: str, **kwargs): """ **Enqueue a job to test a device throughput, the test will run for 10 secs to test throughput** @@ -729,6 +1302,110 @@ def getDeviceLiveToolsThroughputTest(self, serial: str, throughputTestId: str): return self._session.get(metadata, resource) + def createDeviceLiveToolsTraceRoute(self, serial: str, target: str, sourceInterface: str, **kwargs): + """ + **Enqueue a job to run trace route in the device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-trace-route + + - serial (string): Serial + - target (string): Destination Host name or address + - sourceInterface (string): Source Interface IP address + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "traceRoute"], + "operation": "createDeviceLiveToolsTraceRoute", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/traceRoute" + + body_params = [ + "target", + "sourceInterface", + "callback", + ] + 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"createDeviceLiveToolsTraceRoute: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsTraceRoute(self, serial: str, traceRouteId: str): + """ + **Return a trace route job** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-trace-route + + - serial (string): Serial + - traceRouteId (string): Trace route ID + """ + + metadata = { + "tags": ["devices", "liveTools", "traceRoute"], + "operation": "getDeviceLiveToolsTraceRoute", + } + serial = urllib.parse.quote(str(serial), safe="") + traceRouteId = urllib.parse.quote(str(traceRouteId), safe="") + resource = f"/devices/{serial}/liveTools/traceRoute/{traceRouteId}" + + return self._session.get(metadata, resource) + + def createDeviceLiveToolsVrrpTable(self, serial: str, **kwargs): + """ + **Enqueue a job to perform a VRRP table request for the device** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-vrrp-table + + - serial (string): Serial + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["devices", "liveTools", "vrrpTable"], + "operation": "createDeviceLiveToolsVrrpTable", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/vrrpTable" + + body_params = [ + "callback", + ] + 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"createDeviceLiveToolsVrrpTable: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsVrrpTable(self, serial: str, vrrpTableId: str): + """ + **Return an VRRP table live tool job.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-vrrp-table + + - serial (string): Serial + - vrrpTableId (string): Vrrp table ID + """ + + metadata = { + "tags": ["devices", "liveTools", "vrrpTable"], + "operation": "getDeviceLiveToolsVrrpTable", + } + serial = urllib.parse.quote(str(serial), safe="") + vrrpTableId = urllib.parse.quote(str(vrrpTableId), safe="") + resource = f"/devices/{serial}/liveTools/vrrpTable/{vrrpTableId}" + + return self._session.get(metadata, resource) + def createDeviceLiveToolsWakeOnLan(self, serial: str, vlanId: int, mac: str, **kwargs): """ **Enqueue a job to send a Wake-on-LAN packet from the device** diff --git a/meraki/api/insight.py b/meraki/api/insight.py index 79b0283..08b7cb4 100644 --- a/meraki/api/insight.py +++ b/meraki/api/insight.py @@ -64,6 +64,95 @@ def getOrganizationInsightApplications(self, organizationId: str): return self._session.get(metadata, resource) + def createOrganizationInsightApplication(self, organizationId: str, counterSetRuleId: int, **kwargs): + """ + **Add an Insight tracked application** + https://developer.cisco.com/meraki/api-v1/#!create-organization-insight-application + + - organizationId (string): Organization ID + - counterSetRuleId (integer): The id of the counter set rule + - enableSmartThresholds (boolean): Enable Smart Thresholds + - thresholds (object): Thresholds defined by a user for each application + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["insight", "configure", "applications"], + "operation": "createOrganizationInsightApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/insight/applications" + + body_params = [ + "counterSetRuleId", + "enableSmartThresholds", + "thresholds", + ] + 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"createOrganizationInsightApplication: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateOrganizationInsightApplication(self, organizationId: str, applicationId: str, **kwargs): + """ + **Update an Insight tracked application** + https://developer.cisco.com/meraki/api-v1/#!update-organization-insight-application + + - organizationId (string): Organization ID + - applicationId (string): Application ID + - enableSmartThresholds (boolean): Enable Smart Thresholds + - thresholds (object): Thresholds defined by a user for each application + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["insight", "configure", "applications"], + "operation": "updateOrganizationInsightApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + applicationId = urllib.parse.quote(str(applicationId), safe="") + resource = f"/organizations/{organizationId}/insight/applications/{applicationId}" + + body_params = [ + "enableSmartThresholds", + "thresholds", + ] + 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"updateOrganizationInsightApplication: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationInsightApplication(self, organizationId: str, applicationId: str): + """ + **Delete an Insight tracked application** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-insight-application + + - organizationId (string): Organization ID + - applicationId (string): Application ID + """ + + metadata = { + "tags": ["insight", "configure", "applications"], + "operation": "deleteOrganizationInsightApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + applicationId = urllib.parse.quote(str(applicationId), safe="") + resource = f"/organizations/{organizationId}/insight/applications/{applicationId}" + + return self._session.delete(metadata, resource) + def getOrganizationInsightMonitoredMediaServers(self, organizationId: str): """ **List the monitored media servers for this organization** @@ -194,3 +283,154 @@ def deleteOrganizationInsightMonitoredMediaServer(self, organizationId: str, mon resource = f"/organizations/{organizationId}/insight/monitoredMediaServers/{monitoredMediaServerId}" return self._session.delete(metadata, resource) + + def getOrganizationInsightSpeedTestResults(self, organizationId: str, serials: list, **kwargs): + """ + **List the speed tests for the given devices under this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-insight-speed-test-results + + - organizationId (string): Organization ID + - serials (array): A list of serial numbers. The returned results will be filtered to only include these serials. + - timespan (integer): Amount of seconds ago to query for results. Only include timespan OR both t0 & t1. + - t0 (integer): Start time to query for results in epoch seconds. Only include timespan OR both t0 & t1. + - t1 (integer): End time to query for results in epoch seconds. Only include timespan OR both t0 & t1. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["insight", "configure", "speedTestResults"], + "operation": "getOrganizationInsightSpeedTestResults", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/insight/speedTestResults" + + query_params = [ + "serials", + "timespan", + "t0", + "t1", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationInsightSpeedTestResults: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationInsightWebApps(self, organizationId: str): + """ + **Lists all default web applications rules with counter set rule ids** + https://developer.cisco.com/meraki/api-v1/#!get-organization-insight-web-apps + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["insight", "configure", "webApps"], + "operation": "getOrganizationInsightWebApps", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/insight/webApps" + + return self._session.get(metadata, resource) + + def createOrganizationInsightWebApp(self, organizationId: str, name: str, hostname: str, **kwargs): + """ + **Add a custom web application for Insight to be able to track** + https://developer.cisco.com/meraki/api-v1/#!create-organization-insight-web-app + + - organizationId (string): Organization ID + - name (string): The name of the Web Application + - hostname (string): The hostname of Web Application + """ + + kwargs = locals() + + metadata = { + "tags": ["insight", "configure", "webApps"], + "operation": "createOrganizationInsightWebApp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/insight/webApps" + + body_params = [ + "name", + "hostname", + ] + 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"createOrganizationInsightWebApp: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateOrganizationInsightWebApp(self, organizationId: str, customCounterSetRuleId: str, **kwargs): + """ + **Update a custom web application for Insight to be able to track** + https://developer.cisco.com/meraki/api-v1/#!update-organization-insight-web-app + + - organizationId (string): Organization ID + - customCounterSetRuleId (string): Custom counter set rule ID + - name (string): The name of the Web Application + - hostname (string): The hostname of Web Application + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["insight", "configure", "webApps"], + "operation": "updateOrganizationInsightWebApp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + customCounterSetRuleId = urllib.parse.quote(str(customCounterSetRuleId), safe="") + resource = f"/organizations/{organizationId}/insight/webApps/{customCounterSetRuleId}" + + body_params = [ + "name", + "hostname", + ] + 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"updateOrganizationInsightWebApp: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationInsightWebApp(self, organizationId: str, customCounterSetRuleId: str): + """ + **Delete a custom web application by counter set rule id.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-insight-web-app + + - organizationId (string): Organization ID + - customCounterSetRuleId (string): Custom counter set rule ID + """ + + metadata = { + "tags": ["insight", "configure", "webApps"], + "operation": "deleteOrganizationInsightWebApp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + customCounterSetRuleId = urllib.parse.quote(str(customCounterSetRuleId), safe="") + resource = f"/organizations/{organizationId}/insight/webApps/{customCounterSetRuleId}" + + return self._session.delete(metadata, resource) diff --git a/meraki/api/licensing.py b/meraki/api/licensing.py index df89824..5911aa6 100644 --- a/meraki/api/licensing.py +++ b/meraki/api/licensing.py @@ -45,6 +45,39 @@ def getAdministeredLicensingSubscriptionEntitlements(self, **kwargs): return self._session.get(metadata, resource, params) + def batchAdministeredLicensingSubscriptionNetworksFeatureTiersUpdate(self, **kwargs): + """ + **Batch change networks to their desired feature tier for specified product types** + https://developer.cisco.com/meraki/api-v1/#!batch-administered-licensing-subscription-networks-feature-tiers-update + + - items (array): List of networks and corresponding product types to update. Maximum 500 networks + - isAtomic (boolean): Flag to determine if the operation should act atomically + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["licensing", "configure", "subscription", "featureTiers"], + "operation": "batchAdministeredLicensingSubscriptionNetworksFeatureTiersUpdate", + } + resource = "/administered/licensing/subscription/networks/featureTiers/batchUpdate" + + body_params = [ + "items", + "isAtomic", + ] + 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"batchAdministeredLicensingSubscriptionNetworksFeatureTiersUpdate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + def getAdministeredLicensingSubscriptionSubscriptions( self, organizationIds: list, total_pages=1, direction="next", **kwargs ): diff --git a/meraki/api/nac.py b/meraki/api/nac.py new file mode 100644 index 0000000..067cc48 --- /dev/null +++ b/meraki/api/nac.py @@ -0,0 +1,1151 @@ +import urllib + + +class Nac(object): + def __init__(self, session): + super(Nac, self).__init__() + self._session = session + + def getOrganizationNacAuthorizationPolicies(self, organizationId: str, **kwargs): + """ + **Get all nac authorization policies for this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-authorization-policies + + - organizationId (string): Organization ID + - policyIds (array): List of ids for specific authorization policies retrieval + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "authorization", "policies"], + "operation": "getOrganizationNacAuthorizationPolicies", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/authorization/policies" + + query_params = [ + "policyIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "policyIds", + ] + 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"getOrganizationNacAuthorizationPolicies: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def createOrganizationNacAuthorizationPolicyRule( + self, organizationId: str, policyId: str, name: str, rank: int, authorizationProfile: dict, **kwargs + ): + """ + **Create a rule in an authorization policy set of an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-authorization-policy-rule + + - organizationId (string): Organization ID + - policyId (string): Policy ID + - name (string): Name of Authorization rule + - rank (integer): Rank of Authorization rule + - authorizationProfile (object): Authorization profile associated with the rule + - enabled (boolean): Enabled status of authorization rule. Default is False. + - sourcePolicyVersion (string): Source policy version of the policy set containing this rule + - condition (object): Condition of Authorization rule. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "authorization", "policies", "rules"], + "operation": "createOrganizationNacAuthorizationPolicyRule", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyId = urllib.parse.quote(str(policyId), safe="") + resource = f"/organizations/{organizationId}/nac/authorization/policies/{policyId}/rules" + + body_params = [ + "name", + "rank", + "enabled", + "sourcePolicyVersion", + "authorizationProfile", + "condition", + ] + 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"createOrganizationNacAuthorizationPolicyRule: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationNacAuthorizationPolicyRule( + self, organizationId: str, policyId: str, ruleId: str, name: str, rank: int, authorizationProfile: dict, **kwargs + ): + """ + **Update an existing rule of an authorization policy set within an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-nac-authorization-policy-rule + + - organizationId (string): Organization ID + - policyId (string): Policy ID + - ruleId (string): Rule ID + - name (string): Name of Authorization rule + - rank (integer): Rank of Authorization rule + - authorizationProfile (object): Authorization profile associated with the rule + - enabled (boolean): Enabled status of authorization rule. Default is False. + - sourcePolicyVersion (string): Source policy version of the policy set containing this rule + - condition (object): Condition of Authorization rule. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "authorization", "policies", "rules"], + "operation": "updateOrganizationNacAuthorizationPolicyRule", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyId = urllib.parse.quote(str(policyId), safe="") + ruleId = urllib.parse.quote(str(ruleId), safe="") + resource = f"/organizations/{organizationId}/nac/authorization/policies/{policyId}/rules/{ruleId}" + + body_params = [ + "name", + "rank", + "enabled", + "sourcePolicyVersion", + "authorizationProfile", + "condition", + ] + 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"updateOrganizationNacAuthorizationPolicyRule: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationNacAuthorizationPolicyRule(self, organizationId: str, policyId: str, ruleId: str, **kwargs): + """ + **Delete a rule in an authorization policy set of an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-nac-authorization-policy-rule + + - organizationId (string): Organization ID + - policyId (string): Policy ID + - ruleId (string): Rule ID + - sourcePolicyVersion (string): Source policy version of the policy set containing this rule + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "authorization", "policies", "rules"], + "operation": "deleteOrganizationNacAuthorizationPolicyRule", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyId = urllib.parse.quote(str(policyId), safe="") + ruleId = urllib.parse.quote(str(ruleId), safe="") + resource = f"/organizations/{organizationId}/nac/authorization/policies/{policyId}/rules/{ruleId}" + + return self._session.delete(metadata, resource) + + def getOrganizationNacCertificates(self, organizationId: str, **kwargs): + """ + **Gets all certificates for an organization and can filter by certificate status, expiry date and last used date** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-certificates + + - organizationId (string): Organization ID + - status (string): Status Parameter for GetAll request + - expiry (boolean): Boolean indicating whether to filter by expiry in one month + - lastUsed (boolean): Boolean indicating whether to filter by last used in over one month + """ + + kwargs.update(locals()) + + if "status" in kwargs: + options = ["Disabled", "Enabled"] + assert kwargs["status"] in options, ( + f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["nac", "configure", "certificates"], + "operation": "getOrganizationNacCertificates", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates" + + query_params = [ + "status", + "expiry", + "lastUsed", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationNacCertificates: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getOrganizationNacCertificatesAuthoritiesCrls(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get all the organization's CRL.It's possible to filter results by CRL issuers (CA) or CRL's ID - see caIds and crlIds query parameters.This endpoint could be used for 'show' action when you specify a single CRL ID in crlIds parameter** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-certificates-authorities-crls + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 5. + - 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. + - sortBy (string): Optional parameter to specify the field used to sort results. (default: caId) + - sortOrder (string): Optional parameter to specify the sort order. (default: asc) + - crlIds (array): A list of CRL ids. The returned CRLs will be filtered to only include these ids + - caIds (array): When ca Ids are provided, only CRLs associated to the given CA will be returned. Otherwise, all the CRLs created for an organization will be returned. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["caId", "createdAt", "lastUpdatedAt"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["nac", "configure", "certificates", "authorities", "crls"], + "operation": "getOrganizationNacCertificatesAuthoritiesCrls", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortBy", + "sortOrder", + "crlIds", + "caIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "crlIds", + "caIds", + ] + 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"getOrganizationNacCertificatesAuthoritiesCrls: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationNacCertificatesAuthoritiesCrl( + self, organizationId: str, caId: str, content: str, isDelta: bool, **kwargs + ): + """ + **Create a new CRL (either base or delta) for an existing CA** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-certificates-authorities-crl + + - organizationId (string): Organization ID + - caId (string): ID of the CRL issuer + - content (string): CRL content in PEM format + - isDelta (boolean): Whether it's a delta CRL or not + """ + + kwargs = locals() + + metadata = { + "tags": ["nac", "configure", "certificates", "authorities", "crls"], + "operation": "createOrganizationNacCertificatesAuthoritiesCrl", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls" + + body_params = [ + "caId", + "content", + "isDelta", + ] + 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"createOrganizationNacCertificatesAuthoritiesCrl: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationNacCertificatesAuthoritiesCrlsDescriptors( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get all the organization's CRL descriptors (metadata only - revocation list data is excluded)** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-certificates-authorities-crls-descriptors + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 20. + - 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. + - sortBy (string): Optional parameter to specify the field used to sort results. (default: caId) + - sortOrder (string): Optional parameter to specify the sort order. (default: asc) + - caIds (array): When ca Ids are provided, only CRLs associated to the given CA will be returned. Otherwise, all the CRLs created for an organization will be returned. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["caId", "createdAt", "lastUpdatedAt"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["nac", "configure", "certificates", "authorities", "crls", "descriptors"], + "operation": "getOrganizationNacCertificatesAuthoritiesCrlsDescriptors", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls/descriptors" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortBy", + "sortOrder", + "caIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "caIds", + ] + 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"getOrganizationNacCertificatesAuthoritiesCrlsDescriptors: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def deleteOrganizationNacCertificatesAuthoritiesCrl(self, organizationId: str, crlId: str): + """ + **Deletes a whole CRL, including all its deltas (in case of base CRL removal)** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-nac-certificates-authorities-crl + + - organizationId (string): Organization ID + - crlId (string): Crl ID + """ + + metadata = { + "tags": ["nac", "configure", "certificates", "authorities", "crls"], + "operation": "deleteOrganizationNacCertificatesAuthoritiesCrl", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + crlId = urllib.parse.quote(str(crlId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/authorities/crls/{crlId}" + + return self._session.delete(metadata, resource) + + def createOrganizationNacCertificatesImport(self, organizationId: str, contents: str, **kwargs): + """ + **Import certificate for this organization or validate without persisting** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-certificates-import + + - organizationId (string): Organization ID + - contents (string): Certificate content in valid PEM format + - dryRun (boolean): If true, validates the certificate without persisting it + - profile (object): Profile object containing certificate config fields + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "certificates", "import"], + "operation": "createOrganizationNacCertificatesImport", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/import" + + body_params = [ + "contents", + "dryRun", + "profile", + ] + 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"createOrganizationNacCertificatesImport: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationNacCertificatesOverview(self, organizationId: str): + """ + **Get counts of Enabled, Disabled, Expired and Last Used certificates for this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-certificates-overview + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["nac", "configure", "certificates", "overview"], + "operation": "getOrganizationNacCertificatesOverview", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/overview" + + return self._session.get(metadata, resource) + + def updateOrganizationNacCertificate(self, organizationId: str, certificateId: str, profile: dict, **kwargs): + """ + **Update certificate configuration by certificateId for this organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-nac-certificate + + - organizationId (string): Organization ID + - certificateId (string): Certificate ID + - profile (object): Profile object containing certificate config fields + """ + + kwargs = locals() + + metadata = { + "tags": ["nac", "configure", "certificates"], + "operation": "updateOrganizationNacCertificate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + certificateId = urllib.parse.quote(str(certificateId), safe="") + resource = f"/organizations/{organizationId}/nac/certificates/{certificateId}" + + body_params = [ + "profile", + ] + 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"updateOrganizationNacCertificate: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getOrganizationNacClients(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get all known clients for the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-clients + + - 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 + - sortOrder (string): Query parameter for specifying the direction of sorting to use for the given sortKey. + - sortKey (string): Query parameter to sort the clients by the value of the specified key. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - search (string): Optional parameter to fuzzy search on clients. + - clientIds (array): List of ids for specific client retrieval + - groupIds (array): List of group ids for client retrieval by group + - lastNetworkName (array): List of network names for client retrieval by last login network name + - ssid (array): List of SSID's to filter + - classification (object): Classification filters for client retrieval + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ASC", "DESC"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + if "sortKey" in kwargs: + options = ["mac"] + assert kwargs["sortKey"] in options, ( + f'''"sortKey" cannot be "{kwargs["sortKey"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["nac", "configure", "clients"], + "operation": "getOrganizationNacClients", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients" + + query_params = [ + "sortOrder", + "sortKey", + "perPage", + "startingAfter", + "endingBefore", + "search", + "clientIds", + "groupIds", + "lastNetworkName", + "ssid", + "classification", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "clientIds", + "groupIds", + "lastNetworkName", + "ssid", + ] + 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"getOrganizationNacClients: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationNacClient(self, organizationId: str, mac: str, **kwargs): + """ + **Create a client for the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-client + + - organizationId (string): Organization ID + - mac (string): The MAC address of the client + - type (string): Type describes if the network client belongs to an individual user or corporate + - owner (string): The username of the owner of the client + - description (string): User provided description for the client + - uuid (string): Universally unique identifier of the client + - userDetails (array): List of users of this network client + - oui (object): Organizationally unique identifier assigned to a vendor of the client + - groups (array): List of group members associated with the client + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = ["BYOD", "corporate"] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["nac", "configure", "clients"], + "operation": "createOrganizationNacClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients" + + body_params = [ + "type", + "owner", + "mac", + "description", + "uuid", + "userDetails", + "oui", + "groups", + ] + 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"createOrganizationNacClient: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def bulkOrganizationNacClientsDelete(self, organizationId: str, clientIds: list, **kwargs): + """ + **Delete existing client(s) for the organization** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-nac-clients-delete + + - organizationId (string): Organization ID + - clientIds (array): List of ids for specific client retrieval + """ + + kwargs = locals() + + metadata = { + "tags": ["nac", "configure", "clients"], + "operation": "bulkOrganizationNacClientsDelete", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/bulkDelete" + + body_params = [ + "clientIds", + ] + 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"bulkOrganizationNacClientsDelete: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def createOrganizationNacClientsBulkEdit(self, organizationId: str, clientIds: list, **kwargs): + """ + **Bulk Update of existing clients for the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-clients-bulk-edit + + - organizationId (string): Organization ID + - clientIds (array): List of clients ids to apply the bulk edit operation on. + - description (string): User provided description to be applied on the list of clients provided + - groups (object): Client group information to be applied on the list of clients provided + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "clients", "bulkEdit"], + "operation": "createOrganizationNacClientsBulkEdit", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/bulkEdit" + + body_params = [ + "clientIds", + "description", + "groups", + ] + 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"createOrganizationNacClientsBulkEdit: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def createOrganizationNacClientsBulkUpload( + self, organizationId: str, contents: str, updateClients: bool, createClientGroups: bool, **kwargs + ): + """ + **Bulk upload of clients, client groups and their associations for the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-clients-bulk-upload + + - organizationId (string): Organization ID + - contents (string): CSV file content in Base64 encoded string format + - updateClients (boolean): The updateClients indicates whether existing clients must be updated with new data from the CSV + - createClientGroups (boolean): The createClientGroups indicates whether new client groups must be created or not + """ + + kwargs = locals() + + metadata = { + "tags": ["nac", "configure", "clients", "bulkUpload"], + "operation": "createOrganizationNacClientsBulkUpload", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/bulkUpload" + + body_params = [ + "contents", + "updateClients", + "createClientGroups", + ] + 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"createOrganizationNacClientsBulkUpload: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationNacClientsGroups(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get all known client groups for the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-clients-groups + + - 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 + - sortOrder (string): Query parameter for specifying the direction of sorting to use for the given sortKey. + - sortKey (string): Query parameter to sort the client groups by the value of the specified key. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - search (string): Optional parameter to fuzzy search on client groups. + - groupIds (array): List of ids for specific group retrieval + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ASC", "DESC"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + if "sortKey" in kwargs: + options = ["name"] + assert kwargs["sortKey"] in options, ( + f'''"sortKey" cannot be "{kwargs["sortKey"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["nac", "configure", "clients", "groups"], + "operation": "getOrganizationNacClientsGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/groups" + + query_params = [ + "sortOrder", + "sortKey", + "perPage", + "startingAfter", + "endingBefore", + "search", + "groupIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "groupIds", + ] + 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"getOrganizationNacClientsGroups: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationNacClientsGroup(self, organizationId: str, name: str, **kwargs): + """ + **Create a client group for the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-nac-clients-group + + - organizationId (string): Organization ID + - name (string): The name of the group for access control model + - description (string): User provided description of the group + - members (array): List of client members associated with the group + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "clients", "groups"], + "operation": "createOrganizationNacClientsGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/groups" + + body_params = [ + "name", + "description", + "members", + ] + 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"createOrganizationNacClientsGroup: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateOrganizationNacClientsGroup(self, organizationId: str, groupId: str, **kwargs): + """ + **Update an existing client group for the organization with bulk member operations** + https://developer.cisco.com/meraki/api-v1/#!update-organization-nac-clients-group + + - organizationId (string): Organization ID + - groupId (string): Group ID + - name (string): The name of the group for access control model + - description (string): User provided description of the group + - members (object): Bulk member operations with addList/removeList arrays + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "clients", "groups"], + "operation": "updateOrganizationNacClientsGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + groupId = urllib.parse.quote(str(groupId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/groups/{groupId}" + + body_params = [ + "name", + "description", + "members", + ] + 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"updateOrganizationNacClientsGroup: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationNacClientsGroup(self, organizationId: str, groupId: str): + """ + **Delete an existing client group for the organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-nac-clients-group + + - organizationId (string): Organization ID + - groupId (string): Group ID + """ + + metadata = { + "tags": ["nac", "configure", "clients", "groups"], + "operation": "deleteOrganizationNacClientsGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + groupId = urllib.parse.quote(str(groupId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/groups/{groupId}" + + return self._session.delete(metadata, resource) + + def getOrganizationNacClientsOverview(self, organizationId: str): + """ + **Get overview data for all known clients for the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-clients-overview + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["nac", "configure", "clients", "overview"], + "operation": "getOrganizationNacClientsOverview", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/overview" + + return self._session.get(metadata, resource) + + def updateOrganizationNacClient(self, organizationId: str, clientId: str, mac: str, **kwargs): + """ + **Update an existing client for the organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-nac-client + + - organizationId (string): Organization ID + - clientId (string): Client ID + - mac (string): The MAC address of the client + - type (string): Type describes if the network client belongs to an individual user or corporate + - owner (string): The username of the owner of the client + - description (string): User provided description for the client + - uuid (string): Universally unique identifier of the client + - userDetails (array): List of users of this network client + - oui (object): Organizationally unique identifier assigned to a vendor of the client + - groups (object): Client group membership changes + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = ["BYOD", "corporate"] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["nac", "configure", "clients"], + "operation": "updateOrganizationNacClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + clientId = urllib.parse.quote(str(clientId), safe="") + resource = f"/organizations/{organizationId}/nac/clients/{clientId}" + + body_params = [ + "type", + "owner", + "mac", + "description", + "uuid", + "userDetails", + "oui", + "groups", + ] + 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"updateOrganizationNacClient: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getOrganizationNacDictionaries(self, organizationId: str): + """ + **Get all NAC dictionaries** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-dictionaries + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["nac", "configure", "dictionaries"], + "operation": "getOrganizationNacDictionaries", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/dictionaries" + + return self._session.get(metadata, resource) + + def getOrganizationNacDictionaryAttributes(self, organizationId: str, dictionaryId: str, **kwargs): + """ + **Get all attributes by dictionary ID** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-dictionary-attributes + + - organizationId (string): Organization ID + - dictionaryId (string): Dictionary ID + - networkIds (array): An optional list of network IDs to filter the 'enum' field. Only enum values applicable to the specified networks will be returned. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "dictionaries", "attributes"], + "operation": "getOrganizationNacDictionaryAttributes", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + dictionaryId = urllib.parse.quote(str(dictionaryId), safe="") + resource = f"/organizations/{organizationId}/nac/dictionaries/{dictionaryId}/attributes" + + query_params = [ + "networkIds", + ] + 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"getOrganizationNacDictionaryAttributes: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationNacDictionaryAttributeValues( + self, organizationId: str, dictionaryId: str, attributeName: str, **kwargs + ): + """ + **Search allowed values for a dictionary attribute** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-dictionary-attribute-values + + - organizationId (string): Organization ID + - dictionaryId (string): Dictionary ID + - attributeName (string): Attribute name + - search (string): Optional search string for contains-match filtering of allowed values + - networkIds (array): An optional list of network IDs to filter the allowed values. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "dictionaries", "attributes", "values"], + "operation": "getOrganizationNacDictionaryAttributeValues", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + dictionaryId = urllib.parse.quote(str(dictionaryId), safe="") + attributeName = urllib.parse.quote(str(attributeName), safe="") + resource = f"/organizations/{organizationId}/nac/dictionaries/{dictionaryId}/attributes/{attributeName}/values" + + query_params = [ + "search", + "networkIds", + ] + 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"getOrganizationNacDictionaryAttributeValues: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationNacLicenseUsage(self, organizationId: str, startDate: str, **kwargs): + """ + **Returns license usage data for a specific organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-license-usage + + - organizationId (string): Organization ID + - startDate (string): Start date for the usage data in UTC timezone + - endDate (string): End date for the usage data in UTC timezone + - networkIds (array): List of locale and node group ids + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["nac", "configure", "license", "usage"], + "operation": "getOrganizationNacLicenseUsage", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/license/usage" + + query_params = [ + "startDate", + "endDate", + "networkIds", + ] + 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"getOrganizationNacLicenseUsage: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getOrganizationNacSessionsHistory(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the NAC Sessions for this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-sessions-history + + - 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 + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 31 days. The default is 1 hour. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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": ["nac", "configure", "sessions", "history"], + "operation": "getOrganizationNacSessionsHistory", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/nac/sessions/history" + + query_params = [ + "t0", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationNacSessionsHistory: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationNacSessionDetails(self, organizationId: str, sessionId: str): + """ + **Return the details of selected NAC Sessions** + https://developer.cisco.com/meraki/api-v1/#!get-organization-nac-session-details + + - organizationId (string): Organization ID + - sessionId (string): Session ID + """ + + metadata = { + "tags": ["nac", "configure", "sessions", "details"], + "operation": "getOrganizationNacSessionDetails", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + sessionId = urllib.parse.quote(str(sessionId), safe="") + resource = f"/organizations/{organizationId}/nac/sessions/{sessionId}/details" + + return self._session.get(metadata, resource) diff --git a/meraki/api/networks.py b/meraki/api/networks.py index eb8ae8e..7310750 100644 --- a/meraki/api/networks.py +++ b/meraki/api/networks.py @@ -855,6 +855,23 @@ def vmxNetworkDevicesClaim(self, networkId: str, size: str, **kwargs): return self._session.post(metadata, resource, payload) + def getNetworkDevicesJson(self, networkId: str): + """ + **Extraction of the legacy nodes JSON endpoint for a network** + https://developer.cisco.com/meraki/api-v1/#!get-network-devices-json + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["networks", "configure", "devices", "json"], + "operation": "getNetworkDevicesJson", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/devices/json" + + return self._session.get(metadata, resource) + def removeNetworkDevices(self, networkId: str, serial: str, **kwargs): """ **Remove a single device** @@ -886,6 +903,37 @@ def removeNetworkDevices(self, networkId: str, serial: str, **kwargs): return self._session.post(metadata, resource, payload) + def updateNetworkDevicesSyslogServers(self, networkId: str, servers: list, **kwargs): + """ + **Updates the syslog servers configuration for a network.** + https://developer.cisco.com/meraki/api-v1/#!update-network-devices-syslog-servers + + - networkId (string): Network ID + - servers (array): A list of the syslog servers for this network; suggested maximum array size is 10 + """ + + kwargs = locals() + + metadata = { + "tags": ["networks", "configure", "devices", "syslog", "servers"], + "operation": "updateNetworkDevicesSyslogServers", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/devices/syslog/servers" + + body_params = [ + "servers", + ] + 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"updateNetworkDevicesSyslogServers: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkEvents(self, networkId: str, total_pages=1, direction="prev", event_log_end_time=None, **kwargs): """ **List the events for the network** @@ -1455,6 +1503,7 @@ def createNetworkFloorPlan(self, networkId: str, name: str, imageContents: str, - topLeftCorner (object): The longitude and latitude of the top left corner of your floor plan. - topRightCorner (object): The longitude and latitude of the top right corner of your floor plan. - floorNumber (number): The floor number of the floors within the building + - buildingId (string): The ID of the building that this floor belongs to. """ kwargs.update(locals()) @@ -1474,6 +1523,7 @@ def createNetworkFloorPlan(self, networkId: str, name: str, imageContents: str, "topLeftCorner", "topRightCorner", "floorNumber", + "buildingId", "imageContents", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1670,6 +1720,7 @@ def updateNetworkFloorPlan(self, networkId: str, floorPlanId: str, **kwargs): - topLeftCorner (object): The longitude and latitude of the top left corner of your floor plan. - topRightCorner (object): The longitude and latitude of the top right corner of your floor plan. - floorNumber (number): The floor number of the floors within the building + - buildingId (string): The ID of the building that this floor belongs to. - imageContents (string): The file contents (a base 64 encoded string) of your new image. Supported formats are PNG, GIF, and JPG. Note that all images are saved as PNG files, regardless of the format they are uploaded in. If you upload a new image, and you do NOT specify any new geolocation fields ('center, 'topLeftCorner', etc), the floor plan will be recentered with no rotation in order to maintain the aspect ratio of your new image. """ @@ -1691,6 +1742,7 @@ def updateNetworkFloorPlan(self, networkId: str, floorPlanId: str, **kwargs): "topLeftCorner", "topRightCorner", "floorNumber", + "buildingId", "imageContents", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1918,6 +1970,106 @@ def getNetworkHealthAlerts(self, networkId: str): return self._session.get(metadata, resource) + def getNetworkLocationScanning(self, networkId: str): + """ + **Return scanning API settings** + https://developer.cisco.com/meraki/api-v1/#!get-network-location-scanning + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["networks", "configure", "locationScanning"], + "operation": "getNetworkLocationScanning", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/locationScanning" + + return self._session.get(metadata, resource) + + def updateNetworkLocationScanning(self, networkId: str, **kwargs): + """ + **Change scanning API settings** + https://developer.cisco.com/meraki/api-v1/#!update-network-location-scanning + + - networkId (string): Network ID + - analyticsEnabled (boolean): Collect location and scanning analytics + - scanningApiEnabled (boolean): Enable push API for scanning events, analytics must be enabled + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["networks", "configure", "locationScanning"], + "operation": "updateNetworkLocationScanning", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/locationScanning" + + body_params = [ + "analyticsEnabled", + "scanningApiEnabled", + ] + 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"updateNetworkLocationScanning: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getNetworkLocationScanningHttpServers(self, networkId: str): + """ + **Return list of scanning API receivers** + https://developer.cisco.com/meraki/api-v1/#!get-network-location-scanning-http-servers + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["networks", "configure", "locationScanning", "httpServers"], + "operation": "getNetworkLocationScanningHttpServers", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/locationScanning/httpServers" + + return self._session.get(metadata, resource) + + def updateNetworkLocationScanningHttpServers(self, networkId: str, endpoints: list, **kwargs): + """ + **Set the list of scanning API receivers** + https://developer.cisco.com/meraki/api-v1/#!update-network-location-scanning-http-servers + + - networkId (string): Network ID + - endpoints (array): A set of http server configurations + """ + + kwargs = locals() + + metadata = { + "tags": ["networks", "configure", "locationScanning", "httpServers"], + "operation": "updateNetworkLocationScanningHttpServers", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/locationScanning/httpServers" + + body_params = [ + "endpoints", + ] + 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"updateNetworkLocationScanningHttpServers: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + def getNetworkMerakiAuthUsers(self, networkId: str): """ **List the authorized users configured under Meraki Authentication for a network (splash guest or RADIUS users for a wireless network, or client VPN users for a MX network)** @@ -2075,14 +2227,17 @@ def updateNetworkMerakiAuthUser(self, networkId: str, merakiAuthUserId: str, **k return self._session.put(metadata, resource, payload) - def getNetworkMqttBrokers(self, networkId: str): + def getNetworkMqttBrokers(self, networkId: str, **kwargs): """ **List the MQTT brokers for this network** https://developer.cisco.com/meraki/api-v1/#!get-network-mqtt-brokers - networkId (string): Network ID + - productTypes (array): Optional parameter to filter MQTT brokers by product type. If multiple types are provided, the query will return brokers that match any of the provided types. """ + kwargs.update(locals()) + metadata = { "tags": ["networks", "configure", "mqttBrokers"], "operation": "getNetworkMqttBrokers", @@ -2090,7 +2245,26 @@ def getNetworkMqttBrokers(self, networkId: str): networkId = urllib.parse.quote(str(networkId), safe="") resource = f"/networks/{networkId}/mqttBrokers" - return self._session.get(metadata, resource) + query_params = [ + "productTypes", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "productTypes", + ] + 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"getNetworkMqttBrokers: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) def createNetworkMqttBroker(self, networkId: str, name: str, host: str, port: int, **kwargs): """ @@ -2103,10 +2277,17 @@ def createNetworkMqttBroker(self, networkId: str, name: str, host: str, port: in - port (integer): Host port though which the MQTT broker can be reached. - security (object): Security settings of the MQTT broker. - authentication (object): Authentication settings of the MQTT broker + - productType (string): The product type for which the MQTT broker is being created. """ kwargs.update(locals()) + if "productType" in kwargs: + options = ["camera", "wireless"] + assert kwargs["productType"] in options, ( + f'''"productType" cannot be "{kwargs["productType"]}", & must be set to one of: {options}''' + ) + metadata = { "tags": ["networks", "configure", "mqttBrokers"], "operation": "createNetworkMqttBroker", @@ -2120,6 +2301,7 @@ def createNetworkMqttBroker(self, networkId: str, name: str, host: str, port: in "port", "security", "authentication", + "productType", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2606,6 +2788,7 @@ def updateNetworkSettings(self, networkId: str, **kwargs): - remoteStatusPageEnabled (boolean): Enables / disables access to the device status page (http://[device's LAN IP]). Optional. Can only be set if localStatusPageEnabled is set to true - localStatusPage (object): A hash of Local Status page(s)' authentication options applied to the Network. - securePort (object): A hash of SecureConnect options applied to the Network. + - fips (object): A hash of FIPS options applied to the Network - namedVlans (object): A hash of Named VLANs options applied to the Network. """ @@ -2623,6 +2806,7 @@ def updateNetworkSettings(self, networkId: str, **kwargs): "remoteStatusPageEnabled", "localStatusPage", "securePort", + "fips", "namedVlans", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2635,6 +2819,93 @@ def updateNetworkSettings(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) + def createNetworkSitesBuilding(self, networkId: str, name: str, **kwargs): + """ + **Create a new building** + https://developer.cisco.com/meraki/api-v1/#!create-network-sites-building + + - networkId (string): Network ID + - name (string): The name of the building + - floors (array): The floors of the building + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["networks", "configure", "sites", "buildings"], + "operation": "createNetworkSitesBuilding", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sites/buildings" + + body_params = [ + "name", + "floors", + ] + 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"createNetworkSitesBuilding: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def deleteNetworkSitesBuilding(self, networkId: str, buildingId: str): + """ + **Delete a building** + https://developer.cisco.com/meraki/api-v1/#!delete-network-sites-building + + - networkId (string): Network ID + - buildingId (string): Building ID + """ + + metadata = { + "tags": ["networks", "configure", "sites", "buildings"], + "operation": "deleteNetworkSitesBuilding", + } + networkId = urllib.parse.quote(str(networkId), safe="") + buildingId = urllib.parse.quote(str(buildingId), safe="") + resource = f"/networks/{networkId}/sites/buildings/{buildingId}" + + return self._session.delete(metadata, resource) + + def updateNetworkSitesBuilding(self, networkId: str, buildingId: str, **kwargs): + """ + **Update a building** + https://developer.cisco.com/meraki/api-v1/#!update-network-sites-building + + - networkId (string): Network ID + - buildingId (string): Building ID + - name (string): The name of the building + - floors (array): The floors of the building + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["networks", "configure", "sites", "buildings"], + "operation": "updateNetworkSitesBuilding", + } + networkId = urllib.parse.quote(str(networkId), safe="") + buildingId = urllib.parse.quote(str(buildingId), safe="") + resource = f"/networks/{networkId}/sites/buildings/{buildingId}" + + body_params = [ + "name", + "floors", + ] + 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"updateNetworkSitesBuilding: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkSnmp(self, networkId: str): """ **Return the SNMP settings for a network** @@ -2661,6 +2932,8 @@ def updateNetworkSnmp(self, networkId: str, **kwargs): - access (string): The type of SNMP access. Can be one of 'none' (disabled), 'community' (V1/V2c), or 'users' (V3). - communityString (string): The SNMP community string. Only relevant if 'access' is set to 'community'. - users (array): The list of SNMP users. Only relevant if 'access' is set to 'users'. + - authentication (object): SNMPv3 authentication settings. Only relevant if 'access' is set to 'users'. + - privacy (object): SNMPv3 privacy settings. Only relevant if 'access' is set to 'users'. """ kwargs.update(locals()) @@ -2682,6 +2955,8 @@ def updateNetworkSnmp(self, networkId: str, **kwargs): "access", "communityString", "users", + "authentication", + "privacy", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2693,6 +2968,47 @@ def updateNetworkSnmp(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) + def updateNetworkSnmpTraps(self, networkId: str, **kwargs): + """ + **Update the SNMP trap configuration for the specified network** + https://developer.cisco.com/meraki/api-v1/#!update-network-snmp-traps + + - networkId (string): Network ID + - mode (string): SNMP trap protocol version + - receiver (object): Stores the port and address + - v2 (object): V2 mode + - v3 (object): V3 mode + """ + + kwargs.update(locals()) + + if "mode" in kwargs: + options = ["disabled", "v1/v2c", "v3"] + assert kwargs["mode"] in options, f'''"mode" cannot be "{kwargs["mode"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["networks", "configure", "snmp", "traps"], + "operation": "updateNetworkSnmpTraps", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/snmp/traps" + + body_params = [ + "mode", + "receiver", + "v2", + "v3", + ] + 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"updateNetworkSnmpTraps: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkSplashLoginAttempts(self, networkId: str, **kwargs): """ **List the splash login attempts for a network** @@ -3005,9 +3321,10 @@ 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. """ - kwargs = locals() + kwargs.update(locals()) metadata = { "tags": ["networks", "configure", "vlanProfiles"], @@ -3018,6 +3335,7 @@ def createNetworkVlanProfile(self, networkId: str, name: str, vlanNames: list, v body_params = [ "name", + "allowedVlans", "vlanNames", "vlanGroups", "iname", @@ -3153,9 +3471,10 @@ 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. """ - kwargs = locals() + kwargs.update(locals()) metadata = { "tags": ["networks", "configure", "vlanProfiles"], @@ -3167,6 +3486,7 @@ def updateNetworkVlanProfile(self, networkId: str, iname: str, name: str, vlanNa body_params = [ "name", + "allowedVlans", "vlanNames", "vlanGroups", ] diff --git a/meraki/api/organizations.py b/meraki/api/organizations.py index ae425f8..080ddf3 100644 --- a/meraki/api/organizations.py +++ b/meraki/api/organizations.py @@ -1081,6 +1081,314 @@ def deleteOrganizationAlertsProfile(self, organizationId: str, alertConfigId: st return self._session.delete(metadata, resource) + def getOrganizationApiPushProfiles(self, organizationId: str, **kwargs): + """ + **List the push profiles in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-push-profiles + + - organizationId (string): Organization ID + - inames (array): Optional parameter to filter the result set by the included set of push profile inames + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "api", "push", "profiles"], + "operation": "getOrganizationApiPushProfiles", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/api/push/profiles" + + query_params = [ + "inames", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "inames", + ] + 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"getOrganizationApiPushProfiles: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def createOrganizationApiPushProfile(self, organizationId: str, iname: str, topic: dict, receiver: dict, **kwargs): + """ + **Create a new push profile** + https://developer.cisco.com/meraki/api-v1/#!create-organization-api-push-profile + + - organizationId (string): Organization ID + - iname (string): Immutable name of the resource. Must be unique within resources of this type. + - topic (object): Push topic + - receiver (object): Push receiver profile + - name (string): Name of push profile + - description (string): Description of push profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "api", "push", "profiles"], + "operation": "createOrganizationApiPushProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/api/push/profiles" + + body_params = [ + "iname", + "name", + "description", + "topic", + "receiver", + ] + 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"createOrganizationApiPushProfile: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateOrganizationApiPushProfile(self, organizationId: str, iname: str, **kwargs): + """ + **Update a push profile** + https://developer.cisco.com/meraki/api-v1/#!update-organization-api-push-profile + + - organizationId (string): Organization ID + - iname (string): Iname + - name (string): Name of push profile + - description (string): Description of push profile + - topic (object): Push topic + - receiver (object): Push receiver profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "api", "push", "profiles"], + "operation": "updateOrganizationApiPushProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + iname = urllib.parse.quote(str(iname), safe="") + resource = f"/organizations/{organizationId}/api/push/profiles/{iname}" + + body_params = [ + "name", + "description", + "topic", + "receiver", + ] + 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"updateOrganizationApiPushProfile: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationApiPushProfile(self, organizationId: str, iname: str): + """ + **Delete a push profile** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-api-push-profile + + - organizationId (string): Organization ID + - iname (string): Iname + """ + + metadata = { + "tags": ["organizations", "configure", "api", "push", "profiles"], + "operation": "deleteOrganizationApiPushProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + iname = urllib.parse.quote(str(iname), safe="") + resource = f"/organizations/{organizationId}/api/push/profiles/{iname}" + + return self._session.delete(metadata, resource) + + def getOrganizationApiPushReceiversProfiles(self, organizationId: str): + """ + **List the push receiver profiles in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-push-receivers-profiles + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "api", "push", "receivers", "profiles"], + "operation": "getOrganizationApiPushReceiversProfiles", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/api/push/receivers/profiles" + + return self._session.get(metadata, resource) + + def createOrganizationApiPushReceiversProfile(self, organizationId: str, iname: str, receiver: dict, **kwargs): + """ + **Create a new push receiver profile** + https://developer.cisco.com/meraki/api-v1/#!create-organization-api-push-receivers-profile + + - organizationId (string): Organization ID + - iname (string): Immutable name of the resource. Must be unique within resources of this type. + - receiver (object): Webhook receiver + - name (string): Name of receiver profile + - description (string): Description of receiver profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "api", "push", "receivers", "profiles"], + "operation": "createOrganizationApiPushReceiversProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/api/push/receivers/profiles" + + body_params = [ + "iname", + "name", + "description", + "receiver", + ] + 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"createOrganizationApiPushReceiversProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def deleteOrganizationApiPushReceiversProfile(self, organizationId: str, iname: str): + """ + **Delete a push receiver profile** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-api-push-receivers-profile + + - organizationId (string): Organization ID + - iname (string): Iname + """ + + metadata = { + "tags": ["organizations", "configure", "api", "push", "receivers", "profiles"], + "operation": "deleteOrganizationApiPushReceiversProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + iname = urllib.parse.quote(str(iname), safe="") + resource = f"/organizations/{organizationId}/api/push/receivers/profiles/{iname}" + + return self._session.delete(metadata, resource) + + def updateOrganizationApiPushReceiversProfile(self, organizationId: str, iname: str, **kwargs): + """ + **Update a push receiver profile** + https://developer.cisco.com/meraki/api-v1/#!update-organization-api-push-receivers-profile + + - organizationId (string): Organization ID + - iname (string): Iname + - name (string): Name of the receiver profile + - description (string): Description of the receiver profile + - receiver (object): API Push Receiver details + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "api", "push", "receivers", "profiles"], + "operation": "updateOrganizationApiPushReceiversProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + iname = urllib.parse.quote(str(iname), safe="") + resource = f"/organizations/{organizationId}/api/push/receivers/profiles/{iname}" + + body_params = [ + "name", + "description", + "receiver", + ] + 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"updateOrganizationApiPushReceiversProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def getOrganizationApiPushTopics(self, organizationId: str): + """ + **List of push topics** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-push-topics + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "api", "push", "topics"], + "operation": "getOrganizationApiPushTopics", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/api/push/topics" + + return self._session.get(metadata, resource) + + def getOrganizationApiRestProvisioningPipelines(self, organizationId: str, **kwargs): + """ + **List pipeline IDs for the organization, with optional status and timespan filtering** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-rest-provisioning-pipelines + + - organizationId (string): Organization ID + - status (string): If provided, filters pipelines by status. If omitted, pipelines of all statuses are returned. + - timespan (integer): Created-at lookback for matching pipelines, in seconds. Defaults to 7200 seconds. The maximum is 30 days. + """ + + kwargs.update(locals()) + + if "status" in kwargs: + options = ["active", "error", "pending", "success"] + assert kwargs["status"] in options, ( + f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "api", "rest", "provisioning", "pipelines"], + "operation": "getOrganizationApiRestProvisioningPipelines", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/api/rest/provisioning/pipelines" + + query_params = [ + "status", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationApiRestProvisioningPipelines: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + def getOrganizationApiRestProvisioningPipelinesJobs(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **List pipeline jobs, with optional status filtering** @@ -1367,67 +1675,215 @@ def getOrganizationApiRequestsOverviewResponseCodesByInterval(self, organization return self._session.get(metadata, resource, params) - def getOrganizationAssuranceAlerts(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationApiRequestsResponseCodesHistoryByAdmin(self, organizationId: str, **kwargs): """ - **Return all health alerts for an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-alerts + **Lists API request response codes and their counts aggregated by admin** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-requests-response-codes-history-by-admin - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 4 - 300. Default is 30. - - 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. - - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'ascending'. - - networkId (string): Optional parameter to filter alerts by network ids. - - severity (string): Optional parameter to filter by severity type. - - types (array): Optional parameter to filter by alert type. - - tsStart (string): Optional parameter to filter by starting timestamp - - tsEnd (string): Optional parameter to filter by end timestamp - - category (string): Optional parameter to filter by category. - - sortBy (string): Optional parameter to set column to sort by. - - serials (array): Optional parameter to filter by primary device serial - - deviceTypes (array): Optional parameter to filter by device types - - deviceTags (array): Optional parameter to filter by device tags - - active (boolean): Optional parameter to filter by active alerts defaults to true - - dismissed (boolean): Optional parameter to filter by dismissed alerts defaults to false - - resolved (boolean): Optional parameter to filter by resolved alerts defaults to false - - suppressAlertsForOfflineNodes (boolean): When set to true the api will only return connectivity alerts for a given device if that device is in an offline state. This only applies to devices. This is ignored when resolved is true. Example: If a Switch has a VLan Mismatch and is Unreachable. only the Unreachable alert will be returned. Defaults to false. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. """ kwargs.update(locals()) - if "sortOrder" in kwargs: - options = ["ascending", "descending"] - assert kwargs["sortOrder"] in options, ( - f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' - ) - if "category" in kwargs: - options = ["configuration", "connectivity", "device_health", "experience_metrics", "insights"] - assert kwargs["category"] in options, ( - f'''"category" cannot be "{kwargs["category"]}", & must be set to one of: {options}''' - ) - if "sortBy" in kwargs: - options = ["category", "dismissedAt", "resolvedAt", "severity", "startedAt"] - assert kwargs["sortBy"] in options, ( - f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["organizations", "monitor", "alerts"], - "operation": "getOrganizationAssuranceAlerts", + "tags": ["organizations", "monitor", "apiRequests", "responseCodes", "history", "byAdmin"], + "operation": "getOrganizationApiRequestsResponseCodesHistoryByAdmin", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/alerts" + resource = f"/organizations/{organizationId}/apiRequests/responseCodes/history/byAdmin" query_params = [ - "perPage", - "startingAfter", - "endingBefore", - "sortOrder", - "networkId", - "severity", - "types", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationApiRequestsResponseCodesHistoryByAdmin: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApiRequestsResponseCodesHistoryByApplication(self, organizationId: str, **kwargs): + """ + **Lists API request response codes and their counts aggregated by application** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-requests-response-codes-history-by-application + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "apiRequests", "responseCodes", "history", "byApplication"], + "operation": "getOrganizationApiRequestsResponseCodesHistoryByApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/apiRequests/responseCodes/history/byApplication" + + query_params = [ + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationApiRequestsResponseCodesHistoryByApplication: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApiRequestsResponseCodesHistoryByOperation(self, organizationId: str, **kwargs): + """ + **Aggregates API usage data by operationId** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-requests-response-codes-history-by-operation + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "apiRequests", "responseCodes", "history", "byOperation"], + "operation": "getOrganizationApiRequestsResponseCodesHistoryByOperation", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/apiRequests/responseCodes/history/byOperation" + + query_params = [ + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationApiRequestsResponseCodesHistoryByOperation: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationApiRequestsResponseCodesHistoryBySourceIp(self, organizationId: str, **kwargs): + """ + **Aggregates API usage by source ip** + https://developer.cisco.com/meraki/api-v1/#!get-organization-api-requests-response-codes-history-by-source-ip + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "apiRequests", "responseCodes", "history", "bySourceIp"], + "operation": "getOrganizationApiRequestsResponseCodesHistoryBySourceIp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/apiRequests/responseCodes/history/bySourceIp" + + query_params = [ + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationApiRequestsResponseCodesHistoryBySourceIp: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationAssuranceAlerts(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return all health alerts for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-alerts + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 4 - 300. Default is 30. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'ascending'. + - networkId (string): Optional parameter to filter alerts by network ids. + - severity (string): Optional parameter to filter by severity type. + - types (array): Optional parameter to filter by alert type. + - tsStart (string): Optional parameter to filter by starting timestamp + - tsEnd (string): Optional parameter to filter by end timestamp + - category (string): Optional parameter to filter by category. + - sortBy (string): Optional parameter to set column to sort by. + - serials (array): Optional parameter to filter by primary device serial + - deviceTypes (array): Optional parameter to filter by device types + - deviceTags (array): Optional parameter to filter by device tags + - active (boolean): Optional parameter to filter by active alerts defaults to true + - dismissed (boolean): Optional parameter to filter by dismissed alerts defaults to false + - resolved (boolean): Optional parameter to filter by resolved alerts defaults to false + - suppressAlertsForOfflineNodes (boolean): When set to true the api will only return connectivity alerts for a given device if that device is in an offline state. This only applies to devices. This is ignored when resolved is true. Example: If a Switch has a VLan Mismatch and is Unreachable. only the Unreachable alert will be returned. Defaults to false. + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + if "category" in kwargs: + options = ["configuration", "connectivity", "device_health", "experience_metrics", "insights"] + assert kwargs["category"] in options, ( + f'''"category" cannot be "{kwargs["category"]}", & must be set to one of: {options}''' + ) + if "sortBy" in kwargs: + options = ["category", "dismissedAt", "resolvedAt", "severity", "startedAt"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "monitor", "alerts"], + "operation": "getOrganizationAssuranceAlerts", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/alerts" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + "networkId", + "severity", + "types", "tsStart", "tsEnd", "category", @@ -1906,546 +2362,653 @@ def getOrganizationAssuranceAlert(self, organizationId: str, id: str): return self._session.get(metadata, resource) - def getOrganizationBrandingPolicies(self, organizationId: str): + def getOrganizationAssuranceClientsConnectedCountHistory(self, organizationId: str, networkId: str, **kwargs): """ - **List the branding policies of an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-branding-policies + **Return combined wireless and wired connected client counts over time for a network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-clients-connected-count-history - organizationId (string): Organization ID + - networkId (string): Network ID to query. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 8 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600. The default is 600. Interval is calculated if time params are provided. """ + kwargs.update(locals()) + metadata = { - "tags": ["organizations", "configure", "brandingPolicies"], - "operation": "getOrganizationBrandingPolicies", + "tags": ["organizations", "monitor", "clients", "connectedCountHistory"], + "operation": "getOrganizationAssuranceClientsConnectedCountHistory", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies" + resource = f"/organizations/{organizationId}/assurance/clients/connectedCountHistory" - return self._session.get(metadata, resource) + query_params = [ + "networkId", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - def createOrganizationBrandingPolicy(self, organizationId: str, name: str, **kwargs): + if self._session._validate_kwargs: + all_params = query_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"getOrganizationAssuranceClientsConnectedCountHistory: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationAssuranceClientsEvents(self, organizationId: str, clientId: str, networkId: str, **kwargs): """ - **Add a new branding policy to an organization** - https://developer.cisco.com/meraki/api-v1/#!create-organization-branding-policy + **Given a client, get all alerts and events for a given timespan** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-clients-events - - organizationId (string): Organization ID - - name (string): Name of the Dashboard branding policy. - - enabled (boolean): Boolean indicating whether this policy is enabled. - - adminSettings (object): Settings for describing which kinds of admins this policy applies to. - - helpSettings (object): Settings for describing the modifications to various Help page features. Each property in this object accepts one of - 'default or inherit' (do not modify functionality), 'hide' (remove the section from Dashboard), or 'show' (always show - the section on Dashboard). Some properties in this object also accept custom HTML used to replace the section on - Dashboard; see the documentation for each property to see the allowed values. - Each property defaults to 'default or inherit' when not provided. - - customLogo (object): Properties describing the custom logo attached to the branding policy. + - organizationId (string): Organization ID + - clientId (string): ID of client to query + - networkId (string): Network ID where client is connected + - filter (array): Optional parameter to filter by issue + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "brandingPolicies"], - "operation": "createOrganizationBrandingPolicy", + "tags": ["organizations", "configure", "clients", "events"], + "operation": "getOrganizationAssuranceClientsEvents", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies" + resource = f"/organizations/{organizationId}/assurance/clients/events" - body_params = [ - "name", - "enabled", - "adminSettings", - "helpSettings", - "customLogo", + query_params = [ + "filter", + "clientId", + "networkId", + "t0", + "t1", + "timespan", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "filter", + ] + 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 = [] + body_params + 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"createOrganizationBrandingPolicy: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceClientsEvents: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def getOrganizationBrandingPoliciesPriorities(self, organizationId: str): + def getOrganizationAssuranceClientsEventsCorrelated( + self, organizationId: str, clientId: str, category: str, networkId: str, timestamp: str, **kwargs + ): """ - **Return the branding policy IDs of an organization in priority order** - https://developer.cisco.com/meraki/api-v1/#!get-organization-branding-policies-priorities + **Given a client, category, and timespan, return events that have a close connection to each other.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-clients-events-correlated - organizationId (string): Organization ID + - clientId (string): Client ID + - category (string): Category of events + - networkId (string): Network used by the client + - timestamp (string): Timestamp for the event + - lookback (integer): Amount of time in minutes to look back + - lookforward (integer): Amount of time in minutes to look forwards """ + kwargs.update(locals()) + + if "category" in kwargs: + options = ["application", "association", "authentication", "dhcp", "dns"] + assert kwargs["category"] in options, ( + f'''"category" cannot be "{kwargs["category"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["organizations", "configure", "brandingPolicies", "priorities"], - "operation": "getOrganizationBrandingPoliciesPriorities", + "tags": ["organizations", "configure", "clients", "events", "correlated"], + "operation": "getOrganizationAssuranceClientsEventsCorrelated", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies/priorities" + resource = f"/organizations/{organizationId}/assurance/clients/events/correlated" - return self._session.get(metadata, resource) + query_params = [ + "clientId", + "category", + "networkId", + "timestamp", + "lookback", + "lookforward", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - def updateOrganizationBrandingPoliciesPriorities(self, organizationId: str, **kwargs): + if self._session._validate_kwargs: + all_params = query_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"getOrganizationAssuranceClientsEventsCorrelated: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationAssuranceClientsTopologyCurrent(self, organizationId: str, clientId: str, networkId: str, **kwargs): """ - **Update the priority ordering of an organization's branding policies.** - https://developer.cisco.com/meraki/api-v1/#!update-organization-branding-policies-priorities + **Given a client, return current topology** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-clients-topology-current - organizationId (string): Organization ID - - brandingPolicyIds (array): An ordered list of branding policy IDs that determines the priority order of how to apply the policies - + - clientId (string): ID of client to query + - networkId (string): Network ID where client is connected """ - kwargs.update(locals()) + kwargs = locals() metadata = { - "tags": ["organizations", "configure", "brandingPolicies", "priorities"], - "operation": "updateOrganizationBrandingPoliciesPriorities", + "tags": ["organizations", "configure", "clients", "topology", "current"], + "operation": "getOrganizationAssuranceClientsTopologyCurrent", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies/priorities" + resource = f"/organizations/{organizationId}/assurance/clients/topology/current" - body_params = [ - "brandingPolicyIds", + query_params = [ + "clientId", + "networkId", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} if self._session._validate_kwargs: - all_params = [] + body_params + all_params = query_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"updateOrganizationBrandingPoliciesPriorities: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceClientsTopologyCurrent: ignoring unrecognized kwargs: {invalid}" ) - return self._session.put(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def getOrganizationBrandingPolicy(self, organizationId: str, brandingPolicyId: str): + def getOrganizationAssuranceClientsTopologyNew(self, organizationId: str, clientIds: list, networkId: str, **kwargs): """ - **Return a branding policy** - https://developer.cisco.com/meraki/api-v1/#!get-organization-branding-policy + **Given a client, return current topology** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-clients-topology-new - organizationId (string): Organization ID - - brandingPolicyId (string): Branding policy ID - """ - - metadata = { - "tags": ["organizations", "configure", "brandingPolicies"], - "operation": "getOrganizationBrandingPolicy", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - brandingPolicyId = urllib.parse.quote(str(brandingPolicyId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies/{brandingPolicyId}" - - return self._session.get(metadata, resource) - - def updateOrganizationBrandingPolicy(self, organizationId: str, brandingPolicyId: str, name: str, **kwargs): - """ - **Update a branding policy** - https://developer.cisco.com/meraki/api-v1/#!update-organization-branding-policy - - - organizationId (string): Organization ID - - brandingPolicyId (string): Branding policy ID - - name (string): Name of the Dashboard branding policy. - - enabled (boolean): Boolean indicating whether this policy is enabled. - - adminSettings (object): Settings for describing which kinds of admins this policy applies to. - - helpSettings (object): Settings for describing the modifications to various Help page features. Each property in this object accepts one of - 'default or inherit' (do not modify functionality), 'hide' (remove the section from Dashboard), or 'show' (always show - the section on Dashboard). Some properties in this object also accept custom HTML used to replace the section on - Dashboard; see the documentation for each property to see the allowed values. - - - customLogo (object): Properties describing the custom logo attached to the branding policy. + - clientIds (array): List of IDs for client retrieval for a given network. Limited to 1 client for now + - networkId (string): Network ID where client is connected + - timestamp (string): Timestamp for client topology path """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "brandingPolicies"], - "operation": "updateOrganizationBrandingPolicy", + "tags": ["organizations", "configure", "clients", "topology", "new"], + "operation": "getOrganizationAssuranceClientsTopologyNew", } organizationId = urllib.parse.quote(str(organizationId), safe="") - brandingPolicyId = urllib.parse.quote(str(brandingPolicyId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies/{brandingPolicyId}" + resource = f"/organizations/{organizationId}/assurance/clients/topology/new" - body_params = [ - "name", - "enabled", - "adminSettings", - "helpSettings", - "customLogo", + query_params = [ + "clientIds", + "networkId", + "timestamp", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "clientIds", + ] + 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 = [] + body_params + 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"updateOrganizationBrandingPolicy: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceClientsTopologyNew: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.put(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def deleteOrganizationBrandingPolicy(self, organizationId: str, brandingPolicyId: str): + def getOrganizationAssuranceDevicesStatusesOverview(self, organizationId: str, **kwargs): """ - **Delete a branding policy** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-branding-policy + **Returns counts of online, offline, and recovered devices by product type, along with offline intervals for impacted devices in the organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-devices-statuses-overview - organizationId (string): Organization ID - - brandingPolicyId (string): Branding policy ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 7 days. """ + kwargs.update(locals()) + metadata = { - "tags": ["organizations", "configure", "brandingPolicies"], - "operation": "deleteOrganizationBrandingPolicy", + "tags": ["organizations", "monitor", "devices", "statuses", "overview"], + "operation": "getOrganizationAssuranceDevicesStatusesOverview", } organizationId = urllib.parse.quote(str(organizationId), safe="") - brandingPolicyId = urllib.parse.quote(str(brandingPolicyId), safe="") - resource = f"/organizations/{organizationId}/brandingPolicies/{brandingPolicyId}" + resource = f"/organizations/{organizationId}/assurance/devices/statuses/overview" - return self._session.delete(metadata, resource) + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - def claimIntoOrganization(self, organizationId: str, **kwargs): + 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"getOrganizationAssuranceDevicesStatusesOverview: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationAssuranceFetchTableQuery(self, organizationId: str, tableName: str, **kwargs): """ - **Claim a list of devices, licenses, and/or orders into an organization inventory** - https://developer.cisco.com/meraki/api-v1/#!claim-into-organization + **Returns the table data for a given timespan** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-fetch-table-query - organizationId (string): Organization ID - - orders (array): The numbers of the orders that should be claimed - - serials (array): The serials of the devices that should be claimed - - licenses (array): The licenses that should be claimed + - tableName (string): The table from which we want to get data + - t0 (string): The beginning of the timespan for the data. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 365 days, 5 hours, 49 minutes, and 12 seconds. The default is 30 days, 10 hours, 29 minutes, and 6 seconds. + - userEmail (string): The user email for whom we want to calculate lookback """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure"], - "operation": "claimIntoOrganization", + "tags": ["organizations", "monitor", "fetchTableQuery"], + "operation": "getOrganizationAssuranceFetchTableQuery", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/claim" + resource = f"/organizations/{organizationId}/assurance/fetchTableQuery" - body_params = [ - "orders", - "serials", - "licenses", + query_params = [ + "t0", + "timespan", + "tableName", + "userEmail", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} if self._session._validate_kwargs: - all_params = [] + body_params + all_params = query_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"claimIntoOrganization: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceFetchTableQuery: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def getOrganizationClientsBandwidthUsageHistory(self, organizationId: str, **kwargs): + def getOrganizationAssuranceNetworkServicesServerHealthByServer(self, organizationId: str, **kwargs): """ - **Return data usage (in megabits per second) over time for all clients in the given organization within a given time range.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-clients-bandwidth-usage-history + **Returns network server health in organization by server.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-network-services-server-health-by-server - organizationId (string): Organization ID - - networkTag (string): Match result to an exact network tag - - deviceTag (string): Match result to an exact device tag - - ssidName (string): Filter results by ssid name - - usageUplink (string): Filter results by usage uplink - - t0 (string): The beginning of the timespan for the data. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 186 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 186 days. The default is 1 day. + - networkIds (array): Filter results for these networks. + - serverTypes (array): Filter results for these server types. + - serverIps (array): Filter results for these server IP addresses. + - ssidNumbers (array): Filter results for these SSID Numbers. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "monitor", "clients", "bandwidthUsageHistory"], - "operation": "getOrganizationClientsBandwidthUsageHistory", + "tags": ["organizations", "configure", "networkServices", "serverHealth", "byServer"], + "operation": "getOrganizationAssuranceNetworkServicesServerHealthByServer", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/clients/bandwidthUsageHistory" + resource = f"/organizations/{organizationId}/assurance/networkServices/serverHealth/byServer" query_params = [ - "networkTag", - "deviceTag", - "ssidName", - "usageUplink", + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", "t0", "t1", "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + array_params = [ + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", + ] + 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 + 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"getOrganizationClientsBandwidthUsageHistory: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceNetworkServicesServerHealthByServer: ignoring unrecognized kwargs: {invalid}" ) return self._session.get(metadata, resource, params) - def getOrganizationClientsOverview(self, organizationId: str, **kwargs): + def getOrganizationAssuranceNetworkServicesServerHealthByServerByInterval(self, organizationId: str, **kwargs): """ - **Return summary information around client data usage (in kb) across the given organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-clients-overview + **Returns network server health in organization by server and by interval.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-network-services-server-health-by-server-by-interval - organizationId (string): Organization ID - - t0 (string): The beginning of the timespan for the data. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + - networkIds (array): Filter results for these networks. + - serverTypes (array): Filter results for these server types. + - serverIps (array): Filter results for these server IP addresses. + - ssidNumbers (array): Filter results for these SSID Numbers. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "monitor", "clients", "overview"], - "operation": "getOrganizationClientsOverview", + "tags": ["organizations", "configure", "networkServices", "serverHealth", "byServer", "byInterval"], + "operation": "getOrganizationAssuranceNetworkServicesServerHealthByServerByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/clients/overview" + resource = f"/organizations/{organizationId}/assurance/networkServices/serverHealth/byServer/byInterval" query_params = [ + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", "t0", "t1", "timespan", + "interval", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + array_params = [ + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", + ] + 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 + 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"getOrganizationClientsOverview: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceNetworkServicesServerHealthByServerByInterval: ignoring unrecognized kwargs: {invalid}" + ) return self._session.get(metadata, resource, params) - def getOrganizationClientsSearch(self, organizationId: str, mac: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceNetworkServicesServerHealthByServerType(self, organizationId: str, **kwargs): """ - **Return the client details in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-clients-search + **Returns network server health in organization by server type.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-network-services-server-health-by-server-type - organizationId (string): Organization ID - - mac (string): The MAC address of the client. Required. - - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5. Default is 5. - - 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. + - networkIds (array): Filter results for these networks. + - serverTypes (array): Filter results for these server types. + - serverIps (array): Filter results for these server IP addresses. + - ssidNumbers (array): Filter results for these SSID Numbers. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "clients", "search"], - "operation": "getOrganizationClientsSearch", + "tags": ["organizations", "configure", "networkServices", "serverHealth", "byServerType"], + "operation": "getOrganizationAssuranceNetworkServicesServerHealthByServerType", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/clients/search" + resource = f"/organizations/{organizationId}/assurance/networkServices/serverHealth/byServerType" query_params = [ - "perPage", - "startingAfter", - "endingBefore", - "mac", + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + array_params = [ + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", + ] + 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 + 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"getOrganizationClientsSearch: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceNetworkServicesServerHealthByServerType: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def cloneOrganization(self, organizationId: str, name: str, **kwargs): + def getOrganizationAssuranceNetworkServicesServerHealthByServerTypeByInterval(self, organizationId: str, **kwargs): """ - **Create a new organization by cloning the addressed organization** - https://developer.cisco.com/meraki/api-v1/#!clone-organization + **Returns network server health in organization by server type and by interval.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-network-services-server-health-by-server-type-by-interval - organizationId (string): Organization ID - - name (string): The name of the new organization + - networkIds (array): Filter results for these networks. + - serverTypes (array): Filter results for these server types. + - serverIps (array): Filter results for these server IP addresses. + - ssidNumbers (array): Filter results for these SSID Numbers. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. """ - kwargs = locals() + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure"], - "operation": "cloneOrganization", + "tags": ["organizations", "configure", "networkServices", "serverHealth", "byServerType", "byInterval"], + "operation": "getOrganizationAssuranceNetworkServicesServerHealthByServerTypeByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/clone" - - body_params = [ - "name", - ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + resource = f"/organizations/{organizationId}/assurance/networkServices/serverHealth/byServerType/byInterval" - 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"cloneOrganization: ignoring unrecognized kwargs: {invalid}") - - return self._session.post(metadata, resource, payload) - - def getOrganizationConfigTemplates(self, organizationId: str): - """ - **List the configuration templates for this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-config-templates + query_params = [ + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - - organizationId (string): Organization ID - """ + array_params = [ + "networkIds", + "serverTypes", + "serverIps", + "ssidNumbers", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) - metadata = { - "tags": ["organizations", "configure", "configTemplates"], - "operation": "getOrganizationConfigTemplates", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/configTemplates" + 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"getOrganizationAssuranceNetworkServicesServerHealthByServerTypeByInterval: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get(metadata, resource) + return self._session.get(metadata, resource, params) - def createOrganizationConfigTemplate(self, organizationId: str, name: str, **kwargs): + def checkupOrganizationAssuranceOptimization(self, organizationId: str, **kwargs): """ - **Create a new configuration template** - https://developer.cisco.com/meraki/api-v1/#!create-organization-config-template + **Returns an array of checkup results for the organization** + https://developer.cisco.com/meraki/api-v1/#!checkup-organization-assurance-optimization - organizationId (string): Organization ID - - name (string): The name of the configuration template - - timeZone (string): The timezone of the configuration template. For a list of allowed timezones, please see the 'TZ' column in the table in this article. Not applicable if copying from existing network or template - - copyFromNetworkId (string): The ID of the network or config template to copy configuration from + - forceRefresh (boolean): Optional parameter to reassess best practices """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "configTemplates"], - "operation": "createOrganizationConfigTemplate", + "tags": ["organizations", "configure", "optimization"], + "operation": "checkupOrganizationAssuranceOptimization", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/configTemplates" + resource = f"/organizations/{organizationId}/assurance/optimization/checkup" - body_params = [ - "name", - "timeZone", - "copyFromNetworkId", + query_params = [ + "forceRefresh", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} if self._session._validate_kwargs: - all_params = [] + body_params + all_params = query_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"createOrganizationConfigTemplate: ignoring unrecognized kwargs: {invalid}") - - return self._session.post(metadata, resource, payload) - - def getOrganizationConfigTemplate(self, organizationId: str, configTemplateId: str): - """ - **Return a single configuration template** - https://developer.cisco.com/meraki/api-v1/#!get-organization-config-template - - - organizationId (string): Organization ID - - configTemplateId (string): Config template ID - """ - - metadata = { - "tags": ["organizations", "configure", "configTemplates"], - "operation": "getOrganizationConfigTemplate", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") - resource = f"/organizations/{organizationId}/configTemplates/{configTemplateId}" + self._session._logger.warning( + f"checkupOrganizationAssuranceOptimization: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get(metadata, resource) + return self._session.get(metadata, resource, params) - def updateOrganizationConfigTemplate(self, organizationId: str, configTemplateId: str, **kwargs): + def getOrganizationAssuranceOptimizationCheckupByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Update a configuration template** - https://developer.cisco.com/meraki/api-v1/#!update-organization-config-template + **Returns an array of checkup results for the networks** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-optimization-checkup-by-network - organizationId (string): Organization ID - - configTemplateId (string): Config template ID - - name (string): The name of the configuration template - - timeZone (string): The timezone of the configuration template. For a list of allowed timezones, please see the 'TZ' column in the table in this article. + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 7. + - 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. + - networkIds (array): Optional parameter to filter checkups by Network Id + - forceRefresh (boolean): Optional parameter to reassess best practices """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "configTemplates"], - "operation": "updateOrganizationConfigTemplate", + "tags": ["organizations", "configure", "optimization", "checkup", "byNetwork"], + "operation": "getOrganizationAssuranceOptimizationCheckupByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") - resource = f"/organizations/{organizationId}/configTemplates/{configTemplateId}" + resource = f"/organizations/{organizationId}/assurance/optimization/checkup/byNetwork" - body_params = [ - "name", - "timeZone", + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "forceRefresh", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + 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 = [] + body_params + 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"updateOrganizationConfigTemplate: ignoring unrecognized kwargs: {invalid}") - - return self._session.put(metadata, resource, payload) - - def deleteOrganizationConfigTemplate(self, organizationId: str, configTemplateId: str): - """ - **Remove a configuration template** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-config-template - - - organizationId (string): Organization ID - - configTemplateId (string): Config template ID - """ - - metadata = { - "tags": ["organizations", "configure", "configTemplates"], - "operation": "deleteOrganizationConfigTemplate", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") - resource = f"/organizations/{organizationId}/configTemplates/{configTemplateId}" + self._session._logger.warning( + f"getOrganizationAssuranceOptimizationCheckupByNetwork: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.delete(metadata, resource) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationConfigurationChanges(self, organizationId: str, total_pages=1, direction="prev", **kwargs): + def getOrganizationAssuranceProductAnnouncements(self, organizationId: str, **kwargs): """ - **View the Change Log for your organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-configuration-changes + **Gets relevant product announcements for a user** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-product-announcements - 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" or "prev" (default) page - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 365 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 365 days. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100000. Default is 5000. - - 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. - - networkId (string): Filters on the given network - - adminId (string): Filters on the given Admin + - t0 (string): The beginning of the timespan for the data. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 365 days, 5 hours, 49 minutes, and 12 seconds. The default is 91 days, 7 hours, 27 minutes, and 18 seconds. + - onlyRelevant (boolean): Limits product announcements that are considered relevant to this user when true """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "monitor", "configurationChanges"], - "operation": "getOrganizationConfigurationChanges", + "tags": ["organizations", "configure", "productAnnouncements"], + "operation": "getOrganizationAssuranceProductAnnouncements", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/configurationChanges" + resource = f"/organizations/{organizationId}/assurance/productAnnouncements" query_params = [ "t0", - "t1", "timespan", - "perPage", - "startingAfter", - "endingBefore", - "networkId", - "adminId", + "onlyRelevant", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} @@ -2453,82 +3016,51 @@ def getOrganizationConfigurationChanges(self, organizationId: str, total_pages=1 all_params = query_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"getOrganizationConfigurationChanges: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceProductAnnouncements: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationDevices(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceScores(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the devices in an organization that have been assigned to a network.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices + **Get network health scores for a list of networks.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-scores - 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): Filter results by network. - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5000. Default is 1000. - 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. - - configurationUpdatedAfter (string): Filter results by whether or not the device's configuration has been updated after the given timestamp - - networkIds (array): Optional parameter to filter devices by network. - - productTypes (array): Optional parameter to filter devices by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. - - tags (array): Optional parameter to filter devices by tags. - - tagsFilterType (string): Optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return networks which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. - - name (string): Optional parameter to filter devices by name. All returned devices will have a name that contains the search term or is an exact match. - - mac (string): Optional parameter to filter devices by MAC address. All returned devices will have a MAC address that contains the search term or is an exact match. - - serial (string): Optional parameter to filter devices by serial number. All returned devices will have a serial number that contains the search term or is an exact match. - - model (string): Optional parameter to filter devices by model. All returned devices will have a model that contains the search term or is an exact match. - - macs (array): Optional parameter to filter devices by one or more MAC addresses. All returned devices will have a MAC address that is an exact match. - - serials (array): Optional parameter to filter devices by one or more serial numbers. All returned devices will have a serial number that is an exact match. - - sensorMetrics (array): Optional parameter to filter devices by the metrics that they provide. Only applies to sensor devices. - - sensorAlertProfileIds (array): Optional parameter to filter devices by the alert profiles that are bound to them. Only applies to sensor devices. - - models (array): Optional parameter to filter devices by one or more models. All returned devices will have a model that is an exact match. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 2 hours and be less than or equal to 14 days. The default is 2 hours. """ kwargs.update(locals()) - if "tagsFilterType" in kwargs: - options = ["withAllTags", "withAnyTags"] - assert kwargs["tagsFilterType"] in options, ( - f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["organizations", "configure", "devices"], - "operation": "getOrganizationDevices", + "tags": ["organizations", "monitor", "scores"], + "operation": "getOrganizationAssuranceScores", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices" + resource = f"/organizations/{organizationId}/assurance/scores" query_params = [ + "networkIds", "perPage", "startingAfter", "endingBefore", - "configurationUpdatedAfter", - "networkIds", - "productTypes", - "tags", - "tagsFilterType", - "name", - "mac", - "serial", - "model", - "macs", - "serials", - "sensorMetrics", - "sensorAlertProfileIds", - "models", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", - "productTypes", - "tags", - "macs", - "serials", - "sensorMetrics", - "sensorAlertProfileIds", - "models", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -2539,63 +3071,43 @@ def getOrganizationDevices(self, organizationId: str, total_pages=1, direction=" 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"getOrganizationDevices: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"getOrganizationAssuranceScores: ignoring unrecognized kwargs: {invalid}") return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesAvailabilities(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceThousandEyesApplications(self, organizationId: str, networkIds: list, **kwargs): """ - **List the availability information for devices in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-availabilities + **Get a list of Thousand Eyes applications with their alerts.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-thousand-eyes-applications - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - - 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. - - networkIds (array): Optional parameter to filter device availabilities by network ID. This filter uses multiple exact matches. - - productTypes (array): Optional parameter to filter device availabilities by device product types. This filter uses multiple exact matches. Valid types are wireless, appliance, switch, camera, cellularGateway, sensor, wirelessController, and campusGateway - - serials (array): Optional parameter to filter device availabilities by device serial numbers. This filter uses multiple exact matches. - - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). This filter uses multiple exact matches. - - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. - - statuses (array): Optional parameter to filter device availabilities by device status. This filter uses multiple exact matches. + - networkIds (array): Filter results by network. + - clientId (string): Filter results by client. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. """ kwargs.update(locals()) - if "tagsFilterType" in kwargs: - options = ["withAllTags", "withAnyTags"] - assert kwargs["tagsFilterType"] in options, ( - f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["organizations", "monitor", "devices", "availabilities"], - "operation": "getOrganizationDevicesAvailabilities", + "tags": ["organizations", "configure", "thousandEyes", "applications"], + "operation": "getOrganizationAssuranceThousandEyesApplications", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/availabilities" + resource = f"/organizations/{organizationId}/assurance/thousandEyes/applications" query_params = [ - "perPage", - "startingAfter", - "endingBefore", "networkIds", - "productTypes", - "serials", - "tags", - "tagsFilterType", - "statuses", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + "clientId", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", - "productTypes", - "serials", - "tags", - "statuses", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -2606,60 +3118,56 @@ def getOrganizationDevicesAvailabilities(self, organizationId: str, total_pages= 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"getOrganizationDevicesAvailabilities: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationAssuranceThousandEyesApplications: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationDevicesAvailabilitiesChangeHistory( + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **List the availability history information for devices in an organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-availabilities-change-history + **Summarizes wired connection successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-successful-connections-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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. - - serials (array): Optional parameter to filter device availabilities history by device serial numbers - - productTypes (array): Optional parameter to filter device availabilities history by device product types - - networkIds (array): Optional parameter to filter device availabilities history by network IDs - - statuses (array): Optional parameter to filter device availabilities history by device statuses """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "monitor", "devices", "availabilities", "changeHistory"], - "operation": "getOrganizationDevicesAvailabilitiesChangeHistory", + "tags": ["organizations", "configure", "wired", "experience", "successfulConnections", "byNetwork"], + "operation": "getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/availabilities/changeHistory" + resource = f"/organizations/{organizationId}/assurance/wired/experience/successfulConnections/byNetwork" query_params = [ - "perPage", - "startingAfter", - "endingBefore", + "networkIds", + "serials", "t0", "t1", "timespan", - "serials", - "productTypes", - "networkIds", - "statuses", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "serials", - "productTypes", "networkIds", - "statuses", + "serials", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -2671,65 +3179,44 @@ def getOrganizationDevicesAvailabilitiesChangeHistory( 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"getOrganizationDevicesAvailabilitiesChangeHistory: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesCellularDataDevices(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClient(self, organizationId: str, **kwargs): """ - **List devices eligible for Cellular Data Management profile assignment in this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-devices + **Summarizes wired connection successes and failures by client.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-successful-connections-by-network-by-client - 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 - - includeAssigned (boolean): Whether to include devices that have already been assigned to a Cellular Data Management Profile - - includedSerials (array): List of device serials to force-include in the response when the devices would otherwise be filtered out. This override is primarily useful for keeping selected devices visible while paging through results. Maximum 1000 serials. - - excludedSerials (array): List of device serials to force-exclude from the response when the devices would otherwise be returned. This override is primarily useful for hiding selected devices while paging through results. Maximum 1000 serials. - - includedProfileIds (array): List of Cellular Data Management Profile IDs to include in the results. Maximum 1000 profile IDs. - - excludedProfileIds (array): List of Cellular Data Management Profile IDs to exclude from the results. Maximum 1000 profile IDs. - - deviceTypes (array): List of device types to filter by. Maximum 1000 device types. - - slots (array): List of SIM slot types that devices must support. Accepted values are sim1, sim2, and esim. Maximum 3 slots. - - name (string): Name of the device to filter by (partial matches allowed) - - serials (array): List of device serials to filter by. Maximum 1000 serials. - - 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. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "monitor", "devices", "cellular", "data"], - "operation": "getOrganizationDevicesCellularDataDevices", + "tags": ["organizations", "configure", "wired", "experience", "successfulConnections", "byNetwork", "byClient"], + "operation": "getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClient", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/devices" + resource = f"/organizations/{organizationId}/assurance/wired/experience/successfulConnections/byNetwork/byClient" query_params = [ - "includeAssigned", - "includedSerials", - "excludedSerials", - "includedProfileIds", - "excludedProfileIds", - "deviceTypes", - "slots", - "name", + "networkIds", "serials", - "perPage", - "startingAfter", - "endingBefore", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "includedSerials", - "excludedSerials", - "includedProfileIds", - "excludedProfileIds", - "deviceTypes", - "slots", + "networkIds", "serials", ] for k, v in kwargs.items(): @@ -2742,46 +3229,44 @@ def getOrganizationDevicesCellularDataDevices(self, organizationId: str, total_p 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"getOrganizationDevicesCellularDataDevices: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClient: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationDevicesCellularDataProfiles(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClientOs(self, organizationId: str, **kwargs): """ - **List cellular data management profiles in this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-profiles + **Summarizes wired connection successes and failures by client OS.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-successful-connections-by-network-by-client-os - 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 - - profileIds (array): Optional parameter to filter the results by Data Management Profile ID. - - serials (array): Devices to find Cellular Data Management Profiles for. - - 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. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], - "operation": "getOrganizationDevicesCellularDataProfiles", + "tags": ["organizations", "configure", "wired", "experience", "successfulConnections", "byNetwork", "byClientOs"], + "operation": "getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClientOs", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles" + resource = f"/organizations/{organizationId}/assurance/wired/experience/successfulConnections/byNetwork/byClientOs" query_params = [ - "profileIds", + "networkIds", "serials", - "perPage", - "startingAfter", - "endingBefore", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "profileIds", + "networkIds", "serials", ] for k, v in kwargs.items(): @@ -2794,63 +3279,95 @@ def getOrganizationDevicesCellularDataProfiles(self, organizationId: str, total_ 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"getOrganizationDevicesCellularDataProfiles: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClientOs: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def createOrganizationDevicesCellularDataProfile( - self, organizationId: str, name: str, description: str, rules: list, **kwargs + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClientType( + self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Add a cellular data management profile to this organization** - https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-cellular-data-profile + **Summarizes wired connection successes and failures by client type.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-successful-connections-by-network-by-client-type - organizationId (string): Organization ID - - name (string): Name of the profile to be added. This must be unique. - - description (string): Description of the profile to be added. - - rules (array): The rules associated with this profile. At least one rule and no more than two rules may be defined for a profile. + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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 = locals() + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], - "operation": "createOrganizationDevicesCellularDataProfile", + "tags": [ + "organizations", + "configure", + "wired", + "experience", + "successfulConnections", + "byNetwork", + "byClientType", + ], + "operation": "getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClientType", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles" + resource = f"/organizations/{organizationId}/assurance/wired/experience/successfulConnections/byNetwork/byClientType" - body_params = [ - "name", - "description", - "rules", + query_params = [ + "networkIds", + "serials", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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 = [] + body_params + 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"createOrganizationDevicesCellularDataProfile: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByClientType: ignoring unrecognized kwargs: {invalid}" ) - return self._session.post(metadata, resource, payload) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesCellularDataProfilesAssignments( + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByDevice( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **List Cellular Data Management Profile assignments in this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-profiles-assignments + **Summarizes wired connection successes and failures by device.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-successful-connections-by-network-by-device - 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 - - profileIds (array): Optional parameter to find assignments by Profile IDs. Maximum 1000 profile IDs. - - serials (array): Optional parameter to find assignments by Device Serials. Maximum 1000 serials. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 100. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. """ @@ -2858,15 +3375,18 @@ def getOrganizationDevicesCellularDataProfilesAssignments( kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles", "assignments"], - "operation": "getOrganizationDevicesCellularDataProfilesAssignments", + "tags": ["organizations", "configure", "wired", "experience", "successfulConnections", "byNetwork", "byDevice"], + "operation": "getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/assignments" + resource = f"/organizations/{organizationId}/assurance/wired/experience/successfulConnections/byNetwork/byDevice" query_params = [ - "profileIds", + "networkIds", "serials", + "t0", + "t1", + "timespan", "perPage", "startingAfter", "endingBefore", @@ -2874,7 +3394,7 @@ def getOrganizationDevicesCellularDataProfilesAssignments( params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "profileIds", + "networkIds", "serials", ] for k, v in kwargs.items(): @@ -2887,102 +3407,185 @@ def getOrganizationDevicesCellularDataProfilesAssignments( 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"getOrganizationDevicesCellularDataProfilesAssignments: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByDevice: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def batchOrganizationDevicesCellularDataProfilesAssignmentsCreate(self, organizationId: str, items: list, **kwargs): + def getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByInterval(self, organizationId: str, **kwargs): """ - **Assign devices to a Cellular Data Management Profile in batch** - https://developer.cisco.com/meraki/api-v1/#!batch-organization-devices-cellular-data-profiles-assignments-create + **Time-series of wired connection successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wired-experience-successful-connections-by-network-by-interval - organizationId (string): Organization ID - - items (array): List of device-to-profile assignments to create. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 60, 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. """ - kwargs = locals() + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles", "assignments"], - "operation": "batchOrganizationDevicesCellularDataProfilesAssignmentsCreate", + "tags": ["organizations", "monitor", "wired", "experience", "successfulConnections", "byNetwork", "byInterval"], + "operation": "getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/assignments/batchCreate" + resource = f"/organizations/{organizationId}/assurance/wired/experience/successfulConnections/byNetwork/byInterval" - body_params = [ - "items", + query_params = [ + "networkIds", + "serials", + "t0", + "t1", + "timespan", + "interval", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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 = [] + body_params + 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"batchOrganizationDevicesCellularDataProfilesAssignmentsCreate: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWiredExperienceSuccessfulConnectionsByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" ) - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def bulkOrganizationDevicesCellularDataProfilesAssignmentsDelete(self, organizationId: str, items: list, **kwargs): + def getOrganizationAssuranceWorkflows(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Unassign devices from a Cellular Data Management Profile in batch** - https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-cellular-data-profiles-assignments-delete + **Return workflows filtered by organization ID, network ID, type, and category** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-workflows - organizationId (string): Organization ID - - items (array): List of device-to-profile assignments to remove. + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 30. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'ascending'. + - networkIds (array): Optional parameter to filter by network ID + - types (array): Optional parameter to filter workflows by types + - categories (array): Optional parameter to filter workflows by categories + - scopeTypes (array): Optional parameter to filter workflows by scope types + - networkTags (array): Optional parameter to filter workflows by network tags + - clientTags (array): Optional parameter to filter workflows by client tags + - nodeTags (array): Optional parameter to filter workflows by node tags + - state (string): Optional parameter to filter workflows by state + - tsStart (string): Start time to filter workflows + - tsEnd (string): End time to filter workflows """ - kwargs = locals() + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles", "assignments"], - "operation": "bulkOrganizationDevicesCellularDataProfilesAssignmentsDelete", + "tags": ["organizations", "configure", "workflows"], + "operation": "getOrganizationAssuranceWorkflows", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/assignments/bulkDelete" + resource = f"/organizations/{organizationId}/assurance/workflows" - body_params = [ - "items", + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + "networkIds", + "types", + "categories", + "scopeTypes", + "networkTags", + "clientTags", + "nodeTags", + "state", + "tsStart", + "tsEnd", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - if self._session._validate_kwargs: - all_params = [] + body_params + array_params = [ + "networkIds", + "types", + "categories", + "scopeTypes", + "networkTags", + "clientTags", + "nodeTags", + ] + 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"bulkOrganizationDevicesCellularDataProfilesAssignmentsDelete: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"getOrganizationAssuranceWorkflows: ignoring unrecognized kwargs: {invalid}") - return self._session.post(metadata, resource, payload) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def updateOrganizationDevicesCellularDataProfile(self, organizationId: str, rules: list, profileId: str, **kwargs): + def getOrganizationAuthRadiusServers(self, organizationId: str): """ - **Update a Cellular Data Management Profile** - https://developer.cisco.com/meraki/api-v1/#!update-organization-devices-cellular-data-profile + **List the organization-wide RADIUS servers in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-auth-radius-servers - organizationId (string): Organization ID - - rules (array): The rules associated with this profile. At least one rule and no more than two rules may be defined for a profile. - - profileId (string): ID of the profile. - - description (string): New description of the profile. + """ + + metadata = { + "tags": ["organizations", "configure", "auth", "radius", "servers"], + "operation": "getOrganizationAuthRadiusServers", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/auth/radius/servers" + + return self._session.get(metadata, resource) + + def createOrganizationAuthRadiusServer(self, organizationId: str, address: str, secret: str, **kwargs): + """ + **Add an organization-wide RADIUS server** + https://developer.cisco.com/meraki/api-v1/#!create-organization-auth-radius-server + + - organizationId (string): Organization ID + - address (string): The IP address or FQDN of the RADIUS server + - secret (string): Shared secret of the RADIUS server + - name (string): The name of the RADIUS server + - modes (array): Available server modes """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], - "operation": "updateOrganizationDevicesCellularDataProfile", + "tags": ["organizations", "configure", "auth", "radius", "servers"], + "operation": "createOrganizationAuthRadiusServer", } organizationId = urllib.parse.quote(str(organizationId), safe="") - profileId = urllib.parse.quote(str(profileId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/{profileId}" + resource = f"/organizations/{organizationId}/auth/radius/servers" body_params = [ - "profileId", - "description", - "rules", + "name", + "address", + "modes", + "secret", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2990,318 +3593,170 @@ def updateOrganizationDevicesCellularDataProfile(self, organizationId: str, rule 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"updateOrganizationDevicesCellularDataProfile: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"createOrganizationAuthRadiusServer: ignoring unrecognized kwargs: {invalid}") - return self._session.put(metadata, resource, payload) + return self._session.post(metadata, resource, payload) - def deleteOrganizationDevicesCellularDataProfile(self, organizationId: str, profileId: str): + def getOrganizationAuthRadiusServersAssignments(self, organizationId: str): """ - **Delete a cellular data management profile from this organization** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-devices-cellular-data-profile + **Return list of network and policies that organization-wide RADIUS servers are bing used** + https://developer.cisco.com/meraki/api-v1/#!get-organization-auth-radius-servers-assignments - organizationId (string): Organization ID - - profileId (string): Profile ID """ metadata = { - "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], - "operation": "deleteOrganizationDevicesCellularDataProfile", + "tags": ["organizations", "configure", "auth", "radius", "servers", "assignments"], + "operation": "getOrganizationAuthRadiusServersAssignments", } organizationId = urllib.parse.quote(str(organizationId), safe="") - profileId = urllib.parse.quote(str(profileId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/{profileId}" + resource = f"/organizations/{organizationId}/auth/radius/servers/assignments" - return self._session.delete(metadata, resource) + return self._session.get(metadata, resource) - def getOrganizationDevicesCellularDataUsageByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAuthRadiusServer(self, organizationId: str, serverId: str): """ - **List current cellular data usage for devices in this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-usage-by-device + **Return an organization-wide RADIUS server** + https://developer.cisco.com/meraki/api-v1/#!get-organization-auth-radius-server - 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 - - serials (array): Filter the results by device serials. Maximum 1000 serials. - - 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. + - serverId (string): Server ID """ - kwargs.update(locals()) - metadata = { - "tags": ["organizations", "monitor", "devices", "cellular", "data", "usage", "byDevice"], - "operation": "getOrganizationDevicesCellularDataUsageByDevice", + "tags": ["organizations", "configure", "auth", "radius", "servers"], + "operation": "getOrganizationAuthRadiusServer", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/usage/byDevice" - - query_params = [ - "serials", - "perPage", - "startingAfter", - "endingBefore", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - - array_params = [ - "serials", - ] - 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"getOrganizationDevicesCellularDataUsageByDevice: ignoring unrecognized kwargs: {invalid}" - ) + serverId = urllib.parse.quote(str(serverId), safe="") + resource = f"/organizations/{organizationId}/auth/radius/servers/{serverId}" - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource) - def getOrganizationDevicesCellularDataUsageHistoryByDeviceByInterval( - self, organizationId: str, serials: list, total_pages=1, direction="next", **kwargs - ): + def updateOrganizationAuthRadiusServer(self, organizationId: str, serverId: str, **kwargs): """ - **List historical cellular data usage grouped by device and interval in this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-usage-history-by-device-by-interval + **Update an organization-wide RADIUS server** + https://developer.cisco.com/meraki/api-v1/#!update-organization-auth-radius-server - organizationId (string): Organization ID - - serials (array): Required parameter to filter the results by device serials. Maximum 10 serials. - - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10. Default is 5. - - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 366 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 86400. Interval is calculated if time params are provided. + - serverId (string): Server ID + - name (string): The name of the RADIUS server + - address (string): The IP address or FQDN of the RADIUS server + - modes (array): Available server modes + - secret (string): Shared secret of the RADIUS server """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "monitor", "devices", "cellular", "data", "usage", "history", "byDevice", "byInterval"], - "operation": "getOrganizationDevicesCellularDataUsageHistoryByDeviceByInterval", + "tags": ["organizations", "configure", "auth", "radius", "servers"], + "operation": "updateOrganizationAuthRadiusServer", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/data/usage/history/byDevice/byInterval" - - query_params = [ - "serials", - "perPage", - "startingAfter", - "endingBefore", - "t0", - "t1", - "timespan", - "interval", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + serverId = urllib.parse.quote(str(serverId), safe="") + resource = f"/organizations/{organizationId}/auth/radius/servers/{serverId}" - array_params = [ - "serials", + body_params = [ + "name", + "address", + "modes", + "secret", ] - for k, v in kwargs.items(): - if k.strip() in array_params: - params[f"{k.strip()}[]"] = kwargs[f"{k}"] - params.pop(k.strip()) + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationDevicesCellularDataUsageHistoryByDeviceByInterval: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"updateOrganizationAuthRadiusServer: ignoring unrecognized kwargs: {invalid}") - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.put(metadata, resource, payload) - def getOrganizationDevicesCellularGeolocations(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def deleteOrganizationAuthRadiusServer(self, organizationId: str, serverId: str): """ - **List the latest cellular geolocation telemetry for devices in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-geolocations + **Delete an organization-wide RADIUS server from a organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-auth-radius-server - 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 - - serials (array): Optional parameter to filter the results by device serials. Maximum 1000 serials. - - 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. + - serverId (string): Server ID """ - kwargs.update(locals()) - metadata = { - "tags": ["organizations", "monitor", "devices", "cellular", "geolocations"], - "operation": "getOrganizationDevicesCellularGeolocations", + "tags": ["organizations", "configure", "auth", "radius", "servers"], + "operation": "deleteOrganizationAuthRadiusServer", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/geolocations" - - query_params = [ - "serials", - "perPage", - "startingAfter", - "endingBefore", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - - array_params = [ - "serials", - ] - 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"getOrganizationDevicesCellularGeolocations: ignoring unrecognized kwargs: {invalid}" - ) + serverId = urllib.parse.quote(str(serverId), safe="") + resource = f"/organizations/{organizationId}/auth/radius/servers/{serverId}" - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.delete(metadata, resource) - def getOrganizationDevicesCellularUplinksBandsByDevice( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def codeOrganizationAutomateIdentity(self, organizationId: str): """ - **List the latest cellular uplink signal information for devices in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-uplinks-bands-by-device + **Generate a single use short lived code that can be used to retrieve the identity of the current user in the organization.** + https://developer.cisco.com/meraki/api-v1/#!code-organization-automate-identity - 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 - - serials (array): Optional parameter to filter the results by device serials. Maximum 1000 serials. - - 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. """ - kwargs.update(locals()) - metadata = { - "tags": ["organizations", "monitor", "devices", "cellular", "uplinks", "bands", "byDevice"], - "operation": "getOrganizationDevicesCellularUplinksBandsByDevice", + "tags": ["organizations", "configure", "automate", "identity"], + "operation": "codeOrganizationAutomateIdentity", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/uplinks/bands/byDevice" - - query_params = [ - "serials", - "perPage", - "startingAfter", - "endingBefore", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - - array_params = [ - "serials", - ] - 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"getOrganizationDevicesCellularUplinksBandsByDevice: ignoring unrecognized kwargs: {invalid}" - ) + resource = f"/organizations/{organizationId}/automate/identity/code" - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.post(metadata, resource) - def getOrganizationDevicesCellularUplinksTowersByDevice( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def getOrganizationBrandingPolicies(self, organizationId: str): """ - **List the latest cellular tower information for devices in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-uplinks-towers-by-device + **List the branding policies of an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-branding-policies - 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 - - serials (array): Optional parameter to filter the results by device serials. Maximum 1000 serials. - - 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. """ - kwargs.update(locals()) - metadata = { - "tags": ["organizations", "monitor", "devices", "cellular", "uplinks", "towers", "byDevice"], - "operation": "getOrganizationDevicesCellularUplinksTowersByDevice", + "tags": ["organizations", "configure", "brandingPolicies"], + "operation": "getOrganizationBrandingPolicies", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/cellular/uplinks/towers/byDevice" + resource = f"/organizations/{organizationId}/brandingPolicies" - query_params = [ - "serials", - "perPage", - "startingAfter", - "endingBefore", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + return self._session.get(metadata, resource) - array_params = [ - "serials", - ] - 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"getOrganizationDevicesCellularUplinksTowersByDevice: ignoring unrecognized kwargs: {invalid}" - ) - - return self._session.get_pages(metadata, resource, params, total_pages, direction) - - def createOrganizationDevicesControllerMigration(self, organizationId: str, serials: list, target: str, **kwargs): + def createOrganizationBrandingPolicy(self, organizationId: str, name: str, **kwargs): """ - **Migrate devices to another controller or management mode** - https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-controller-migration + **Add a new branding policy to an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-branding-policy - - organizationId (string): Organization ID - - serials (array): A list of Meraki Serials to migrate - - target (string): The controller or management mode to which the devices will be migrated + - organizationId (string): Organization ID + - name (string): Name of the Dashboard branding policy. + - enabled (boolean): Boolean indicating whether this policy is enabled. + - adminSettings (object): Settings for describing which kinds of admins this policy applies to. + - helpSettings (object): Settings for describing the modifications to various Help page features. Each property in this object accepts one of + 'default or inherit' (do not modify functionality), 'hide' (remove the section from Dashboard), or 'show' (always show + the section on Dashboard). Some properties in this object also accept custom HTML used to replace the section on + Dashboard; see the documentation for each property to see the allowed values. + Each property defaults to 'default or inherit' when not provided. + - customLogo (object): Properties describing the custom logo attached to the branding policy. """ - kwargs = locals() - - if "target" in kwargs: - options = ["wirelessController"] - assert kwargs["target"] in options, ( - f'''"target" cannot be "{kwargs["target"]}", & must be set to one of: {options}''' - ) + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "controller", "migrations"], - "operation": "createOrganizationDevicesControllerMigration", + "tags": ["organizations", "configure", "brandingPolicies"], + "operation": "createOrganizationBrandingPolicy", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/controller/migrations" + resource = f"/organizations/{organizationId}/brandingPolicies" body_params = [ - "serials", - "target", + "name", + "enabled", + "adminSettings", + "helpSettings", + "customLogo", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3309,94 +3764,114 @@ def createOrganizationDevicesControllerMigration(self, organizationId: str, seri 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"createOrganizationDevicesControllerMigration: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"createOrganizationBrandingPolicy: ignoring unrecognized kwargs: {invalid}") return self._session.post(metadata, resource, payload) - def getOrganizationDevicesControllerMigrations(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationBrandingPoliciesPriorities(self, organizationId: str): """ - **Retrieve device migration statuses in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-controller-migrations + **Return the branding policy IDs of an organization in priority order** + https://developer.cisco.com/meraki/api-v1/#!get-organization-branding-policies-priorities - 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 - - serials (array): A list of Meraki Serials for which to retrieve migrations - - networkIds (array): Filter device migrations by network IDs - - target (string): Filter device migrations by target destination - - 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. """ - kwargs.update(locals()) + metadata = { + "tags": ["organizations", "configure", "brandingPolicies", "priorities"], + "operation": "getOrganizationBrandingPoliciesPriorities", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/brandingPolicies/priorities" - if "target" in kwargs: - options = ["wirelessController"] - assert kwargs["target"] in options, ( - f'''"target" cannot be "{kwargs["target"]}", & must be set to one of: {options}''' - ) + return self._session.get(metadata, resource) + + def updateOrganizationBrandingPoliciesPriorities(self, organizationId: str, **kwargs): + """ + **Update the priority ordering of an organization's branding policies.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-branding-policies-priorities + + - organizationId (string): Organization ID + - brandingPolicyIds (array): An ordered list of branding policy IDs that determines the priority order of how to apply the policies + + """ + + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "controller", "migrations"], - "operation": "getOrganizationDevicesControllerMigrations", + "tags": ["organizations", "configure", "brandingPolicies", "priorities"], + "operation": "updateOrganizationBrandingPoliciesPriorities", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/controller/migrations" - - query_params = [ - "serials", - "networkIds", - "target", - "perPage", - "startingAfter", - "endingBefore", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + resource = f"/organizations/{organizationId}/brandingPolicies/priorities" - array_params = [ - "serials", - "networkIds", + body_params = [ + "brandingPolicyIds", ] - for k, v in kwargs.items(): - if k.strip() in array_params: - params[f"{k.strip()}[]"] = kwargs[f"{k}"] - params.pop(k.strip()) + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationDevicesControllerMigrations: ignoring unrecognized kwargs: {invalid}" + f"updateOrganizationBrandingPoliciesPriorities: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.put(metadata, resource, payload) - def bulkUpdateOrganizationDevicesDetails(self, organizationId: str, serials: list, details: list, **kwargs): + def getOrganizationBrandingPolicy(self, organizationId: str, brandingPolicyId: str): """ - **Updating device details (currently only used for Catalyst devices)** - https://developer.cisco.com/meraki/api-v1/#!bulk-update-organization-devices-details + **Return a branding policy** + https://developer.cisco.com/meraki/api-v1/#!get-organization-branding-policy - organizationId (string): Organization ID - - serials (array): A list of serials of devices to update - - details (array): An array of details + - brandingPolicyId (string): Branding policy ID """ - kwargs = locals() + metadata = { + "tags": ["organizations", "configure", "brandingPolicies"], + "operation": "getOrganizationBrandingPolicy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + brandingPolicyId = urllib.parse.quote(str(brandingPolicyId), safe="") + resource = f"/organizations/{organizationId}/brandingPolicies/{brandingPolicyId}" + + return self._session.get(metadata, resource) + + def updateOrganizationBrandingPolicy(self, organizationId: str, brandingPolicyId: str, name: str, **kwargs): + """ + **Update a branding policy** + https://developer.cisco.com/meraki/api-v1/#!update-organization-branding-policy + + - organizationId (string): Organization ID + - brandingPolicyId (string): Branding policy ID + - name (string): Name of the Dashboard branding policy. + - enabled (boolean): Boolean indicating whether this policy is enabled. + - adminSettings (object): Settings for describing which kinds of admins this policy applies to. + - helpSettings (object): Settings for describing the modifications to various Help page features. Each property in this object accepts one of + 'default or inherit' (do not modify functionality), 'hide' (remove the section from Dashboard), or 'show' (always show + the section on Dashboard). Some properties in this object also accept custom HTML used to replace the section on + Dashboard; see the documentation for each property to see the allowed values. + + - customLogo (object): Properties describing the custom logo attached to the branding policy. + """ + + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "details", "bulkUpdate"], - "operation": "bulkUpdateOrganizationDevicesDetails", + "tags": ["organizations", "configure", "brandingPolicies"], + "operation": "updateOrganizationBrandingPolicy", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/details/bulkUpdate" + brandingPolicyId = urllib.parse.quote(str(brandingPolicyId), safe="") + resource = f"/organizations/{organizationId}/brandingPolicies/{brandingPolicyId}" body_params = [ - "serials", - "details", + "name", + "enabled", + "adminSettings", + "helpSettings", + "customLogo", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3404,41 +3879,57 @@ def bulkUpdateOrganizationDevicesDetails(self, organizationId: str, serials: lis 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"bulkUpdateOrganizationDevicesDetails: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"updateOrganizationBrandingPolicy: ignoring unrecognized kwargs: {invalid}") - return self._session.post(metadata, resource, payload) + return self._session.put(metadata, resource, payload) - def getOrganizationDevicesOverviewByModel(self, organizationId: str, **kwargs): + def deleteOrganizationBrandingPolicy(self, organizationId: str, brandingPolicyId: str): """ - **Lists the count for each device model** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-overview-by-model + **Delete a branding policy** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-branding-policy - organizationId (string): Organization ID - - models (array): Optional parameter to filter devices by one or more models. All returned devices will have a model that is an exact match. - - networkIds (array): Optional parameter to filter devices by networkId. - - productTypes (array): Optional parameter to filter device by device product types. This filter uses multiple exact matches. + - brandingPolicyId (string): Branding policy ID + """ + + metadata = { + "tags": ["organizations", "configure", "brandingPolicies"], + "operation": "deleteOrganizationBrandingPolicy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + brandingPolicyId = urllib.parse.quote(str(brandingPolicyId), safe="") + resource = f"/organizations/{organizationId}/brandingPolicies/{brandingPolicyId}" + + return self._session.delete(metadata, resource) + + def getOrganizationCertificates(self, organizationId: str, **kwargs): + """ + **Gets all or specific certificates for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-certificates + + - organizationId (string): Organization ID + - certificateIds (array): List of ids for specific certificate retrieval + - certManagedBy (array): List of cert managed by types """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "overview", "byModel"], - "operation": "getOrganizationDevicesOverviewByModel", + "tags": ["organizations", "configure", "certificates"], + "operation": "getOrganizationCertificates", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/overview/byModel" + resource = f"/organizations/{organizationId}/certificates" query_params = [ - "models", - "networkIds", - "productTypes", + "certificateIds", + "certManagedBy", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "models", - "networkIds", - "productTypes", + "certificateIds", + "certManagedBy", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3449,213 +3940,109 @@ def getOrganizationDevicesOverviewByModel(self, organizationId: str, **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"getOrganizationDevicesOverviewByModel: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"getOrganizationCertificates: ignoring unrecognized kwargs: {invalid}") return self._session.get(metadata, resource, params) - def getOrganizationDevicesPacketCaptureCaptures(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def importOrganizationCertificates(self, organizationId: str, managedBy: str, contents: str, description: str, **kwargs): """ - **List Packet Captures** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-packet-capture-captures + **Import certificate for this organization** + https://developer.cisco.com/meraki/api-v1/#!import-organization-certificates - 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 - - captureIds (array): Return the packet captures of the specified capture ids - - networkIds (array): Return the packet captures of the specified network(s) - - serials (array): Return the packet captures of the specified device(s) - - process (array): Return the packet captures of the specified process - - captureStatus (array): Return the packet captures of the specified capture status - - name (array): Return the packet captures matching the specified name - - clientMac (array): Return the packet captures matching the specified client macs - - notes (string): Return the packet captures matching the specified notes - - deviceName (string): Return the packet captures matching the specified device name - - adminName (string): Return the packet captures matching the admin name - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 365 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 365 days. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. - - 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. - - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'descending'. + - 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 """ - kwargs.update(locals()) + kwargs = locals() - if "sortOrder" in kwargs: - options = ["ascending", "descending"] - assert kwargs["sortOrder"] in options, ( - f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + if "managedBy" in kwargs: + 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}''' ) metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], - "operation": "getOrganizationDevicesPacketCaptureCaptures", + "tags": ["organizations", "configure", "certificates"], + "operation": "importOrganizationCertificates", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures" - - query_params = [ - "captureIds", - "networkIds", - "serials", - "process", - "captureStatus", - "name", - "clientMac", - "notes", - "deviceName", - "adminName", - "t0", - "t1", - "timespan", - "perPage", - "startingAfter", - "endingBefore", - "sortOrder", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + resource = f"/organizations/{organizationId}/certificates/import" - array_params = [ - "captureIds", - "networkIds", - "serials", - "process", - "captureStatus", - "name", - "clientMac", + body_params = [ + "managedBy", + "contents", + "description", ] - for k, v in kwargs.items(): - if k.strip() in array_params: - params[f"{k.strip()}[]"] = kwargs[f"{k}"] - params.pop(k.strip()) + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationDevicesPacketCaptureCaptures: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"importOrganizationCertificates: ignoring unrecognized kwargs: {invalid}") - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.post(metadata, resource, payload) - def createOrganizationDevicesPacketCaptureCapture(self, organizationId: str, serials: list, name: str, **kwargs): + def getOrganizationCertificatesMerakiAuthContents(self, organizationId: str): """ - **Perform a packet capture on a device and store in Meraki Cloud** - https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-packet-capture-capture + **Download the public RADIUS certificate.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-certificates-meraki-auth-contents - organizationId (string): Organization ID - - serials (array): The serial(s) of the device(s) - - name (string): Name of packet capture file - - outputType (string): Output type of packet capture file. Possible values: text, pcap, cloudshark, or upload_to_cloud - - destination (string): Destination of packet capture file. Possible values: [upload_to_cloud] - - ports (string): Ports of packet capture file, comma-separated - - notes (string): Reason for taking the packet capture - - duration (integer): Duration in seconds of packet capture - - filterExpression (string): Filter expression for packet capture - - interface (string): Interface of the device - - advanced (object): Advanced filters for IOSXE devices (supported for Campus Gateway devices only) """ - kwargs.update(locals()) - metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], - "operation": "createOrganizationDevicesPacketCaptureCapture", + "tags": ["organizations", "monitor", "certificates", "merakiAuth", "contents"], + "operation": "getOrganizationCertificatesMerakiAuthContents", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures" - - body_params = [ - "serials", - "name", - "outputType", - "destination", - "ports", - "notes", - "duration", - "filterExpression", - "interface", - "advanced", - ] - 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"createOrganizationDevicesPacketCaptureCapture: ignoring unrecognized kwargs: {invalid}" - ) + resource = f"/organizations/{organizationId}/certificates/merakiAuth/contents" - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource) - def bulkOrganizationDevicesPacketCaptureCapturesCreate(self, organizationId: str, devices: list, name: str, **kwargs): + def deleteOrganizationCertificate(self, organizationId: str, certificateId: str): """ - **Perform a packet capture on multiple devices and store in Meraki Cloud.** - https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-packet-capture-captures-create + **Delete a certificate for an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-certificate - organizationId (string): Organization ID - - devices (array): Device details (maximum of 20 devices allowed) - - name (string): Name of packet capture file - - notes (string): Reason for capture - - duration (integer): Duration of the capture in seconds - - filterExpression (string): Filter expression for the capture - - advanced (object): Advanced capture options (optional) + - certificateId (string): Certificate ID """ - kwargs.update(locals()) - metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], - "operation": "bulkOrganizationDevicesPacketCaptureCapturesCreate", + "tags": ["organizations", "configure", "certificates"], + "operation": "deleteOrganizationCertificate", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures/bulkCreate" - - body_params = [ - "devices", - "notes", - "duration", - "filterExpression", - "name", - "advanced", - ] - 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"bulkOrganizationDevicesPacketCaptureCapturesCreate: ignoring unrecognized kwargs: {invalid}" - ) + certificateId = urllib.parse.quote(str(certificateId), safe="") + resource = f"/organizations/{organizationId}/certificates/{certificateId}" - return self._session.post(metadata, resource, payload) + return self._session.delete(metadata, resource) - def bulkOrganizationDevicesPacketCaptureCapturesDelete(self, organizationId: str, captureIds: list, **kwargs): + def updateOrganizationCertificate(self, organizationId: str, certificateId: str, **kwargs): """ - **BulkDelete packet captures from cloud** - https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-packet-capture-captures-delete + **Update a certificate's description for an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-certificate - organizationId (string): Organization ID - - captureIds (array): Delete the packet captures of the specified capture ids + - certificateId (string): Certificate ID + - description (string): Description of a certificate that already exist in your org """ - kwargs = locals() + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], - "operation": "bulkOrganizationDevicesPacketCaptureCapturesDelete", + "tags": ["organizations", "configure", "certificates"], + "operation": "updateOrganizationCertificate", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures/bulkDelete" + certificateId = urllib.parse.quote(str(certificateId), safe="") + resource = f"/organizations/{organizationId}/certificates/{certificateId}" body_params = [ - "captureIds", + "description", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3663,72 +4050,67 @@ def bulkOrganizationDevicesPacketCaptureCapturesDelete(self, organizationId: str 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"bulkOrganizationDevicesPacketCaptureCapturesDelete: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"updateOrganizationCertificate: ignoring unrecognized kwargs: {invalid}") - return self._session.post(metadata, resource, payload) + return self._session.put(metadata, resource, payload) - def deleteOrganizationDevicesPacketCaptureCapture(self, organizationId: str, captureId: str): + def getOrganizationCertificateContents(self, organizationId: str, certificateId: str, **kwargs): """ - **Delete a single packet capture from cloud using captureId** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-devices-packet-capture-capture + **Download the trusted certificate by certificate id.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-certificate-contents - organizationId (string): Organization ID - - captureId (string): Capture ID + - certificateId (string): Certificate ID + - chainId (string): chainId that represent which certificate chain is being requested """ + kwargs.update(locals()) + metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], - "operation": "deleteOrganizationDevicesPacketCaptureCapture", + "tags": ["organizations", "configure", "certificates", "contents"], + "operation": "getOrganizationCertificateContents", } organizationId = urllib.parse.quote(str(organizationId), safe="") - captureId = urllib.parse.quote(str(captureId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures/{captureId}" - - return self._session.delete(metadata, resource) - - def generateOrganizationDevicesPacketCaptureCaptureDownloadUrl(self, organizationId: str, captureId: str): - """ - **Get presigned download URL for given packet capture id** - https://developer.cisco.com/meraki/api-v1/#!generate-organization-devices-packet-capture-capture-download-url + certificateId = urllib.parse.quote(str(certificateId), safe="") + resource = f"/organizations/{organizationId}/certificates/{certificateId}/contents" - - organizationId (string): Organization ID - - captureId (string): Capture ID - """ + query_params = [ + "chainId", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures", "downloadUrl"], - "operation": "generateOrganizationDevicesPacketCaptureCaptureDownloadUrl", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - captureId = urllib.parse.quote(str(captureId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures/{captureId}/downloadUrl/generate" + if self._session._validate_kwargs: + all_params = query_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"getOrganizationCertificateContents: ignoring unrecognized kwargs: {invalid}") - return self._session.post(metadata, resource) + return self._session.get(metadata, resource, params) - def stopOrganizationDevicesPacketCaptureCapture(self, organizationId: str, captureId: str, serials: list, **kwargs): + def claimIntoOrganization(self, organizationId: str, **kwargs): """ - **Stop a specific packet capture (not supported for Catalyst devices)** - https://developer.cisco.com/meraki/api-v1/#!stop-organization-devices-packet-capture-capture + **Claim a list of devices, licenses, and/or orders into an organization inventory** + https://developer.cisco.com/meraki/api-v1/#!claim-into-organization - organizationId (string): Organization ID - - captureId (string): Capture ID - - serials (array): The serial(s) of the device(s) to stop the capture on + - orders (array): The numbers of the orders that should be claimed + - serials (array): The serials of the devices that should be claimed + - licenses (array): The licenses that should be claimed """ - kwargs = locals() + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], - "operation": "stopOrganizationDevicesPacketCaptureCapture", + "tags": ["organizations", "configure"], + "operation": "claimIntoOrganization", } organizationId = urllib.parse.quote(str(organizationId), safe="") - captureId = urllib.parse.quote(str(captureId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/captures/{captureId}/stop" + resource = f"/organizations/{organizationId}/claim" body_params = [ + "orders", "serials", + "licenses", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3736,171 +4118,151 @@ def stopOrganizationDevicesPacketCaptureCapture(self, organizationId: str, captu 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"stopOrganizationDevicesPacketCaptureCapture: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"claimIntoOrganization: ignoring unrecognized kwargs: {invalid}") return self._session.post(metadata, resource, payload) - def getOrganizationDevicesPacketCaptureSchedules(self, organizationId: str, **kwargs): + def getOrganizationClientsBandwidthUsageHistory(self, organizationId: str, **kwargs): """ - **List the Packet Capture Schedules** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-packet-capture-schedules + **Return data usage (in megabits per second) over time for all clients in the given organization within a given time range.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-clients-bandwidth-usage-history - organizationId (string): Organization ID - - scheduleIds (array): Return the packet captures schedules of the specified packet capture schedule ids - - networkIds (array): Return the scheduled packet captures of the specified network(s) - - deviceIds (array): Return the scheduled packet captures of the specified device(s) + - networkTag (string): Match result to an exact network tag + - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id + - ssidName (string): Filter results by ssid name + - usageUplink (string): Filter results by usage uplink + - t0 (string): The beginning of the timespan for the data. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 186 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 186 days. The default is 1 day. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], - "operation": "getOrganizationDevicesPacketCaptureSchedules", + "tags": ["organizations", "monitor", "clients", "bandwidthUsageHistory"], + "operation": "getOrganizationClientsBandwidthUsageHistory", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/schedules" + resource = f"/organizations/{organizationId}/clients/bandwidthUsageHistory" query_params = [ - "scheduleIds", - "networkIds", - "deviceIds", + "networkTag", + "deviceTag", + "networkId", + "ssidName", + "usageUplink", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - array_params = [ - "scheduleIds", - "networkIds", - "deviceIds", - ] - 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 + all_params = query_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"getOrganizationDevicesPacketCaptureSchedules: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationClientsBandwidthUsageHistory: ignoring unrecognized kwargs: {invalid}" ) return self._session.get(metadata, resource, params) - def createOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, devices: list, **kwargs): + def getOrganizationClientsOverview(self, organizationId: str, **kwargs): """ - **Create a schedule for packet capture** - https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-packet-capture-schedule + **Return summary information around client data usage (in kb) across the given organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-clients-overview - organizationId (string): Organization ID - - devices (array): device details - - name (string): Name of the packet capture file - - notes (string): Reason for capture - - duration (integer): Duration of the capture in seconds - - filterExpression (string): Filter expression for the capture - - enabled (boolean): Enable or disable the schedule - - schedule (object): Schedule details + - t0 (string): The beginning of the timespan for the data. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], - "operation": "createOrganizationDevicesPacketCaptureSchedule", + "tags": ["organizations", "monitor", "clients", "overview"], + "operation": "getOrganizationClientsOverview", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/schedules" + resource = f"/organizations/{organizationId}/clients/overview" - body_params = [ - "devices", - "name", - "notes", - "duration", - "filterExpression", - "enabled", - "schedule", + query_params = [ + "t0", + "t1", + "timespan", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} if self._session._validate_kwargs: - all_params = [] + body_params + all_params = query_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"createOrganizationDevicesPacketCaptureSchedule: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"getOrganizationClientsOverview: ignoring unrecognized kwargs: {invalid}") - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def reorderOrganizationDevicesPacketCaptureSchedules(self, organizationId: str, order: list, **kwargs): + def getOrganizationClientsSearch(self, organizationId: str, mac: str, total_pages=1, direction="next", **kwargs): """ - **Bulk update priorities of pcap schedules** - https://developer.cisco.com/meraki/api-v1/#!reorder-organization-devices-packet-capture-schedules + **Return the client details in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-clients-search - organizationId (string): Organization ID - - order (array): Array of schedule IDs and their priorities to reorder. + - mac (string): The MAC address of the client. Required. + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5. Default is 5. + - 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 = locals() + kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], - "operation": "reorderOrganizationDevicesPacketCaptureSchedules", + "tags": ["organizations", "configure", "clients", "search"], + "operation": "getOrganizationClientsSearch", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/reorder" + resource = f"/organizations/{organizationId}/clients/search" - body_params = [ - "order", + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "mac", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} if self._session._validate_kwargs: - all_params = [] + body_params + all_params = query_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"reorderOrganizationDevicesPacketCaptureSchedules: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"getOrganizationClientsSearch: ignoring unrecognized kwargs: {invalid}") - return self._session.post(metadata, resource, payload) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def updateOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, scheduleId: str, devices: list, **kwargs): + def cloneOrganization(self, organizationId: str, name: str, **kwargs): """ - **Update a schedule for packet capture** - https://developer.cisco.com/meraki/api-v1/#!update-organization-devices-packet-capture-schedule + **Create a new organization by cloning the addressed organization** + https://developer.cisco.com/meraki/api-v1/#!clone-organization - organizationId (string): Organization ID - - scheduleId (string): Schedule ID - - devices (array): device details - - name (string): Name of the packet capture file - - notes (string): Reason for capture - - duration (integer): Duration of the capture in seconds - - filterExpression (string): Filter expression for the capture - - enabled (boolean): Enable or disable the schedule - - schedule (object): Schedule details + - name (string): The name of the new organization """ - kwargs.update(locals()) + kwargs = locals() metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], - "operation": "updateOrganizationDevicesPacketCaptureSchedule", + "tags": ["organizations", "configure"], + "operation": "cloneOrganization", } organizationId = urllib.parse.quote(str(organizationId), safe="") - scheduleId = urllib.parse.quote(str(scheduleId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/{scheduleId}" + resource = f"/organizations/{organizationId}/clone" body_params = [ - "devices", "name", - "notes", - "duration", - "filterExpression", - "enabled", - "schedule", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -3908,192 +4270,224 @@ def updateOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, sc 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"updateOrganizationDevicesPacketCaptureSchedule: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"cloneOrganization: ignoring unrecognized kwargs: {invalid}") - return self._session.put(metadata, resource, payload) + return self._session.post(metadata, resource, payload) - def deleteOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, scheduleId: str): + def getOrganizationCloudConnectivityRequirements(self, organizationId: str): """ - **Delete schedule from cloud** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-devices-packet-capture-schedule + **List of source/destination traffic rules** + https://developer.cisco.com/meraki/api-v1/#!get-organization-cloud-connectivity-requirements - organizationId (string): Organization ID - - scheduleId (string): Delete the capture schedules of the specified capture schedule id """ - kwargs = locals() + metadata = { + "tags": ["organizations", "monitor", "cloud", "connectivity", "requirements"], + "operation": "getOrganizationCloudConnectivityRequirements", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/cloud/connectivity/requirements" + + return self._session.get(metadata, resource) + + def getOrganizationConfigTemplates(self, organizationId: str): + """ + **List the configuration templates for this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-config-templates + + - organizationId (string): Organization ID + """ metadata = { - "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], - "operation": "deleteOrganizationDevicesPacketCaptureSchedule", + "tags": ["organizations", "configure", "configTemplates"], + "operation": "getOrganizationConfigTemplates", } organizationId = urllib.parse.quote(str(organizationId), safe="") - scheduleId = urllib.parse.quote(str(scheduleId), safe="") - resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/{scheduleId}" + resource = f"/organizations/{organizationId}/configTemplates" - return self._session.delete(metadata, resource) + return self._session.get(metadata, resource) - def getOrganizationDevicesPowerModulesStatusesByDevice( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def createOrganizationConfigTemplate(self, organizationId: str, name: str, **kwargs): """ - **List the most recent status information for power modules in rackmount MX and MS devices that support them** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-power-modules-statuses-by-device + **Create a new configuration template** + https://developer.cisco.com/meraki/api-v1/#!create-organization-config-template - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - - 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. - - networkIds (array): Optional parameter to filter device availabilities by network ID. This filter uses multiple exact matches. - - productTypes (array): Optional parameter to filter device availabilities by device product types. This filter uses multiple exact matches. - - serials (array): Optional parameter to filter device availabilities by device serial numbers. This filter uses multiple exact matches. - - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). This filter uses multiple exact matches. - - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - name (string): The name of the configuration template + - timeZone (string): The timezone of the configuration template. For a list of allowed timezones, please see the 'TZ' column in the table in this article. Not applicable if copying from existing network or template + - copyFromNetworkId (string): The ID of the network or config template to copy configuration from """ kwargs.update(locals()) - if "tagsFilterType" in kwargs: - options = ["withAllTags", "withAnyTags"] - assert kwargs["tagsFilterType"] in options, ( - f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["organizations", "monitor", "devices", "powerModules", "statuses", "byDevice"], - "operation": "getOrganizationDevicesPowerModulesStatusesByDevice", + "tags": ["organizations", "configure", "configTemplates"], + "operation": "createOrganizationConfigTemplate", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/powerModules/statuses/byDevice" - - query_params = [ - "perPage", - "startingAfter", - "endingBefore", - "networkIds", - "productTypes", - "serials", - "tags", - "tagsFilterType", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + resource = f"/organizations/{organizationId}/configTemplates" - array_params = [ - "networkIds", - "productTypes", - "serials", - "tags", + body_params = [ + "name", + "timeZone", + "copyFromNetworkId", ] - for k, v in kwargs.items(): - if k.strip() in array_params: - params[f"{k.strip()}[]"] = kwargs[f"{k}"] - params.pop(k.strip()) + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationDevicesPowerModulesStatusesByDevice: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"createOrganizationConfigTemplate: ignoring unrecognized kwargs: {invalid}") - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.post(metadata, resource, payload) - def getOrganizationDevicesProvisioningStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationConfigTemplate(self, organizationId: str, configTemplateId: str): """ - **List the provisioning statuses information for devices in an organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-provisioning-statuses + **Return a single configuration template** + https://developer.cisco.com/meraki/api-v1/#!get-organization-config-template - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - - 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. - - networkIds (array): Optional parameter to filter device by network ID. This filter uses multiple exact matches. - - productTypes (array): Optional parameter to filter device by device product types. This filter uses multiple exact matches. - - serials (array): Optional parameter to filter device by device serial numbers. This filter uses multiple exact matches. - - status (string): An optional parameter to filter devices by the provisioning status. Accepted statuses: unprovisioned, incomplete, complete. - - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). This filter uses multiple exact matches. - - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - configTemplateId (string): Config template ID """ - kwargs.update(locals()) - - if "status" in kwargs: - options = ["complete", "incomplete", "unprovisioned"] - assert kwargs["status"] in options, ( - f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' - ) - if "tagsFilterType" in kwargs: - options = ["withAllTags", "withAnyTags"] - assert kwargs["tagsFilterType"] in options, ( - f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["organizations", "monitor", "devices", "provisioning", "statuses"], - "operation": "getOrganizationDevicesProvisioningStatuses", + "tags": ["organizations", "configure", "configTemplates"], + "operation": "getOrganizationConfigTemplate", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/provisioning/statuses" + configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") + resource = f"/organizations/{organizationId}/configTemplates/{configTemplateId}" - query_params = [ - "perPage", - "startingAfter", - "endingBefore", - "networkIds", - "productTypes", - "serials", - "status", - "tags", - "tagsFilterType", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + return self._session.get(metadata, resource) - array_params = [ - "networkIds", - "productTypes", - "serials", - "tags", + def updateOrganizationConfigTemplate(self, organizationId: str, configTemplateId: str, **kwargs): + """ + **Update a configuration template** + https://developer.cisco.com/meraki/api-v1/#!update-organization-config-template + + - organizationId (string): Organization ID + - configTemplateId (string): Config template ID + - name (string): The name of the configuration template + - timeZone (string): The timezone of the configuration template. For a list of allowed timezones, please see the 'TZ' column in the table in this article. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "configTemplates"], + "operation": "updateOrganizationConfigTemplate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") + resource = f"/organizations/{organizationId}/configTemplates/{configTemplateId}" + + body_params = [ + "name", + "timeZone", ] - for k, v in kwargs.items(): - if k.strip() in array_params: - params[f"{k.strip()}[]"] = kwargs[f"{k}"] - params.pop(k.strip()) + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationDevicesProvisioningStatuses: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"updateOrganizationConfigTemplate: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationConfigTemplate(self, organizationId: str, configTemplateId: str): + """ + **Remove a configuration template** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-config-template + + - organizationId (string): Organization ID + - configTemplateId (string): Config template ID + """ + + metadata = { + "tags": ["organizations", "configure", "configTemplates"], + "operation": "deleteOrganizationConfigTemplate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") + resource = f"/organizations/{organizationId}/configTemplates/{configTemplateId}" + + return self._session.delete(metadata, resource) + + def getOrganizationConfigurationChanges(self, organizationId: str, total_pages=1, direction="prev", **kwargs): + """ + **View the Change Log for your organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-configuration-changes + + - 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" or "prev" (default) page + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 365 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 365 days. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100000. Default is 5000. + - 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. + - networkId (string): Filters on the given network + - adminId (string): Filters on the given Admin + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "configurationChanges"], + "operation": "getOrganizationConfigurationChanges", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/configurationChanges" + + query_params = [ + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + "networkId", + "adminId", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationConfigurationChanges: ignoring unrecognized kwargs: {invalid}") return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationDevices(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the status of every Meraki device in the organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-statuses + **List the devices in an organization that have been assigned to a network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5000. Default is 1000. - 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. - - networkIds (array): Optional parameter to filter devices by network ids. - - serials (array): Optional parameter to filter devices by serials. - - statuses (array): Optional parameter to filter devices by statuses. Valid statuses are ["online", "alerting", "offline", "dormant"]. - - productTypes (array): An optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. - - models (array): Optional parameter to filter devices by models. - - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). - - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - configurationUpdatedAfter (string): Filter results by whether or not the device's configuration has been updated after the given timestamp + - networkIds (array): Optional parameter to filter devices by network. + - productTypes (array): Optional parameter to filter devices by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - tags (array): Optional parameter to filter devices by tags. + - tagsFilterType (string): Optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return networks which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - name (string): Optional parameter to filter devices by name. All returned devices will have a name that contains the search term or is an exact match. + - mac (string): Optional parameter to filter devices by MAC address. All returned devices will have a MAC address that contains the search term or is an exact match. + - serial (string): Optional parameter to filter devices by serial number. All returned devices will have a serial number that contains the search term or is an exact match. + - model (string): Optional parameter to filter devices by model. All returned devices will have a model that contains the search term or is an exact match. + - macs (array): Optional parameter to filter devices by one or more MAC addresses. All returned devices will have a MAC address that is an exact match. + - serials (array): Optional parameter to filter devices by one or more serial numbers. All returned devices will have a serial number that is an exact match. + - sensorMetrics (array): Optional parameter to filter devices by the metrics that they provide. Only applies to sensor devices. + - sensorAlertProfileIds (array): Optional parameter to filter devices by the alert profiles that are bound to them. Only applies to sensor devices. + - models (array): Optional parameter to filter devices by one or more models. All returned devices will have a model that is an exact match. """ kwargs.update(locals()) @@ -4105,33 +4499,42 @@ def getOrganizationDevicesStatuses(self, organizationId: str, total_pages=1, dir ) metadata = { - "tags": ["organizations", "monitor", "devices", "statuses"], - "operation": "getOrganizationDevicesStatuses", + "tags": ["organizations", "configure", "devices"], + "operation": "getOrganizationDevices", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/statuses" + resource = f"/organizations/{organizationId}/devices" query_params = [ "perPage", "startingAfter", "endingBefore", + "configurationUpdatedAfter", "networkIds", - "serials", - "statuses", "productTypes", - "models", "tags", "tagsFilterType", + "name", + "mac", + "serial", + "model", + "macs", + "serials", + "sensorMetrics", + "sensorAlertProfileIds", + "models", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", - "serials", - "statuses", "productTypes", - "models", "tags", + "macs", + "serials", + "sensorMetrics", + "sensorAlertProfileIds", + "models", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4142,38 +4545,63 @@ def getOrganizationDevicesStatuses(self, organizationId: str, total_pages=1, dir 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"getOrganizationDevicesStatuses: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"getOrganizationDevices: ignoring unrecognized kwargs: {invalid}") return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesStatusesOverview(self, organizationId: str, **kwargs): + def getOrganizationDevicesAvailabilities(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Return an overview of current device statuses** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-statuses-overview + **List the availability information for devices in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-availabilities - organizationId (string): Organization ID - - productTypes (array): An optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. - - networkIds (array): An optional parameter to filter device statuses by network. + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter device availabilities by network ID. This filter uses multiple exact matches. + - productTypes (array): Optional parameter to filter device availabilities by device product types. This filter uses multiple exact matches. Valid types are wireless, appliance, switch, camera, cellularGateway, sensor, wirelessController, and campusGateway + - serials (array): Optional parameter to filter device availabilities by device serial numbers. This filter uses multiple exact matches. + - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). This filter uses multiple exact matches. + - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - statuses (array): Optional parameter to filter device availabilities by device status. This filter uses multiple exact matches. """ kwargs.update(locals()) + if "tagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["tagsFilterType"] in options, ( + f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["organizations", "monitor", "devices", "statuses", "overview"], - "operation": "getOrganizationDevicesStatusesOverview", + "tags": ["organizations", "monitor", "devices", "availabilities"], + "operation": "getOrganizationDevicesAvailabilities", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/statuses/overview" + resource = f"/organizations/{organizationId}/devices/availabilities" query_params = [ - "productTypes", + "perPage", + "startingAfter", + "endingBefore", "networkIds", + "productTypes", + "serials", + "tags", + "tagsFilterType", + "statuses", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "productTypes", "networkIds", + "productTypes", + "serials", + "tags", + "statuses", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4184,42 +4612,56 @@ def getOrganizationDevicesStatusesOverview(self, organizationId: str, **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"getOrganizationDevicesStatusesOverview: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"getOrganizationDevicesAvailabilities: ignoring unrecognized kwargs: {invalid}") - return self._session.get(metadata, resource, params) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesSystemMemoryUsageHistoryByInterval( + def getOrganizationDevicesAvailabilitiesChangeHistory( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Return the memory utilization history in kB for devices in the organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-system-memory-usage-history-by-interval + **List the availability history information for devices in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-availabilities-change-history - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 3600, 14400. The default is 300. Interval is calculated if time params are provided. - - networkIds (array): Optional parameter to filter the result set by the included set of network IDs + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. - serials (array): Optional parameter to filter device availabilities history by device serial numbers - - productTypes (array): Optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - productTypes (array): Optional parameter to filter device availabilities history by device product types + - networkIds (array): Optional parameter to filter device availabilities history by network IDs + - statuses (array): Optional parameter to filter device availabilities history by device statuses + - categories (array): Optional parameter to filter device availabilities history by categories of status, reboot, or upgrade + - networkTags (array): Optional parameter to filter device availabilities history by network tags. The filtering is case-sensitive. If tags are included, 'networkTagsFilterType' should also be included (see below). + - networkTagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return networks which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - deviceTags (array): Optional parameter to filter device availabilities history by device tags. The filtering is case-sensitive. If tags are included, 'deviceTagsFilterType' should also be included (see below). + - deviceTagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. """ kwargs.update(locals()) + if "networkTagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["networkTagsFilterType"] in options, ( + f'''"networkTagsFilterType" cannot be "{kwargs["networkTagsFilterType"]}", & must be set to one of: {options}''' + ) + if "deviceTagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["deviceTagsFilterType"] in options, ( + f'''"deviceTagsFilterType" cannot be "{kwargs["deviceTagsFilterType"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["organizations", "monitor", "devices", "system", "memory", "usage", "history", "byInterval"], - "operation": "getOrganizationDevicesSystemMemoryUsageHistoryByInterval", + "tags": ["organizations", "monitor", "devices", "availabilities", "changeHistory"], + "operation": "getOrganizationDevicesAvailabilitiesChangeHistory", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/system/memory/usage/history/byInterval" + resource = f"/organizations/{organizationId}/devices/availabilities/changeHistory" query_params = [ "perPage", @@ -4228,17 +4670,26 @@ def getOrganizationDevicesSystemMemoryUsageHistoryByInterval( "t0", "t1", "timespan", - "interval", - "networkIds", "serials", "productTypes", + "networkIds", + "statuses", + "categories", + "networkTags", + "networkTagsFilterType", + "deviceTags", + "deviceTagsFilterType", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "networkIds", "serials", "productTypes", + "networkIds", + "statuses", + "categories", + "networkTags", + "deviceTags", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4250,15 +4701,2460 @@ def getOrganizationDevicesSystemMemoryUsageHistoryByInterval( 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"getOrganizationDevicesSystemMemoryUsageHistoryByInterval: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationDevicesAvailabilitiesChangeHistory: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationDevicesUplinksAddressesByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationDevicesBootsHistory(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the current uplink addresses for devices in an organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-uplinks-addresses-by-device + **Returns the history of device boots in reverse chronological order (most recent first)** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-boots-history + + - 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 + - t0 (string): The beginning of the timespan for the data. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 730 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 730 days. + - serials (array): Optional parameter to filter device by device serial numbers. This filter uses multiple exact matches. + - productTypes (array): Optional parameter to filter devices by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - mostRecentPerDevice (boolean): If true, only the most recent boot for each device is returned. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'descending'. + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "devices", "boots", "history"], + "operation": "getOrganizationDevicesBootsHistory", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/boots/history" + + query_params = [ + "t0", + "t1", + "timespan", + "serials", + "productTypes", + "mostRecentPerDevice", + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + "productTypes", + ] + 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"getOrganizationDevicesBootsHistory: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesBootsOverviewByDevice(self, organizationId: str, **kwargs): + """ + **Summarizes device reboots across an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-boots-overview-by-device + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - productTypes (array): An optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "boots", "overview", "byDevice"], + "operation": "getOrganizationDevicesBootsOverviewByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/boots/overview/byDevice" + + query_params = [ + "networkIds", + "productTypes", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "productTypes", + ] + 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"getOrganizationDevicesBootsOverviewByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationDevicesCellularDataDevices(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List devices eligible for Cellular Data Management profile assignment in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-devices + + - 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 + - includeAssigned (boolean): Whether to include devices that have already been assigned to a Cellular Data Management Profile + - includedSerials (array): List of device serials to force-include in the response when the devices would otherwise be filtered out. This override is primarily useful for keeping selected devices visible while paging through results. Maximum 1000 serials. + - excludedSerials (array): List of device serials to force-exclude from the response when the devices would otherwise be returned. This override is primarily useful for hiding selected devices while paging through results. Maximum 1000 serials. + - includedProfileIds (array): List of Cellular Data Management Profile IDs to include in the results. Maximum 1000 profile IDs. + - excludedProfileIds (array): List of Cellular Data Management Profile IDs to exclude from the results. Maximum 1000 profile IDs. + - deviceTypes (array): List of device types to filter by. Maximum 1000 device types. + - slots (array): List of SIM slot types that devices must support. Accepted values are sim1, sim2, and esim. Maximum 3 slots. + - name (string): Name of the device to filter by (partial matches allowed) + - serials (array): List of device serials to filter by. Maximum 1000 serials. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "cellular", "data"], + "operation": "getOrganizationDevicesCellularDataDevices", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/devices" + + query_params = [ + "includeAssigned", + "includedSerials", + "excludedSerials", + "includedProfileIds", + "excludedProfileIds", + "deviceTypes", + "slots", + "name", + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "includedSerials", + "excludedSerials", + "includedProfileIds", + "excludedProfileIds", + "deviceTypes", + "slots", + "serials", + ] + 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"getOrganizationDevicesCellularDataDevices: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCellularDataProfiles(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List cellular data management profiles in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-profiles + + - 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 + - profileIds (array): Optional parameter to filter the results by Data Management Profile ID. + - serials (array): Devices to find Cellular Data Management Profiles for. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], + "operation": "getOrganizationDevicesCellularDataProfiles", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles" + + query_params = [ + "profileIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "profileIds", + "serials", + ] + 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"getOrganizationDevicesCellularDataProfiles: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationDevicesCellularDataProfile( + self, organizationId: str, name: str, description: str, rules: list, **kwargs + ): + """ + **Add a cellular data management profile to this organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-cellular-data-profile + + - organizationId (string): Organization ID + - name (string): Name of the profile to be added. This must be unique. + - description (string): Description of the profile to be added. + - rules (array): The rules associated with this profile. At least one rule and no more than two rules may be defined for a profile. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], + "operation": "createOrganizationDevicesCellularDataProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles" + + body_params = [ + "name", + "description", + "rules", + ] + 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"createOrganizationDevicesCellularDataProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationDevicesCellularDataProfilesAssignments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List Cellular Data Management Profile assignments in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-profiles-assignments + + - 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 + - profileIds (array): Optional parameter to find assignments by Profile IDs. Maximum 1000 profile IDs. + - serials (array): Optional parameter to find assignments by Device Serials. Maximum 1000 serials. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles", "assignments"], + "operation": "getOrganizationDevicesCellularDataProfilesAssignments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/assignments" + + query_params = [ + "profileIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "profileIds", + "serials", + ] + 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"getOrganizationDevicesCellularDataProfilesAssignments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def batchOrganizationDevicesCellularDataProfilesAssignmentsCreate(self, organizationId: str, items: list, **kwargs): + """ + **Assign devices to a Cellular Data Management Profile in batch** + https://developer.cisco.com/meraki/api-v1/#!batch-organization-devices-cellular-data-profiles-assignments-create + + - organizationId (string): Organization ID + - items (array): List of device-to-profile assignments to create. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles", "assignments"], + "operation": "batchOrganizationDevicesCellularDataProfilesAssignmentsCreate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/assignments/batchCreate" + + 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"batchOrganizationDevicesCellularDataProfilesAssignmentsCreate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def bulkOrganizationDevicesCellularDataProfilesAssignmentsDelete(self, organizationId: str, items: list, **kwargs): + """ + **Unassign devices from a Cellular Data Management Profile in batch** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-cellular-data-profiles-assignments-delete + + - organizationId (string): Organization ID + - items (array): List of device-to-profile assignments to remove. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles", "assignments"], + "operation": "bulkOrganizationDevicesCellularDataProfilesAssignmentsDelete", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/assignments/bulkDelete" + + 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"bulkOrganizationDevicesCellularDataProfilesAssignmentsDelete: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationDevicesCellularDataProfile(self, organizationId: str, rules: list, profileId: str, **kwargs): + """ + **Update a Cellular Data Management Profile** + https://developer.cisco.com/meraki/api-v1/#!update-organization-devices-cellular-data-profile + + - organizationId (string): Organization ID + - rules (array): The rules associated with this profile. At least one rule and no more than two rules may be defined for a profile. + - profileId (string): ID of the profile. + - description (string): New description of the profile. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], + "operation": "updateOrganizationDevicesCellularDataProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + profileId = urllib.parse.quote(str(profileId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/{profileId}" + + body_params = [ + "profileId", + "description", + "rules", + ] + 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"updateOrganizationDevicesCellularDataProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationDevicesCellularDataProfile(self, organizationId: str, profileId: str): + """ + **Delete a cellular data management profile from this organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-devices-cellular-data-profile + + - organizationId (string): Organization ID + - profileId (string): Profile ID + """ + + metadata = { + "tags": ["organizations", "configure", "devices", "cellular", "data", "profiles"], + "operation": "deleteOrganizationDevicesCellularDataProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + profileId = urllib.parse.quote(str(profileId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/profiles/{profileId}" + + return self._session.delete(metadata, resource) + + def getOrganizationDevicesCellularDataUsageByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List current cellular data usage for devices in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-usage-by-device + + - 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 + - serials (array): Filter the results by device serials. Maximum 1000 serials. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "cellular", "data", "usage", "byDevice"], + "operation": "getOrganizationDevicesCellularDataUsageByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/usage/byDevice" + + query_params = [ + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCellularDataUsageByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCellularDataUsageHistoryByDeviceByInterval( + self, organizationId: str, serials: list, total_pages=1, direction="next", **kwargs + ): + """ + **List historical cellular data usage grouped by device and interval in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-data-usage-history-by-device-by-interval + + - organizationId (string): Organization ID + - serials (array): Required parameter to filter the results by device serials. Maximum 10 serials. + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10. Default is 5. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 366 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 86400. Interval is calculated if time params are provided. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "cellular", "data", "usage", "history", "byDevice", "byInterval"], + "operation": "getOrganizationDevicesCellularDataUsageHistoryByDeviceByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/data/usage/history/byDevice/byInterval" + + query_params = [ + "serials", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCellularDataUsageHistoryByDeviceByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCellularGeolocations(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the latest cellular geolocation telemetry for devices in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-geolocations + + - 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 + - serials (array): Optional parameter to filter the results by device serials. Maximum 1000 serials. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "cellular", "geolocations"], + "operation": "getOrganizationDevicesCellularGeolocations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/geolocations" + + query_params = [ + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCellularGeolocations: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCellularUplinksBandsByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the latest cellular uplink signal information for devices in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-uplinks-bands-by-device + + - 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 + - serials (array): Optional parameter to filter the results by device serials. Maximum 1000 serials. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "cellular", "uplinks", "bands", "byDevice"], + "operation": "getOrganizationDevicesCellularUplinksBandsByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/uplinks/bands/byDevice" + + query_params = [ + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCellularUplinksBandsByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCellularUplinksTowersByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the latest cellular tower information for devices in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cellular-uplinks-towers-by-device + + - 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 + - serials (array): Optional parameter to filter the results by device serials. Maximum 1000 serials. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "cellular", "uplinks", "towers", "byDevice"], + "operation": "getOrganizationDevicesCellularUplinksTowersByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cellular/uplinks/towers/byDevice" + + query_params = [ + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCellularUplinksTowersByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCliConfigs(self, organizationId: str, serials: list, total_pages=1, direction="next", **kwargs): + """ + **Retrieve the history of running configurations for IOS-XE devices** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cli-configs + + - organizationId (string): Organization ID + - serials (array): Device serials to include in the response + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 20. + - 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. + - isFavorite (boolean): Whether to return only favorited configs + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "cli", "configs"], + "operation": "getOrganizationDevicesCliConfigs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cli/configs" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "serials", + "isFavorite", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCliConfigs: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesCliConfigsDetails( + self, organizationId: str, configId: str, serials: list, total_pages=1, direction="next", **kwargs + ): + """ + **Retrieve the full contents for a given IOS-XE device configuration** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-cli-configs-details + + - organizationId (string): Organization ID + - configId (string): Config ID + - serials (array): Device serials to use when locating the config record + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5. Default is 5. + - 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": ["organizations", "configure", "devices", "cli", "configs", "details"], + "operation": "getOrganizationDevicesCliConfigsDetails", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cli/configs/details" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "configId", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationDevicesCliConfigsDetails: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getDeviceConfigRestores(self, organizationId: str, serials: list, **kwargs): + """ + **Return restore status entries for IOS-XE device configurations** + https://developer.cisco.com/meraki/api-v1/#!get-device-config-restores + + - organizationId (string): Organization ID + - serials (array): Device serial numbers + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "cli", "configs", "restores"], + "operation": "getDeviceConfigRestores", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/cli/configs/restores" + + query_params = [ + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getDeviceConfigRestores: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def createOrganizationDevicesControllerMigration(self, organizationId: str, serials: list, target: str, **kwargs): + """ + **Migrate devices to another controller or management mode** + https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-controller-migration + + - organizationId (string): Organization ID + - serials (array): A list of Meraki Serials to migrate + - target (string): The controller or management mode to which the devices will be migrated + """ + + kwargs = locals() + + if "target" in kwargs: + options = ["wirelessController"] + assert kwargs["target"] in options, ( + f'''"target" cannot be "{kwargs["target"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "devices", "controller", "migrations"], + "operation": "createOrganizationDevicesControllerMigration", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/controller/migrations" + + body_params = [ + "serials", + "target", + ] + 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"createOrganizationDevicesControllerMigration: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationDevicesControllerMigrations(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Retrieve device migration statuses in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-controller-migrations + + - 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 + - serials (array): A list of Meraki Serials for which to retrieve migrations + - networkIds (array): Filter device migrations by network IDs + - target (string): Filter device migrations by target destination + - 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. + """ + + kwargs.update(locals()) + + if "target" in kwargs: + options = ["wirelessController"] + assert kwargs["target"] in options, ( + f'''"target" cannot be "{kwargs["target"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "devices", "controller", "migrations"], + "operation": "getOrganizationDevicesControllerMigrations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/controller/migrations" + + query_params = [ + "serials", + "networkIds", + "target", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + "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"getOrganizationDevicesControllerMigrations: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def bulkUpdateOrganizationDevicesDetails(self, organizationId: str, serials: list, details: list, **kwargs): + """ + **Updating device details (currently only used for Catalyst devices)** + https://developer.cisco.com/meraki/api-v1/#!bulk-update-organization-devices-details + + - organizationId (string): Organization ID + - serials (array): A list of serials of devices to update + - details (array): An array of details + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "details", "bulkUpdate"], + "operation": "bulkUpdateOrganizationDevicesDetails", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/details/bulkUpdate" + + body_params = [ + "serials", + "details", + ] + 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"bulkUpdateOrganizationDevicesDetails: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationDevicesMemoryByDevice(self, organizationId: str, networkIds: list, productTypes: list, **kwargs): + """ + **Summarizes memory status across devices of a given network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-memory-by-device + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - productTypes (array): Parameter to filter device availabilities by device product types. This filter uses multiple exact matches. + - usageThreshold (number): Threshold of device memory utilization expressed as a percent. Filters out all devices below this value. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 1 hour and be less than or equal to 7 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "memory", "byDevice"], + "operation": "getOrganizationDevicesMemoryByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/memory/byDevice" + + query_params = [ + "networkIds", + "productTypes", + "usageThreshold", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "productTypes", + ] + 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"getOrganizationDevicesMemoryByDevice: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getOrganizationDevicesOverviewByModel(self, organizationId: str, **kwargs): + """ + **Lists the count for each device model** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-overview-by-model + + - organizationId (string): Organization ID + - models (array): Optional parameter to filter devices by one or more models. All returned devices will have a model that is an exact match. + - networkIds (array): Optional parameter to filter devices by networkId. + - productTypes (array): Optional parameter to filter device by device product types. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "overview", "byModel"], + "operation": "getOrganizationDevicesOverviewByModel", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/overview/byModel" + + query_params = [ + "models", + "networkIds", + "productTypes", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "models", + "networkIds", + "productTypes", + ] + 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"getOrganizationDevicesOverviewByModel: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationDevicesPacketCaptureCaptures(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List Packet Captures** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-packet-capture-captures + + - 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 + - captureIds (array): Return the packet captures of the specified capture ids + - networkIds (array): Return the packet captures of the specified network(s) + - serials (array): Return the packet captures of the specified device(s) + - process (array): Return the packet captures of the specified process + - captureStatus (array): Return the packet captures of the specified capture status + - name (array): Return the packet captures matching the specified name + - clientMac (array): Return the packet captures matching the specified client macs + - notes (string): Return the packet captures matching the specified notes + - deviceName (string): Return the packet captures matching the specified device name + - adminName (string): Return the packet captures matching the admin name + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 365 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 365 days. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'descending'. + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], + "operation": "getOrganizationDevicesPacketCaptureCaptures", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures" + + query_params = [ + "captureIds", + "networkIds", + "serials", + "process", + "captureStatus", + "name", + "clientMac", + "notes", + "deviceName", + "adminName", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "captureIds", + "networkIds", + "serials", + "process", + "captureStatus", + "name", + "clientMac", + ] + 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"getOrganizationDevicesPacketCaptureCaptures: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationDevicesPacketCaptureCapture(self, organizationId: str, serials: list, name: str, **kwargs): + """ + **Perform a packet capture on a device and store in Meraki Cloud** + https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-packet-capture-capture + + - organizationId (string): Organization ID + - serials (array): The serial(s) of the device(s) + - name (string): Name of packet capture file + - outputType (string): Output type of packet capture file. Possible values: text, pcap, cloudshark, or upload_to_cloud + - destination (string): Destination of packet capture file. Possible values: [upload_to_cloud] + - ports (string): Ports of packet capture file, comma-separated + - notes (string): Reason for taking the packet capture + - duration (integer): Duration in seconds of packet capture + - filterExpression (string): Filter expression for packet capture + - interface (string): Interface of the device + - advanced (object): Advanced filters for IOSXE devices (supported for Campus Gateway devices only) + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], + "operation": "createOrganizationDevicesPacketCaptureCapture", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures" + + body_params = [ + "serials", + "name", + "outputType", + "destination", + "ports", + "notes", + "duration", + "filterExpression", + "interface", + "advanced", + ] + 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"createOrganizationDevicesPacketCaptureCapture: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def bulkOrganizationDevicesPacketCaptureCapturesCreate(self, organizationId: str, devices: list, name: str, **kwargs): + """ + **Perform a packet capture on multiple devices and store in Meraki Cloud.** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-packet-capture-captures-create + + - organizationId (string): Organization ID + - devices (array): Device details (maximum of 20 devices allowed) + - name (string): Name of packet capture file + - notes (string): Reason for capture + - duration (integer): Duration of the capture in seconds + - filterExpression (string): Filter expression for the capture + - advanced (object): Advanced capture options (optional) + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], + "operation": "bulkOrganizationDevicesPacketCaptureCapturesCreate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures/bulkCreate" + + body_params = [ + "devices", + "notes", + "duration", + "filterExpression", + "name", + "advanced", + ] + 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"bulkOrganizationDevicesPacketCaptureCapturesCreate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def bulkOrganizationDevicesPacketCaptureCapturesDelete(self, organizationId: str, captureIds: list, **kwargs): + """ + **BulkDelete packet captures from cloud** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-packet-capture-captures-delete + + - organizationId (string): Organization ID + - captureIds (array): Delete the packet captures of the specified capture ids + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], + "operation": "bulkOrganizationDevicesPacketCaptureCapturesDelete", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures/bulkDelete" + + body_params = [ + "captureIds", + ] + 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"bulkOrganizationDevicesPacketCaptureCapturesDelete: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def deleteOrganizationDevicesPacketCaptureCapture(self, organizationId: str, captureId: str): + """ + **Delete a single packet capture from cloud using captureId** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-devices-packet-capture-capture + + - organizationId (string): Organization ID + - captureId (string): Capture ID + """ + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], + "operation": "deleteOrganizationDevicesPacketCaptureCapture", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + captureId = urllib.parse.quote(str(captureId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures/{captureId}" + + return self._session.delete(metadata, resource) + + def generateOrganizationDevicesPacketCaptureCaptureDownloadUrl(self, organizationId: str, captureId: str): + """ + **Get presigned download URL for given packet capture id** + https://developer.cisco.com/meraki/api-v1/#!generate-organization-devices-packet-capture-capture-download-url + + - organizationId (string): Organization ID + - captureId (string): Capture ID + """ + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures", "downloadUrl"], + "operation": "generateOrganizationDevicesPacketCaptureCaptureDownloadUrl", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + captureId = urllib.parse.quote(str(captureId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures/{captureId}/downloadUrl/generate" + + return self._session.post(metadata, resource) + + def stopOrganizationDevicesPacketCaptureCapture(self, organizationId: str, captureId: str, serials: list, **kwargs): + """ + **Stop a specific packet capture (not supported for Catalyst devices)** + https://developer.cisco.com/meraki/api-v1/#!stop-organization-devices-packet-capture-capture + + - organizationId (string): Organization ID + - captureId (string): Capture ID + - serials (array): The serial(s) of the device(s) to stop the capture on + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "captures"], + "operation": "stopOrganizationDevicesPacketCaptureCapture", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + captureId = urllib.parse.quote(str(captureId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/captures/{captureId}/stop" + + body_params = [ + "serials", + ] + 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"stopOrganizationDevicesPacketCaptureCapture: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationDevicesPacketCaptureOpportunisticByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the Opportunistic Pcap settings of an organization by network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-packet-capture-opportunistic-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 results by network. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'descending'. + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "opportunistic", "byNetwork"], + "operation": "getOrganizationDevicesPacketCaptureOpportunisticByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/opportunistic/byNetwork" + + query_params = [ + "networkIds", + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + ] + 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"getOrganizationDevicesPacketCaptureOpportunisticByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesPacketCaptureSchedules(self, organizationId: str, **kwargs): + """ + **List the Packet Capture Schedules** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-packet-capture-schedules + + - organizationId (string): Organization ID + - scheduleIds (array): Return the packet captures schedules of the specified packet capture schedule ids + - networkIds (array): Return the scheduled packet captures of the specified network(s) + - deviceIds (array): Return the scheduled packet captures of the specified device(s) + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], + "operation": "getOrganizationDevicesPacketCaptureSchedules", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules" + + query_params = [ + "scheduleIds", + "networkIds", + "deviceIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "scheduleIds", + "networkIds", + "deviceIds", + ] + 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"getOrganizationDevicesPacketCaptureSchedules: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def createOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, devices: list, **kwargs): + """ + **Create a schedule for packet capture** + https://developer.cisco.com/meraki/api-v1/#!create-organization-devices-packet-capture-schedule + + - organizationId (string): Organization ID + - devices (array): device details + - name (string): Name of the packet capture file + - notes (string): Reason for capture + - duration (integer): Duration of the capture in seconds + - filterExpression (string): Filter expression for the capture + - enabled (boolean): Enable or disable the schedule + - schedule (object): Schedule details + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], + "operation": "createOrganizationDevicesPacketCaptureSchedule", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules" + + body_params = [ + "devices", + "name", + "notes", + "duration", + "filterExpression", + "enabled", + "schedule", + ] + 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"createOrganizationDevicesPacketCaptureSchedule: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def bulkOrganizationDevicesPacketCaptureSchedulesDelete(self, organizationId: str, scheduleIds: list, **kwargs): + """ + **Delete packet capture schedules** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-packet-capture-schedules-delete + + - organizationId (string): Organization ID + - scheduleIds (array): Delete the packet capture schedules of the specified schedule ids + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], + "operation": "bulkOrganizationDevicesPacketCaptureSchedulesDelete", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/bulkDelete" + + body_params = [ + "scheduleIds", + ] + 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"bulkOrganizationDevicesPacketCaptureSchedulesDelete: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def reorderOrganizationDevicesPacketCaptureSchedules(self, organizationId: str, order: list, **kwargs): + """ + **Bulk update priorities of pcap schedules** + https://developer.cisco.com/meraki/api-v1/#!reorder-organization-devices-packet-capture-schedules + + - organizationId (string): Organization ID + - order (array): Array of schedule IDs and their priorities to reorder. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], + "operation": "reorderOrganizationDevicesPacketCaptureSchedules", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/reorder" + + body_params = [ + "order", + ] + 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"reorderOrganizationDevicesPacketCaptureSchedules: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, scheduleId: str, devices: list, **kwargs): + """ + **Update a schedule for packet capture** + https://developer.cisco.com/meraki/api-v1/#!update-organization-devices-packet-capture-schedule + + - organizationId (string): Organization ID + - scheduleId (string): Schedule ID + - devices (array): device details + - name (string): Name of the packet capture file + - notes (string): Reason for capture + - duration (integer): Duration of the capture in seconds + - filterExpression (string): Filter expression for the capture + - enabled (boolean): Enable or disable the schedule + - schedule (object): Schedule details + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], + "operation": "updateOrganizationDevicesPacketCaptureSchedule", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + scheduleId = urllib.parse.quote(str(scheduleId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/{scheduleId}" + + body_params = [ + "devices", + "name", + "notes", + "duration", + "filterExpression", + "enabled", + "schedule", + ] + 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"updateOrganizationDevicesPacketCaptureSchedule: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationDevicesPacketCaptureSchedule(self, organizationId: str, scheduleId: str): + """ + **Delete schedule from cloud** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-devices-packet-capture-schedule + + - organizationId (string): Organization ID + - scheduleId (string): Delete the capture schedules of the specified capture schedule id + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCapture", "schedules"], + "operation": "deleteOrganizationDevicesPacketCaptureSchedule", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + scheduleId = urllib.parse.quote(str(scheduleId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCapture/schedules/{scheduleId}" + + return self._session.delete(metadata, resource) + + def tasksOrganizationDevicesPacketCapture(self, organizationId: str, packetId: str, task: str, **kwargs): + """ + **Enqueues a task for a specific packet capture** + https://developer.cisco.com/meraki/api-v1/#!tasks-organization-devices-packet-capture + + - organizationId (string): Organization ID + - packetId (string): Packet ID + - task (string): Type of task to enqueue. It can be one of: ["analysis", "reasoning", "summary", "highlights", "title", "flow"] + - networkId (string): Parameter to validate authorization by network access + """ + + kwargs.update(locals()) + + if "task" in kwargs: + options = ["analysis", "flow", "highlights", "reasoning", "summary", "title"] + assert kwargs["task"] in options, f'''"task" cannot be "{kwargs["task"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCaptures"], + "operation": "tasksOrganizationDevicesPacketCapture", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + packetId = urllib.parse.quote(str(packetId), safe="") + resource = f"/organizations/{organizationId}/devices/packetCaptures/{packetId}/tasks" + + body_params = [ + "networkId", + "task", + ] + 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"tasksOrganizationDevicesPacketCapture: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationDevicesPacketCaptureTask(self, organizationId: str, packetId: str, id: str, **kwargs): + """ + **Retrieves packet capture analysis result for a specific packet capture task.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-packet-capture-task + + - organizationId (string): Organization ID + - packetId (string): Packet ID + - id (string): ID + - networkId (string): Optional parameter to validate authorization by network access + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "packetCaptures", "tasks"], + "operation": "getOrganizationDevicesPacketCaptureTask", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + packetId = urllib.parse.quote(str(packetId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/devices/packetCaptures/{packetId}/tasks/{id}" + + query_params = [ + "networkId", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationDevicesPacketCaptureTask: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def bulkOrganizationDevicesPlacementPositionsUpdate(self, organizationId: str, serials: list, **kwargs): + """ + **Bulk update the attributes related to positions for provided devices** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-devices-placement-positions-update + + - organizationId (string): Organization ID + - serials (array): List of device serials on a floor plan to update + - height (object): Height of the devices on the floor plan + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "placement", "positions"], + "operation": "bulkOrganizationDevicesPlacementPositionsUpdate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/placement/positions/bulkUpdate" + + body_params = [ + "serials", + "height", + ] + 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"bulkOrganizationDevicesPlacementPositionsUpdate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationDevicesPowerModulesStatusesByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the most recent status information for power modules in rackmount MX and MS devices that support them** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-power-modules-statuses-by-device + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter device availabilities by network ID. This filter uses multiple exact matches. + - productTypes (array): Optional parameter to filter device availabilities by device product types. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter device availabilities by device serial numbers. This filter uses multiple exact matches. + - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). This filter uses multiple exact matches. + - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + """ + + kwargs.update(locals()) + + if "tagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["tagsFilterType"] in options, ( + f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "monitor", "devices", "powerModules", "statuses", "byDevice"], + "operation": "getOrganizationDevicesPowerModulesStatusesByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/powerModules/statuses/byDevice" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "productTypes", + "serials", + "tags", + "tagsFilterType", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "productTypes", + "serials", + "tags", + ] + 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"getOrganizationDevicesPowerModulesStatusesByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesProvisioningStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the provisioning statuses information for devices in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-provisioning-statuses + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter device by network ID. This filter uses multiple exact matches. + - productTypes (array): Optional parameter to filter device by device product types. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter device by device serial numbers. This filter uses multiple exact matches. + - status (string): An optional parameter to filter devices by the provisioning status. Accepted statuses: unprovisioned, incomplete, complete. + - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). This filter uses multiple exact matches. + - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + """ + + kwargs.update(locals()) + + if "status" in kwargs: + options = ["complete", "incomplete", "unprovisioned"] + assert kwargs["status"] in options, ( + f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' + ) + if "tagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["tagsFilterType"] in options, ( + f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "monitor", "devices", "provisioning", "statuses"], + "operation": "getOrganizationDevicesProvisioningStatuses", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/provisioning/statuses" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "productTypes", + "serials", + "status", + "tags", + "tagsFilterType", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "productTypes", + "serials", + "tags", + ] + 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"getOrganizationDevicesProvisioningStatuses: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesSoftwareUpdatesOverviewsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns details about software updates for networks within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-software-updates-overviews-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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 30. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'ascending'. + - sortKey (string): Specify key to order the list of networks. + - configSource (string): Limit the list of networks to those that contain devices with the specified config source + - networkIds (array): Limit the list of networks to those that match the provided network IDs + - networkGroupIds (array): Limit the list of networks to those that belong to one of the provided network group IDs. + - productTypes (array): Limit the list of product types included for each network + - networkName (string): Limit the list of networks to those whose name contains the given search string. + - versionIds (array): Limit the list of networks to those that are currently on one of the provided version IDs. + - firmwareStatus (string): Limit the list of networks to those whose current firmware version has the specified end-of-support status. + - firmwareType (string): Limit the list of networks to those whose current firmware version has the specified release type. + - upgradeDependencyIds (array): Limit the list of networks to those that belong to one of the provided upgrade dependencies. + - upgradeAvailable (boolean): Limit the list of networks by upgrade availability. + - templateRole (string): Limit the list of networks by config template role: non-template only, templates only, or templates and bound networks. + """ + + kwargs.update(locals()) + + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + if "sortKey" in kwargs: + options = [ + "availability", + "currentVersion", + "firmwareStatus", + "firmwareType", + "lastUpgrade", + "networkGroup", + "networkName", + "networkType", + "scheduledTime", + "scheduledUpgradeVersion", + "upgradeDependency", + ] + assert kwargs["sortKey"] in options, ( + f'''"sortKey" cannot be "{kwargs["sortKey"]}", & must be set to one of: {options}''' + ) + if "configSource" in kwargs: + options = ["cloud", "local"] + assert kwargs["configSource"] in options, ( + f'''"configSource" cannot be "{kwargs["configSource"]}", & must be set to one of: {options}''' + ) + if "firmwareStatus" in kwargs: + options = ["critical", "good", "warning"] + assert kwargs["firmwareStatus"] in options, ( + f'''"firmwareStatus" cannot be "{kwargs["firmwareStatus"]}", & must be set to one of: {options}''' + ) + if "firmwareType" in kwargs: + options = ["beta", "candidate", "stable"] + assert kwargs["firmwareType"] in options, ( + f'''"firmwareType" cannot be "{kwargs["firmwareType"]}", & must be set to one of: {options}''' + ) + if "templateRole" in kwargs: + options = ["bound-templates", "non-template", "templates"] + assert kwargs["templateRole"] in options, ( + f'''"templateRole" cannot be "{kwargs["templateRole"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "devices", "software", "updates", "overviews", "byNetwork"], + "operation": "getOrganizationDevicesSoftwareUpdatesOverviewsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/software/updates/overviews/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + "sortKey", + "configSource", + "networkIds", + "networkGroupIds", + "productTypes", + "networkName", + "versionIds", + "firmwareStatus", + "firmwareType", + "upgradeDependencyIds", + "upgradeAvailable", + "templateRole", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "networkGroupIds", + "productTypes", + "versionIds", + "upgradeDependencyIds", + ] + 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"getOrganizationDevicesSoftwareUpdatesOverviewsByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the status of every Meraki device in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-statuses + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter devices by network ids. + - serials (array): Optional parameter to filter devices by serials. + - statuses (array): Optional parameter to filter devices by statuses. Valid statuses are ["online", "alerting", "offline", "dormant"]. + - productTypes (array): An optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - models (array): Optional parameter to filter devices by models. + - tags (array): An optional parameter to filter devices by tags. The filtering is case-sensitive. If tags are included, 'tagsFilterType' should also be included (see below). + - tagsFilterType (string): An optional parameter of value 'withAnyTags' or 'withAllTags' to indicate whether to return devices which contain ANY or ALL of the included tags. If no type is included, 'withAnyTags' will be selected. + - configurationUpdatedAfter (string): Optional parameter to filter results by whether or not the device's configuration has been updated after the given timestamp + """ + + kwargs.update(locals()) + + if "tagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["tagsFilterType"] in options, ( + f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "monitor", "devices", "statuses"], + "operation": "getOrganizationDevicesStatuses", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/statuses" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + "statuses", + "productTypes", + "models", + "tags", + "tagsFilterType", + "configurationUpdatedAfter", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "statuses", + "productTypes", + "models", + "tags", + ] + 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"getOrganizationDevicesStatuses: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesStatusesOverview(self, organizationId: str, **kwargs): + """ + **Return an overview of current device statuses** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-statuses-overview + + - organizationId (string): Organization ID + - productTypes (array): An optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - networkIds (array): An optional parameter to filter device statuses by network. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "statuses", "overview"], + "operation": "getOrganizationDevicesStatusesOverview", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/statuses/overview" + + query_params = [ + "productTypes", + "networkIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "productTypes", + "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"getOrganizationDevicesStatusesOverview: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationDevicesSyslogServersByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Returns syslog servers configured for the networks within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-syslog-servers-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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - networkIds (array): IDs of the networks for which to fetch syslog servers; suggested maximum array size is 100 + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "syslog", "servers", "byNetwork"], + "operation": "getOrganizationDevicesSyslogServersByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/syslog/servers/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationDevicesSyslogServersByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesSyslogServersRolesByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns roles that can be assigned to a syslog server for a given network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-syslog-servers-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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - networkIds (array): IDs of the networks for which to fetch valid syslog server roles; suggested maximum array size is 100 + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "devices", "syslog", "servers", "roles", "byNetwork"], + "operation": "getOrganizationDevicesSyslogServersRolesByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/syslog/servers/roles/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationDevicesSyslogServersRolesByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesSystemMemoryUsageHistoryByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Return the memory utilization history in kB for devices in the organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-system-memory-usage-history-by-interval + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 3600, 14400. The default is 300. Interval is calculated if time params are provided. + - networkIds (array): Optional parameter to filter the result set by the included set of network IDs + - serials (array): Optional parameter to filter device availabilities history by device serial numbers + - productTypes (array): Optional parameter to filter device statuses by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "system", "memory", "usage", "history", "byInterval"], + "operation": "getOrganizationDevicesSystemMemoryUsageHistoryByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/system/memory/usage/history/byInterval" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "serials", + "productTypes", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "productTypes", + ] + 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"getOrganizationDevicesSystemMemoryUsageHistoryByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesTopologyInterfaces(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List topology interfaces in an organization, including layer 2 and layer 3 metadata when available.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-topology-interfaces + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter interfaces by network ID. This filter uses multiple exact matches. Query array syntax follows the standard bracket form, for example: networkIds[]=L_1234&networkIds[]=L_5678. + - serials (array): Optional parameter to filter interfaces by device serial. This filter uses multiple exact matches. Query array syntax follows the standard bracket form, for example: serials[]=Q234-ABCD-5678&serials[]=Q234-ABCD-9012. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "devices", "topology", "interfaces"], + "operation": "getOrganizationDevicesTopologyInterfaces", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/topology/interfaces" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationDevicesTopologyInterfaces: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesTopologyL2Links(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List layer 2 topology links originating from devices in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-topology-l-2-links + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 500. Default is 500. + - 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": ["organizations", "monitor", "devices", "topology", "l2", "links"], + "operation": "getOrganizationDevicesTopologyL2Links", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/topology/l2/links" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationDevicesTopologyL2Links: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesTopologyNodesDiscovered(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List topology nodes discovered by LLDP/CDP from devices in an organization, including reported metadata when available.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-topology-nodes-discovered + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 500. Default is 500. + - 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": ["organizations", "monitor", "devices", "topology", "nodes", "discovered"], + "operation": "getOrganizationDevicesTopologyNodesDiscovered", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/topology/nodes/discovered" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationDevicesTopologyNodesDiscovered: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesUplinksAddressesByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the current uplink addresses for devices in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-uplinks-addresses-by-device - 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 @@ -4312,49 +7208,327 @@ def getOrganizationDevicesUplinksAddressesByDevice(self, organizationId: str, to params.pop(k.strip()) if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationDevicesUplinksAddressesByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationDevicesUplinksLossAndLatency(self, organizationId: str, **kwargs): + """ + **Return the uplink loss and latency for every MX in the organization from at latest 2 minutes ago** + https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-uplinks-loss-and-latency + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 60 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 5 minutes after t0. The latest possible time that t1 can be is 2 minutes into the past. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 5 minutes. The default is 5 minutes. + - uplink (string): Optional filter for a specific WAN uplink. Valid uplinks are wan1, wan2, wan3, cellular. Default will return all uplinks. + - ip (string): Optional filter for a specific destination IP. Default will return all destination IPs. + """ + + kwargs.update(locals()) + + if "uplink" in kwargs: + options = ["cellular", "wan1", "wan2", "wan3"] + assert kwargs["uplink"] in options, ( + f'''"uplink" cannot be "{kwargs["uplink"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "monitor", "devices", "uplinks", "uplinksLossAndLatency"], + "operation": "getOrganizationDevicesUplinksLossAndLatency", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/devices/uplinksLossAndLatency" + + query_params = [ + "t0", + "t1", + "timespan", + "uplink", + "ip", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationDevicesUplinksLossAndLatency: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationEarlyAccessFeatures(self, organizationId: str): + """ + **List the available early access features for organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-early-access-features + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "earlyAccess", "features"], + "operation": "getOrganizationEarlyAccessFeatures", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/earlyAccess/features" + + return self._session.get(metadata, resource) + + def getOrganizationEarlyAccessFeaturesOptIns(self, organizationId: str): + """ + **List the early access feature opt-ins for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-early-access-features-opt-ins + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], + "operation": "getOrganizationEarlyAccessFeaturesOptIns", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/earlyAccess/features/optIns" + + return self._session.get(metadata, resource) + + def createOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, shortName: str, **kwargs): + """ + **Create a new early access feature opt-in for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-early-access-features-opt-in + + - organizationId (string): Organization ID + - shortName (string): Short name of the early access feature + - limitScopeToNetworks (array): A list of network IDs to apply the opt-in to + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], + "operation": "createOrganizationEarlyAccessFeaturesOptIn", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/earlyAccess/features/optIns" + + body_params = [ + "shortName", + "limitScopeToNetworks", + ] + 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"createOrganizationEarlyAccessFeaturesOptIn: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str): + """ + **Show an early access feature opt-in for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-early-access-features-opt-in + + - organizationId (string): Organization ID + - optInId (string): Opt in ID + """ + + metadata = { + "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], + "operation": "getOrganizationEarlyAccessFeaturesOptIn", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + optInId = urllib.parse.quote(str(optInId), safe="") + resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" + + return self._session.get(metadata, resource) + + def updateOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str, **kwargs): + """ + **Update an early access feature opt-in for an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-early-access-features-opt-in + + - organizationId (string): Organization ID + - optInId (string): Opt in ID + - limitScopeToNetworks (array): A list of network IDs to apply the opt-in to + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], + "operation": "updateOrganizationEarlyAccessFeaturesOptIn", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + optInId = urllib.parse.quote(str(optInId), safe="") + resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" + + body_params = [ + "limitScopeToNetworks", + ] + 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"updateOrganizationEarlyAccessFeaturesOptIn: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str): + """ + **Delete an early access feature opt-in** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-early-access-features-opt-in + + - organizationId (string): Organization ID + - optInId (string): Opt in ID + """ + + metadata = { + "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], + "operation": "deleteOrganizationEarlyAccessFeaturesOptIn", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + optInId = urllib.parse.quote(str(optInId), safe="") + resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" + + return self._session.delete(metadata, resource) + + def updateOrganizationExtensionsSdwanmanagerInterconnect( + self, organizationId: str, interconnectId: str, name: str, status: str, **kwargs + ): + """ + **Update name and status of an Interconnect** + https://developer.cisco.com/meraki/api-v1/#!update-organization-extensions-sdwanmanager-interconnect + + - organizationId (string): Organization ID + - interconnectId (string): Interconnect ID + - name (string): Interconnect name + - status (string): Interconnect status + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "extensions", "sdwanmanager", "interconnects"], + "operation": "updateOrganizationExtensionsSdwanmanagerInterconnect", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + interconnectId = urllib.parse.quote(str(interconnectId), safe="") + resource = f"/organizations/{organizationId}/extensions/sdwanmanager/interconnects/{interconnectId}" + + body_params = [ + "name", + "status", + ] + 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"updateOrganizationExtensionsSdwanmanagerInterconnect: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def getOrganizationExtensionsThousandEyesNetworks(self, organizationId: str): + """ + **List the ThousandEyes agent configurations under this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-extensions-thousand-eyes-networks + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "extensions", "thousandEyes", "networks"], + "operation": "getOrganizationExtensionsThousandEyesNetworks", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks" + + return self._session.get(metadata, resource) + + def createOrganizationExtensionsThousandEyesNetwork(self, organizationId: str, enabled: bool, networkId: str, **kwargs): + """ + **Add a ThousandEyes agent for this network** + https://developer.cisco.com/meraki/api-v1/#!create-organization-extensions-thousand-eyes-network + + - organizationId (string): Organization ID + - enabled (boolean): Whether or not the ThousandEyes agent is enabled for the network. + - networkId (string): Network that will have the ThousandEyes agent installed on. + - tests (array): An array of tests to be created + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "extensions", "thousandEyes", "networks"], + "operation": "createOrganizationExtensionsThousandEyesNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks" + + body_params = [ + "enabled", + "networkId", + "tests", + ] + 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"getOrganizationDevicesUplinksAddressesByDevice: ignoring unrecognized kwargs: {invalid}" + f"createOrganizationExtensionsThousandEyesNetwork: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.post(metadata, resource, payload) - def getOrganizationDevicesUplinksLossAndLatency(self, organizationId: str, **kwargs): + def getOrganizationExtensionsThousandEyesNetworksSupported( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Return the uplink loss and latency for every MX in the organization from at latest 2 minutes ago** - https://developer.cisco.com/meraki/api-v1/#!get-organization-devices-uplinks-loss-and-latency + **List all the networks eligible for ThousandEyes agent activation under this organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-extensions-thousand-eyes-networks-supported - organizationId (string): Organization ID - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 60 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 5 minutes after t0. The latest possible time that t1 can be is 2 minutes into the past. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 5 minutes. The default is 5 minutes. - - uplink (string): Optional filter for a specific WAN uplink. Valid uplinks are wan1, wan2, wan3, cellular. Default will return all uplinks. - - ip (string): Optional filter for a specific destination IP. Default will return all destination IPs. + - 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 + - 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. + - agentInstalled (boolean): Set to true to get only networks with installed ThousandEyes agent; set to false to get networks without agents. """ kwargs.update(locals()) - if "uplink" in kwargs: - options = ["cellular", "wan1", "wan2", "wan3"] - assert kwargs["uplink"] in options, ( - f'''"uplink" cannot be "{kwargs["uplink"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["organizations", "monitor", "devices", "uplinks", "uplinksLossAndLatency"], - "operation": "getOrganizationDevicesUplinksLossAndLatency", + "tags": ["organizations", "configure", "extensions", "thousandEyes", "networks", "supported"], + "operation": "getOrganizationExtensionsThousandEyesNetworksSupported", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/devices/uplinksLossAndLatency" + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks/supported" query_params = [ - "t0", - "t1", - "timespan", - "uplink", - "ip", + "perPage", + "startingAfter", + "endingBefore", + "agentInstalled", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} @@ -4363,67 +7537,52 @@ def getOrganizationDevicesUplinksLossAndLatency(self, organizationId: str, **kwa 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"getOrganizationDevicesUplinksLossAndLatency: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationExtensionsThousandEyesNetworksSupported: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get(metadata, resource, params) - - def getOrganizationEarlyAccessFeatures(self, organizationId: str): - """ - **List the available early access features for organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-early-access-features - - - organizationId (string): Organization ID - """ - - metadata = { - "tags": ["organizations", "configure", "earlyAccess", "features"], - "operation": "getOrganizationEarlyAccessFeatures", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/earlyAccess/features" - - return self._session.get(metadata, resource) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationEarlyAccessFeaturesOptIns(self, organizationId: str): + def getOrganizationExtensionsThousandEyesNetwork(self, organizationId: str, networkId: str): """ - **List the early access feature opt-ins for an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-early-access-features-opt-ins + **List the ThousandEyes agent configuration under this network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-extensions-thousand-eyes-network - organizationId (string): Organization ID + - networkId (string): Network ID """ metadata = { - "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], - "operation": "getOrganizationEarlyAccessFeaturesOptIns", + "tags": ["organizations", "configure", "extensions", "thousandEyes", "networks"], + "operation": "getOrganizationExtensionsThousandEyesNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/earlyAccess/features/optIns" + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks/{networkId}" return self._session.get(metadata, resource) - def createOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, shortName: str, **kwargs): + def updateOrganizationExtensionsThousandEyesNetwork(self, organizationId: str, networkId: str, enabled: bool, **kwargs): """ - **Create a new early access feature opt-in for an organization** - https://developer.cisco.com/meraki/api-v1/#!create-organization-early-access-features-opt-in + **Update a ThousandEyes agent from this network** + https://developer.cisco.com/meraki/api-v1/#!update-organization-extensions-thousand-eyes-network - organizationId (string): Organization ID - - shortName (string): Short name of the early access feature - - limitScopeToNetworks (array): A list of network IDs to apply the opt-in to + - networkId (string): Network ID + - enabled (boolean): Whether or not the ThousandEyes agent is enabled for the network. """ - kwargs.update(locals()) + kwargs = locals() metadata = { - "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], - "operation": "createOrganizationEarlyAccessFeaturesOptIn", + "tags": ["organizations", "configure", "extensions", "thousandEyes", "networks"], + "operation": "updateOrganizationExtensionsThousandEyesNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/earlyAccess/features/optIns" + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks/{networkId}" body_params = [ - "shortName", - "limitScopeToNetworks", + "enabled", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -4432,52 +7591,50 @@ def createOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, shortN 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"createOrganizationEarlyAccessFeaturesOptIn: ignoring unrecognized kwargs: {invalid}" + f"updateOrganizationExtensionsThousandEyesNetwork: ignoring unrecognized kwargs: {invalid}" ) - return self._session.post(metadata, resource, payload) + return self._session.put(metadata, resource, payload) - def getOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str): + def deleteOrganizationExtensionsThousandEyesNetwork(self, organizationId: str, networkId: str): """ - **Show an early access feature opt-in for an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-early-access-features-opt-in + **Delete a ThousandEyes agent from this network** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-extensions-thousand-eyes-network - organizationId (string): Organization ID - - optInId (string): Opt in ID + - networkId (string): Network ID """ metadata = { - "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], - "operation": "getOrganizationEarlyAccessFeaturesOptIn", + "tags": ["organizations", "configure", "extensions", "thousandEyes", "networks"], + "operation": "deleteOrganizationExtensionsThousandEyesNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - optInId = urllib.parse.quote(str(optInId), safe="") - resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/organizations/{organizationId}/extensions/thousandEyes/networks/{networkId}" - return self._session.get(metadata, resource) + return self._session.delete(metadata, resource) - def updateOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str, **kwargs): + def createOrganizationExtensionsThousandEyesTest(self, organizationId: str, **kwargs): """ - **Update an early access feature opt-in for an organization** - https://developer.cisco.com/meraki/api-v1/#!update-organization-early-access-features-opt-in + **Create a ThousandEyes test based on a provided test template** + https://developer.cisco.com/meraki/api-v1/#!create-organization-extensions-thousand-eyes-test - organizationId (string): Organization ID - - optInId (string): Opt in ID - - limitScopeToNetworks (array): A list of network IDs to apply the opt-in to + - tests (array): An array of tests to be created """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], - "operation": "updateOrganizationEarlyAccessFeaturesOptIn", + "tags": ["organizations", "configure", "extensions", "thousandEyes", "tests"], + "operation": "createOrganizationExtensionsThousandEyesTest", } organizationId = urllib.parse.quote(str(organizationId), safe="") - optInId = urllib.parse.quote(str(optInId), safe="") - resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" + resource = f"/organizations/{organizationId}/extensions/thousandEyes/tests" body_params = [ - "limitScopeToNetworks", + "tests", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -4486,29 +7643,10 @@ def updateOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInI 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"updateOrganizationEarlyAccessFeaturesOptIn: ignoring unrecognized kwargs: {invalid}" + f"createOrganizationExtensionsThousandEyesTest: ignoring unrecognized kwargs: {invalid}" ) - return self._session.put(metadata, resource, payload) - - def deleteOrganizationEarlyAccessFeaturesOptIn(self, organizationId: str, optInId: str): - """ - **Delete an early access feature opt-in** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-early-access-features-opt-in - - - organizationId (string): Organization ID - - optInId (string): Opt in ID - """ - - metadata = { - "tags": ["organizations", "configure", "earlyAccess", "features", "optIns"], - "operation": "deleteOrganizationEarlyAccessFeaturesOptIn", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - optInId = urllib.parse.quote(str(optInId), safe="") - resource = f"/organizations/{organizationId}/earlyAccess/features/optIns/{optInId}" - - return self._session.delete(metadata, resource) + return self._session.post(metadata, resource, payload) def getOrganizationFirmwareUpgrades(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ @@ -4729,6 +7867,94 @@ def getOrganizationFloorPlansAutoLocateStatuses(self, organizationId: str, total return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationAccessGroups(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List effective Catalyst Center access groups for the requested Catalyst Center administrators in the specified organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-access-groups + + - 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 + - perPage (integer): Number of access groups to return per page. Range: 1-50. Defaults to 50 when omitted. + - startingAfter (string): Cursor token to retrieve access groups after the specified access group identifier. + - endingBefore (string): Cursor token to retrieve access groups before the specified access group identifier. + - assignedAdminEmails (array): Catalyst Center administrator email addresses used by federation to filter access groups for the requested administrators. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "iam", "admins", "accessGroups"], + "operation": "getOrganizationAccessGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/admins/accessGroups" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "assignedAdminEmails", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "assignedAdminEmails", + ] + 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"getOrganizationAccessGroups: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def resolveOrganizationIamAdminsAdministratorsMePermissions( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the authenticated caller admin's permissions for an organization** + https://developer.cisco.com/meraki/api-v1/#!resolve-organization-iam-admins-administrators-me-permissions + + - 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 + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "iam", "admins", "administrators", "me", "permissions"], + "operation": "resolveOrganizationIamAdminsAdministratorsMePermissions", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/admins/administrators/me/permissions/resolve" + + body_params = [ + "perPage", + "startingAfter", + "endingBefore", + ] + 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"resolveOrganizationIamAdminsAdministratorsMePermissions: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + def getOrganizationIntegrationsDeployable(self, organizationId: str): """ **Provides a list of integrations that can be enabled for an Organization.** @@ -4939,51 +8165,104 @@ def getOrganizationInventoryDevices(self, organizationId: str, total_pages=1, di kwargs.update(locals()) - if "usedState" in kwargs: - options = ["unused", "used"] - assert kwargs["usedState"] in options, ( - f'''"usedState" cannot be "{kwargs["usedState"]}", & must be set to one of: {options}''' - ) - if "tagsFilterType" in kwargs: - options = ["withAllTags", "withAnyTags"] - assert kwargs["tagsFilterType"] in options, ( - f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' - ) - + if "usedState" in kwargs: + options = ["unused", "used"] + assert kwargs["usedState"] in options, ( + f'''"usedState" cannot be "{kwargs["usedState"]}", & must be set to one of: {options}''' + ) + if "tagsFilterType" in kwargs: + options = ["withAllTags", "withAnyTags"] + assert kwargs["tagsFilterType"] in options, ( + f'''"tagsFilterType" cannot be "{kwargs["tagsFilterType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "inventory", "devices"], + "operation": "getOrganizationInventoryDevices", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/inventory/devices" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "usedState", + "search", + "macs", + "networkIds", + "serials", + "models", + "orderNumbers", + "tags", + "tagsFilterType", + "productTypes", + "eoxStatuses", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "macs", + "networkIds", + "serials", + "models", + "orderNumbers", + "tags", + "productTypes", + "eoxStatuses", + ] + 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"getOrganizationInventoryDevices: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationInventoryDevicesDetails(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return inventory devices with additional site, geolocation, software, licensing, lifecycle, and Catalyst Center-specific fields** + https://developer.cisco.com/meraki/api-v1/#!get-organization-inventory-devices-details + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. 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. + - networkIds (array): Optional parameter to filter devices by network IDs. Matches devices in any of the provided network IDs. When multiple filter parameters are provided, a device must match each provided filter. Query array syntax follows the standard bracket form, for example: networkIds[]=L_1234&networkIds[]=L_5678. Maximum 100 network IDs. + - serials (array): Optional parameter to filter devices by serials. Matches devices with any of the provided serials. When multiple filter parameters are provided, a device must match each provided filter. Query array syntax follows the standard bracket form, for example: serials[]=Q234-ABCD-5678&serials[]=Q234-ABCD-9012. Maximum 100 serials. + - productTypes (array): Optional parameter to filter devices by product type. Matches devices with any of the provided product types. When multiple filter parameters are provided, a device must match each provided filter. Query array syntax follows the standard bracket form, for example: productTypes[]=switch&productTypes[]=wireless. Maximum 100 product types. + """ + + kwargs.update(locals()) + metadata = { - "tags": ["organizations", "configure", "inventory", "devices"], - "operation": "getOrganizationInventoryDevices", + "tags": ["organizations", "monitor", "inventory", "devices", "details"], + "operation": "getOrganizationInventoryDevicesDetails", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/inventory/devices" + resource = f"/organizations/{organizationId}/inventory/devices/details" query_params = [ "perPage", "startingAfter", "endingBefore", - "usedState", - "search", - "macs", "networkIds", "serials", - "models", - "orderNumbers", - "tags", - "tagsFilterType", "productTypes", - "eoxStatuses", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "macs", "networkIds", "serials", - "models", - "orderNumbers", - "tags", "productTypes", - "eoxStatuses", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4994,7 +8273,9 @@ def getOrganizationInventoryDevices(self, organizationId: str, total_pages=1, di 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"getOrganizationInventoryDevices: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationInventoryDevicesDetails: ignoring unrecognized kwargs: {invalid}" + ) return self._session.get_pages(metadata, resource, params, total_pages, direction) @@ -5536,71 +8817,318 @@ def getOrganizationNetworks(self, organizationId: str, total_pages=1, direction= ) metadata = { - "tags": ["organizations", "configure", "networks"], - "operation": "getOrganizationNetworks", + "tags": ["organizations", "configure", "networks"], + "operation": "getOrganizationNetworks", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/networks" + + query_params = [ + "configTemplateId", + "isBoundToConfigTemplate", + "tags", + "tagsFilterType", + "productTypes", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "tags", + "productTypes", + ] + 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"getOrganizationNetworks: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationNetwork(self, organizationId: str, name: str, productTypes: list, **kwargs): + """ + **Create a network** + https://developer.cisco.com/meraki/api-v1/#!create-organization-network + + - organizationId (string): Organization ID + - name (string): The name of the new network + - productTypes (array): The product type(s) of the new network. If more than one type is included, the network will be a combined network. + - tags (array): A list of tags to be applied to the network + - timeZone (string): The timezone of the network. For a list of allowed timezones, please see the 'TZ' column in the table in this article. + - copyFromNetworkId (string): The ID of the network to copy configuration from. Other provided parameters will override the copied configuration, except type which must match this network's type exactly. + - notes (string): Add any notes or additional information about this network here. + - details (array): An array of details + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "networks"], + "operation": "createOrganizationNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/networks" + + body_params = [ + "name", + "productTypes", + "tags", + "timeZone", + "copyFromNetworkId", + "notes", + "details", + ] + 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"createOrganizationNetwork: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def combineOrganizationNetworks(self, organizationId: str, name: str, networkIds: list, **kwargs): + """ + **Combine multiple networks into a single network** + https://developer.cisco.com/meraki/api-v1/#!combine-organization-networks + + - organizationId (string): Organization ID + - name (string): The name of the combined network + - networkIds (array): A list of the network IDs that will be combined. If an ID of a combined network is included in this list, the other networks in the list will be grouped into that network + - enrollmentString (string): A unique identifier which can be used for device enrollment or easy access through the Meraki SM Registration page or the Self Service Portal. Please note that changing this field may cause existing bookmarks to break. All networks that are part of this combined network will have their enrollment string appended by '-network_type'. If left empty, all exisitng enrollment strings will be deleted. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "networks"], + "operation": "combineOrganizationNetworks", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/networks/combine" + + body_params = [ + "name", + "networkIds", + "enrollmentString", + ] + 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"combineOrganizationNetworks: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationNetworksGroups(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the network groups in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-networks-groups + + - 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 + - groupIds (array): Optional parameter to filter network groups by ID + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "networks", "groups"], + "operation": "getOrganizationNetworksGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/networks/groups" + + query_params = [ + "groupIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "groupIds", + ] + 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"getOrganizationNetworksGroups: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationNetworksGroup(self, organizationId: str, name: str, **kwargs): + """ + **Create a network group** + https://developer.cisco.com/meraki/api-v1/#!create-organization-networks-group + + - organizationId (string): Organization ID + - name (string): The name of the network group + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "networks", "groups"], + "operation": "createOrganizationNetworksGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/networks/groups" + + body_params = [ + "name", + ] + 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"createOrganizationNetworksGroup: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationNetworksGroupsOverviewByGroup(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the client and status overview information for the network groups in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-networks-groups-overview-by-group + + - 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 + - sortBy (string): Field by which to sort the results + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5000. + - 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()) + + if "sortBy" in kwargs: + options = ["status"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "monitor", "networks", "groups", "overview", "byGroup"], + "operation": "getOrganizationNetworksGroupsOverviewByGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/networks/groups/overview/byGroup" + + query_params = [ + "sortBy", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationNetworksGroupsOverviewByGroup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def updateOrganizationNetworksGroup(self, organizationId: str, groupId: str, name: str, **kwargs): + """ + **Update a network group** + https://developer.cisco.com/meraki/api-v1/#!update-organization-networks-group + + - organizationId (string): Organization ID + - groupId (string): Group ID + - name (string): The new name of the network group + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "networks", "groups"], + "operation": "updateOrganizationNetworksGroup", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/networks" - - query_params = [ - "configTemplateId", - "isBoundToConfigTemplate", - "tags", - "tagsFilterType", - "productTypes", - "perPage", - "startingAfter", - "endingBefore", - ] - params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + groupId = urllib.parse.quote(str(groupId), safe="") + resource = f"/organizations/{organizationId}/networks/groups/{groupId}" - array_params = [ - "tags", - "productTypes", + body_params = [ + "name", ] - for k, v in kwargs.items(): - if k.strip() in array_params: - params[f"{k.strip()}[]"] = kwargs[f"{k}"] - params.pop(k.strip()) + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} if self._session._validate_kwargs: - all_params = query_params + array_params + 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"getOrganizationNetworks: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"updateOrganizationNetworksGroup: ignoring unrecognized kwargs: {invalid}") - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.put(metadata, resource, payload) - def createOrganizationNetwork(self, organizationId: str, name: str, productTypes: list, **kwargs): + def deleteOrganizationNetworksGroup(self, organizationId: str, groupId: str): """ - **Create a network** - https://developer.cisco.com/meraki/api-v1/#!create-organization-network + **Delete a network group** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-networks-group - organizationId (string): Organization ID - - name (string): The name of the new network - - productTypes (array): The product type(s) of the new network. If more than one type is included, the network will be a combined network. - - tags (array): A list of tags to be applied to the network - - timeZone (string): The timezone of the network. For a list of allowed timezones, please see the 'TZ' column in the table in this article. - - copyFromNetworkId (string): The ID of the network to copy configuration from. Other provided parameters will override the copied configuration, except type which must match this network's type exactly. - - notes (string): Add any notes or additional information about this network here. + - groupId (string): Group ID """ - kwargs.update(locals()) + metadata = { + "tags": ["organizations", "configure", "networks", "groups"], + "operation": "deleteOrganizationNetworksGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + groupId = urllib.parse.quote(str(groupId), safe="") + resource = f"/organizations/{organizationId}/networks/groups/{groupId}" + + return self._session.delete(metadata, resource) + + def bulkOrganizationNetworksGroupAssign(self, organizationId: str, groupId: str, networkIds: list, **kwargs): + """ + **Add networks to a network group** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-networks-group-assign + + - organizationId (string): Organization ID + - groupId (string): Group ID + - networkIds (array): A list of network IDs to add to the network group + """ + + kwargs = locals() metadata = { - "tags": ["organizations", "configure", "networks"], - "operation": "createOrganizationNetwork", + "tags": ["organizations", "configure", "networks", "groups"], + "operation": "bulkOrganizationNetworksGroupAssign", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/networks" + groupId = urllib.parse.quote(str(groupId), safe="") + resource = f"/organizations/{organizationId}/networks/groups/{groupId}/bulkAssign" body_params = [ - "name", - "productTypes", - "tags", - "timeZone", - "copyFromNetworkId", - "notes", + "networkIds", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -5608,34 +9136,32 @@ def createOrganizationNetwork(self, organizationId: str, name: str, productTypes 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"createOrganizationNetwork: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"bulkOrganizationNetworksGroupAssign: ignoring unrecognized kwargs: {invalid}") return self._session.post(metadata, resource, payload) - def combineOrganizationNetworks(self, organizationId: str, name: str, networkIds: list, **kwargs): + def bulkOrganizationNetworksGroupUnassign(self, organizationId: str, groupId: str, networkIds: list, **kwargs): """ - **Combine multiple networks into a single network** - https://developer.cisco.com/meraki/api-v1/#!combine-organization-networks + **Remove networks from a network group** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-networks-group-unassign - organizationId (string): Organization ID - - name (string): The name of the combined network - - networkIds (array): A list of the network IDs that will be combined. If an ID of a combined network is included in this list, the other networks in the list will be grouped into that network - - enrollmentString (string): A unique identifier which can be used for device enrollment or easy access through the Meraki SM Registration page or the Self Service Portal. Please note that changing this field may cause existing bookmarks to break. All networks that are part of this combined network will have their enrollment string appended by '-network_type'. If left empty, all exisitng enrollment strings will be deleted. + - groupId (string): Group ID + - networkIds (array): A list of network IDs to remove from the network group """ - kwargs.update(locals()) + kwargs = locals() metadata = { - "tags": ["organizations", "configure", "networks"], - "operation": "combineOrganizationNetworks", + "tags": ["organizations", "configure", "networks", "groups"], + "operation": "bulkOrganizationNetworksGroupUnassign", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/networks/combine" + groupId = urllib.parse.quote(str(groupId), safe="") + resource = f"/organizations/{organizationId}/networks/groups/{groupId}/bulkUnassign" body_params = [ - "name", "networkIds", - "enrollmentString", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -5643,7 +9169,9 @@ def combineOrganizationNetworks(self, organizationId: str, name: str, networkIds 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"combineOrganizationNetworks: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"bulkOrganizationNetworksGroupUnassign: ignoring unrecognized kwargs: {invalid}" + ) return self._session.post(metadata, resource, payload) @@ -5729,6 +9257,25 @@ def getNetworkMoves(self, organizationId: str, total_pages=1, direction="next", return self._session.get_pages(metadata, resource, params, total_pages, direction) + def deleteOrganizationOpenRoamingCertificate(self, organizationId: str, id: str): + """ + **Delete an open roaming certificate.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-open-roaming-certificate + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["organizations", "configure", "openRoaming", "certificates"], + "operation": "deleteOrganizationOpenRoamingCertificate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/openRoaming/certificates/{id}" + + return self._session.delete(metadata, resource) + def getOrganizationOpenapiSpec(self, organizationId: str, **kwargs): """ **Return the OpenAPI Specification of the organization's API documentation in JSON** @@ -6761,40 +10308,218 @@ def getOrganizationPolicyObjectsGroup(self, organizationId: str, policyObjectGro - policyObjectGroupId (string): Policy object group ID """ - metadata = { - "tags": ["organizations", "configure", "policyObjects", "groups"], - "operation": "getOrganizationPolicyObjectsGroup", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - policyObjectGroupId = urllib.parse.quote(str(policyObjectGroupId), safe="") - resource = f"/organizations/{organizationId}/policyObjects/groups/{policyObjectGroupId}" + metadata = { + "tags": ["organizations", "configure", "policyObjects", "groups"], + "operation": "getOrganizationPolicyObjectsGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyObjectGroupId = urllib.parse.quote(str(policyObjectGroupId), safe="") + resource = f"/organizations/{organizationId}/policyObjects/groups/{policyObjectGroupId}" + + return self._session.get(metadata, resource) + + def updateOrganizationPolicyObjectsGroup(self, organizationId: str, policyObjectGroupId: str, **kwargs): + """ + **Updates a Policy Object Group.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-policy-objects-group + + - organizationId (string): Organization ID + - policyObjectGroupId (string): Policy object group ID + - name (string): A name for the group of network addresses, unique within the organization (alphanumeric, space, dash, or underscore characters only) + - objectIds (array): A list of Policy Object ID's that this NetworkObjectGroup should be associated to (note: these ID's will replace the existing associated Policy Objects) + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "policyObjects", "groups"], + "operation": "updateOrganizationPolicyObjectsGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyObjectGroupId = urllib.parse.quote(str(policyObjectGroupId), safe="") + resource = f"/organizations/{organizationId}/policyObjects/groups/{policyObjectGroupId}" + + body_params = [ + "name", + "objectIds", + ] + 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"updateOrganizationPolicyObjectsGroup: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationPolicyObjectsGroup(self, organizationId: str, policyObjectGroupId: str): + """ + **Deletes a Policy Object Group.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-policy-objects-group + + - organizationId (string): Organization ID + - policyObjectGroupId (string): Policy object group ID + """ + + metadata = { + "tags": ["organizations", "configure", "policyObjects", "groups"], + "operation": "deleteOrganizationPolicyObjectsGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyObjectGroupId = urllib.parse.quote(str(policyObjectGroupId), safe="") + resource = f"/organizations/{organizationId}/policyObjects/groups/{policyObjectGroupId}" + + return self._session.delete(metadata, resource) + + def getOrganizationPolicyObject(self, organizationId: str, policyObjectId: str): + """ + **Shows details of a Policy Object.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-policy-object + + - organizationId (string): Organization ID + - policyObjectId (string): Policy object ID + """ + + metadata = { + "tags": ["organizations", "configure", "policyObjects"], + "operation": "getOrganizationPolicyObject", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyObjectId = urllib.parse.quote(str(policyObjectId), safe="") + resource = f"/organizations/{organizationId}/policyObjects/{policyObjectId}" + + return self._session.get(metadata, resource) + + def updateOrganizationPolicyObject(self, organizationId: str, policyObjectId: str, **kwargs): + """ + **Updates a Policy Object.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-policy-object + + - organizationId (string): Organization ID + - policyObjectId (string): Policy object ID + - name (string): Name of a policy object, unique within the organization (alphanumeric, space, dash, or underscore characters only) + - cidr (string): CIDR Value of a policy object (e.g. 10.11.12.1/24") + - fqdn (string): Fully qualified domain name of policy object (e.g. "example.com") + - mask (string): Mask of a policy object (e.g. "255.255.0.0") + - ip (string): IP Address of a policy object (e.g. "1.2.3.4") + - groupIds (array): The IDs of policy object groups the policy object belongs to + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "policyObjects"], + "operation": "updateOrganizationPolicyObject", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyObjectId = urllib.parse.quote(str(policyObjectId), safe="") + resource = f"/organizations/{organizationId}/policyObjects/{policyObjectId}" + + body_params = [ + "name", + "cidr", + "fqdn", + "mask", + "ip", + "groupIds", + ] + 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"updateOrganizationPolicyObject: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationPolicyObject(self, organizationId: str, policyObjectId: str): + """ + **Deletes a Policy Object.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-policy-object + + - organizationId (string): Organization ID + - policyObjectId (string): Policy object ID + """ + + metadata = { + "tags": ["organizations", "configure", "policyObjects"], + "operation": "deleteOrganizationPolicyObject", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + policyObjectId = urllib.parse.quote(str(policyObjectId), safe="") + resource = f"/organizations/{organizationId}/policyObjects/{policyObjectId}" + + return self._session.delete(metadata, resource) + + def getOrganizationRoutingVrfs(self, organizationId: str, **kwargs): + """ + **List existing organization-wide VRFs (Virtual Routing and Forwarding).** + https://developer.cisco.com/meraki/api-v1/#!get-organization-routing-vrfs + + - organizationId (string): Organization ID + - vrfIds (array): IDs of the desired VRFs. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "routing", "vrfs"], + "operation": "getOrganizationRoutingVrfs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/routing/vrfs" + + query_params = [ + "vrfIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "vrfIds", + ] + 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"getOrganizationRoutingVrfs: ignoring unrecognized kwargs: {invalid}") - return self._session.get(metadata, resource) + return self._session.get(metadata, resource, params) - def updateOrganizationPolicyObjectsGroup(self, organizationId: str, policyObjectGroupId: str, **kwargs): + def createOrganizationRoutingVrf(self, organizationId: str, name: str, **kwargs): """ - **Updates a Policy Object Group.** - https://developer.cisco.com/meraki/api-v1/#!update-organization-policy-objects-group + **Add an organization-wide VRF (Virtual Routing and Forwarding)** + https://developer.cisco.com/meraki/api-v1/#!create-organization-routing-vrf - organizationId (string): Organization ID - - policyObjectGroupId (string): Policy object group ID - - name (string): A name for the group of network addresses, unique within the organization (alphanumeric, space, dash, or underscore characters only) - - objectIds (array): A list of Policy Object ID's that this NetworkObjectGroup should be associated to (note: these ID's will replace the existing associated Policy Objects) + - name (string): The name of the VRF (Virtual Routing and Forwarding) + - description (string): Description of the VRF (Virtual Routing and Forwarding) + - routeDistinguisher (string): RD (Route Distinguisher) for the VRF (Virtual Routing and Forwarding) + - routeTarget (string): Route target are used to control the import and export of routes between VRFs + - appliance (object): This parameter is used to enable or disable the VRF on the WAN appliance """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "policyObjects", "groups"], - "operation": "updateOrganizationPolicyObjectsGroup", + "tags": ["organizations", "configure", "routing", "vrfs"], + "operation": "createOrganizationRoutingVrf", } organizationId = urllib.parse.quote(str(organizationId), safe="") - policyObjectGroupId = urllib.parse.quote(str(policyObjectGroupId), safe="") - resource = f"/organizations/{organizationId}/policyObjects/groups/{policyObjectGroupId}" + resource = f"/organizations/{organizationId}/routing/vrfs" body_params = [ "name", - "objectIds", + "description", + "routeDistinguisher", + "routeTarget", + "appliance", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -6802,80 +10527,81 @@ def updateOrganizationPolicyObjectsGroup(self, organizationId: str, policyObject 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"updateOrganizationPolicyObjectsGroup: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"createOrganizationRoutingVrf: ignoring unrecognized kwargs: {invalid}") - return self._session.put(metadata, resource, payload) + return self._session.post(metadata, resource, payload) - def deleteOrganizationPolicyObjectsGroup(self, organizationId: str, policyObjectGroupId: str): + def getOrganizationRoutingVrfsOverviewByVrf(self, organizationId: str, **kwargs): """ - **Deletes a Policy Object Group.** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-policy-objects-group + **List existing organization-wide VRFs (Virtual Routing and Forwarding) overviews.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-routing-vrfs-overview-by-vrf - organizationId (string): Organization ID - - policyObjectGroupId (string): Policy object group ID + - vrfIds (array): IDs of the desired VRFs. """ + kwargs.update(locals()) + metadata = { - "tags": ["organizations", "configure", "policyObjects", "groups"], - "operation": "deleteOrganizationPolicyObjectsGroup", + "tags": ["organizations", "monitor", "routing", "vrfs", "overview", "byVrf"], + "operation": "getOrganizationRoutingVrfsOverviewByVrf", } organizationId = urllib.parse.quote(str(organizationId), safe="") - policyObjectGroupId = urllib.parse.quote(str(policyObjectGroupId), safe="") - resource = f"/organizations/{organizationId}/policyObjects/groups/{policyObjectGroupId}" - - return self._session.delete(metadata, resource) + resource = f"/organizations/{organizationId}/routing/vrfs/overview/byVrf" - def getOrganizationPolicyObject(self, organizationId: str, policyObjectId: str): - """ - **Shows details of a Policy Object.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-policy-object + query_params = [ + "vrfIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - - organizationId (string): Organization ID - - policyObjectId (string): Policy object ID - """ + array_params = [ + "vrfIds", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) - metadata = { - "tags": ["organizations", "configure", "policyObjects"], - "operation": "getOrganizationPolicyObject", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - policyObjectId = urllib.parse.quote(str(policyObjectId), safe="") - resource = f"/organizations/{organizationId}/policyObjects/{policyObjectId}" + 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"getOrganizationRoutingVrfsOverviewByVrf: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get(metadata, resource) + return self._session.get(metadata, resource, params) - def updateOrganizationPolicyObject(self, organizationId: str, policyObjectId: str, **kwargs): + def updateOrganizationRoutingVrf(self, organizationId: str, vrfId: str, **kwargs): """ - **Updates a Policy Object.** - https://developer.cisco.com/meraki/api-v1/#!update-organization-policy-object + **Update an organization-wide VRF (Virtual Routing and Forwarding)** + https://developer.cisco.com/meraki/api-v1/#!update-organization-routing-vrf - organizationId (string): Organization ID - - policyObjectId (string): Policy object ID - - name (string): Name of a policy object, unique within the organization (alphanumeric, space, dash, or underscore characters only) - - cidr (string): CIDR Value of a policy object (e.g. 10.11.12.1/24") - - fqdn (string): Fully qualified domain name of policy object (e.g. "example.com") - - mask (string): Mask of a policy object (e.g. "255.255.0.0") - - ip (string): IP Address of a policy object (e.g. "1.2.3.4") - - groupIds (array): The IDs of policy object groups the policy object belongs to + - vrfId (string): Vrf ID + - name (string): The name of the VRF (Virtual Routing and Forwarding) + - description (string): Description of the VRF (Virtual Routing and Forwarding) + - routeDistinguisher (string): RD (Route Distinguisher) for the VRF (Virtual Routing and Forwarding) + - routeTarget (string): Route target are used to control the import and export of routes between VRFs + - appliance (object): This parameter is used to enable or disable the VRF on the WAN appliance """ kwargs.update(locals()) metadata = { - "tags": ["organizations", "configure", "policyObjects"], - "operation": "updateOrganizationPolicyObject", + "tags": ["organizations", "configure", "routing", "vrfs"], + "operation": "updateOrganizationRoutingVrf", } organizationId = urllib.parse.quote(str(organizationId), safe="") - policyObjectId = urllib.parse.quote(str(policyObjectId), safe="") - resource = f"/organizations/{organizationId}/policyObjects/{policyObjectId}" + vrfId = urllib.parse.quote(str(vrfId), safe="") + resource = f"/organizations/{organizationId}/routing/vrfs/{vrfId}" body_params = [ "name", - "cidr", - "fqdn", - "mask", - "ip", - "groupIds", + "description", + "routeDistinguisher", + "routeTarget", + "appliance", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -6883,26 +10609,26 @@ def updateOrganizationPolicyObject(self, organizationId: str, policyObjectId: st 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"updateOrganizationPolicyObject: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"updateOrganizationRoutingVrf: ignoring unrecognized kwargs: {invalid}") return self._session.put(metadata, resource, payload) - def deleteOrganizationPolicyObject(self, organizationId: str, policyObjectId: str): + def deleteOrganizationRoutingVrf(self, organizationId: str, vrfId: str): """ - **Deletes a Policy Object.** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-policy-object + **Delete a VRF (Virtual Routing and Forwarding) from a organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-routing-vrf - organizationId (string): Organization ID - - policyObjectId (string): Policy object ID + - vrfId (string): Vrf ID """ metadata = { - "tags": ["organizations", "configure", "policyObjects"], - "operation": "deleteOrganizationPolicyObject", + "tags": ["organizations", "configure", "routing", "vrfs"], + "operation": "deleteOrganizationRoutingVrf", } organizationId = urllib.parse.quote(str(organizationId), safe="") - policyObjectId = urllib.parse.quote(str(policyObjectId), safe="") - resource = f"/organizations/{organizationId}/policyObjects/{policyObjectId}" + vrfId = urllib.parse.quote(str(vrfId), safe="") + resource = f"/organizations/{organizationId}/routing/vrfs/{vrfId}" return self._session.delete(metadata, resource) @@ -7214,6 +10940,72 @@ def deleteOrganizationSamlRole(self, organizationId: str, samlRoleId: str): return self._session.delete(metadata, resource) + def getOrganizationSaseBatch(self, organizationId: str, batchId: str): + """ + **Retrieves a batch summary with aggregated job status counts** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sase-batch + + - organizationId (string): Organization ID + - batchId (string): Batch ID + """ + + metadata = { + "tags": ["organizations", "configure", "sase", "batches"], + "operation": "getOrganizationSaseBatch", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + batchId = urllib.parse.quote(str(batchId), safe="") + resource = f"/organizations/{organizationId}/sase/batches/{batchId}" + + return self._session.get(metadata, resource) + + def getOrganizationSaseBatchJobs(self, organizationId: str, batchId: str, total_pages=1, direction="next", **kwargs): + """ + **List jobs within a batch, with optional status filtering** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sase-batch-jobs + + - organizationId (string): Organization ID + - batchId (string): Batch 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - status (string): If provided, filters jobs by status + """ + + kwargs.update(locals()) + + if "status" in kwargs: + options = ["complete", "deferred", "failed", "new", "ready", "running", "scheduled"] + assert kwargs["status"] in options, ( + f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["organizations", "configure", "sase", "batches", "jobs"], + "operation": "getOrganizationSaseBatchJobs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + batchId = urllib.parse.quote(str(batchId), safe="") + resource = f"/organizations/{organizationId}/sase/batches/{batchId}/jobs" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "status", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSaseBatchJobs: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationSaseConnectors(self, organizationId: str): """ **List SSE Connectors for an organization** @@ -7552,6 +11344,39 @@ def detachOrganizationSaseSites(self, organizationId: str, **kwargs): return self._session.delete(metadata, resource) + def enrollOrganizationSaseSites(self, organizationId: str, **kwargs): + """ + **Enroll sites in this organization to Secure Access** + https://developer.cisco.com/meraki/api-v1/#!enroll-organization-sase-sites + + - organizationId (string): Organization ID + - items (array): List of Meraki SD-WAN sites with the associated regions to be enrolled. + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "sase", "sites"], + "operation": "enrollOrganizationSaseSites", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sase/sites/enroll" + + body_params = [ + "items", + "callback", + ] + 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"enrollOrganizationSaseSites: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + def updateOrganizationSaseSite(self, organizationId: str, siteId: str, **kwargs): """ **Update the configuration for a site** @@ -7582,9 +11407,114 @@ def updateOrganizationSaseSite(self, organizationId: str, siteId: str, **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"updateOrganizationSaseSite: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning(f"updateOrganizationSaseSite: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getOrganizationSites(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Lists unified site resources for an organization across Meraki networks and Catalyst Center sites** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sites + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 500. Default is 500. + - 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. + - ids (array): Optional parameter to filter resources by unified resource ID. This filter uses multiple exact matches. + - resourceTypes (array): Optional parameter to filter resources by returned resource type. + - resourceTags (array): Optional parameter to filter resources by tag. By default all provided tags must match. + - resourceName (string): Optional parameter to filter resources by case-insensitive partial name match. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "monitor", "sites"], + "operation": "getOrganizationSites", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sites" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "ids", + "resourceTypes", + "resourceTags", + "resourceName", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "ids", + "resourceTypes", + "resourceTags", + ] + 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"getOrganizationSites: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSitesBuildings(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the buildings belonging to the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sites-buildings + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter buildings by one or more network IDs + - buildingIds (array): Optional parameter to filter buildings by one or more building IDs + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "sites", "buildings"], + "operation": "getOrganizationSitesBuildings", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sites/buildings" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "buildingIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "buildingIds", + ] + 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"getOrganizationSitesBuildings: ignoring unrecognized kwargs: {invalid}") - return self._session.put(metadata, resource, payload) + return self._session.get_pages(metadata, resource, params, total_pages, direction) def getOrganizationSnmp(self, organizationId: str): """ @@ -7657,6 +11587,45 @@ def updateOrganizationSnmp(self, organizationId: str, **kwargs): return self._session.put(metadata, resource, payload) + def getOrganizationSnmpTrapsByNetwork(self, organizationId: str, **kwargs): + """ + **Retrieve the SNMP trap configuration for the networks in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-snmp-traps-by-network + + - organizationId (string): Organization ID + - networkIds (array): An optional parameter to filter SNMP trap configs by network IDs + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "snmp", "traps", "byNetwork"], + "operation": "getOrganizationSnmpTrapsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/snmp/traps/byNetwork" + + query_params = [ + "networkIds", + ] + 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"getOrganizationSnmpTrapsByNetwork: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + def getOrganizationSplashAsset(self, organizationId: str, id: str): """ **Get a Splash Theme Asset** @@ -7807,6 +11776,7 @@ def getOrganizationSummaryTopAppliancesByUtilization(self, organizationId: str, - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -7827,6 +11797,7 @@ def getOrganizationSummaryTopAppliancesByUtilization(self, organizationId: str, query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -7952,6 +11923,7 @@ def getOrganizationSummaryTopClientsByUsage(self, organizationId: str, **kwargs) - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -7972,6 +11944,7 @@ def getOrganizationSummaryTopClientsByUsage(self, organizationId: str, **kwargs) query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -7999,6 +11972,7 @@ def getOrganizationSummaryTopClientsManufacturersByUsage(self, organizationId: s - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -8019,6 +11993,7 @@ def getOrganizationSummaryTopClientsManufacturersByUsage(self, organizationId: s query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -8046,6 +12021,7 @@ def getOrganizationSummaryTopDevicesByUsage(self, organizationId: str, **kwargs) - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -8066,6 +12042,7 @@ def getOrganizationSummaryTopDevicesByUsage(self, organizationId: str, **kwargs) query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -8093,6 +12070,7 @@ def getOrganizationSummaryTopDevicesModelsByUsage(self, organizationId: str, **k - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -8113,6 +12091,7 @@ def getOrganizationSummaryTopDevicesModelsByUsage(self, organizationId: str, **k query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -8142,6 +12121,7 @@ def getOrganizationSummaryTopNetworksByStatus(self, organizationId: str, total_p - direction (string): direction to paginate, either "next" (default) or "prev" page - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -8162,6 +12142,7 @@ def getOrganizationSummaryTopNetworksByStatus(self, organizationId: str, total_p query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -8189,6 +12170,7 @@ def getOrganizationSummaryTopSsidsByUsage(self, organizationId: str, **kwargs): - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -8209,6 +12191,7 @@ def getOrganizationSummaryTopSsidsByUsage(self, organizationId: str, **kwargs): query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -8236,6 +12219,7 @@ def getOrganizationSummaryTopSwitchesByEnergyUsage(self, organizationId: str, ** - organizationId (string): Organization ID - networkTag (string): Match result to an exact network tag - deviceTag (string): Match result to an exact device tag + - networkId (string): Match result to an exact network id - quantity (integer): Set number of desired results to return. Default is 10. Maximum is 50 - ssidName (string): Filter results by ssid name - usageUplink (string): Filter results by usage uplink @@ -8256,6 +12240,7 @@ def getOrganizationSummaryTopSwitchesByEnergyUsage(self, organizationId: str, ** query_params = [ "networkTag", "deviceTag", + "networkId", "quantity", "ssidName", "usageUplink", @@ -8384,6 +12369,137 @@ def getOrganizationWebhooksCallbacksStatus(self, organizationId: str, callbackId return self._session.get(metadata, resource) + def getOrganizationWebhooksHttpServers(self, organizationId: str): + """ + **List the HTTP servers for this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-webhooks-http-servers + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "httpServers"], + "operation": "getOrganizationWebhooksHttpServers", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/webhooks/httpServers" + + return self._session.get(metadata, resource) + + def createOrganizationWebhooksHttpServer(self, organizationId: str, name: str, url: str, **kwargs): + """ + **Add an HTTP server to an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-webhooks-http-server + + - organizationId (string): Organization ID + - name (string): A name for easy reference to the HTTP server + - url (string): The URL of the HTTP server + - sharedSecret (string): A shared secret that will be included in POSTs sent to the HTTP server. This secret can be used to verify that the request was sent by Meraki. + - payloadTemplate (object): The payload template to use when posting data to the HTTP server. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "webhooks", "httpServers"], + "operation": "createOrganizationWebhooksHttpServer", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/webhooks/httpServers" + + body_params = [ + "name", + "url", + "sharedSecret", + "payloadTemplate", + ] + 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"createOrganizationWebhooksHttpServer: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationWebhooksHttpServer(self, organizationId: str, id: str): + """ + **Return an HTTP server for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-webhooks-http-server + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "httpServers"], + "operation": "getOrganizationWebhooksHttpServer", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/webhooks/httpServers/{id}" + + return self._session.get(metadata, resource) + + def updateOrganizationWebhooksHttpServer(self, organizationId: str, id: str, **kwargs): + """ + **Update an HTTP server for an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-webhooks-http-server + + - organizationId (string): Organization ID + - id (string): ID + - name (string): A name for easy reference to the HTTP server + - url (string): The URL of the HTTP server + - sharedSecret (string): A shared secret that will be included in POSTs sent to the HTTP server. This secret can be used to verify that the request was sent by Meraki. + - payloadTemplate (object): The payload template to use when posting data to the HTTP server. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "webhooks", "httpServers"], + "operation": "updateOrganizationWebhooksHttpServer", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/webhooks/httpServers/{id}" + + body_params = [ + "name", + "url", + "sharedSecret", + "payloadTemplate", + ] + 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"updateOrganizationWebhooksHttpServer: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationWebhooksHttpServer(self, organizationId: str, id: str): + """ + **Delete an HTTP server from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-webhooks-http-server + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "httpServers"], + "operation": "deleteOrganizationWebhooksHttpServer", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/webhooks/httpServers/{id}" + + return self._session.delete(metadata, resource) + def getOrganizationWebhooksLogs(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Return the log of webhook POSTs sent** @@ -8428,3 +12544,206 @@ def getOrganizationWebhooksLogs(self, organizationId: str, total_pages=1, direct self._session._logger.warning(f"getOrganizationWebhooksLogs: ignoring unrecognized kwargs: {invalid}") return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWebhooksPayloadTemplates(self, organizationId: str): + """ + **List the webhook payload templates for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-webhooks-payload-templates + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "payloadTemplates"], + "operation": "getOrganizationWebhooksPayloadTemplates", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/webhooks/payloadTemplates" + + return self._session.get(metadata, resource) + + def createOrganizationWebhooksPayloadTemplate(self, organizationId: str, name: str, **kwargs): + """ + **Create a webhook payload template for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-webhooks-payload-template + + - organizationId (string): Organization ID + - name (string): The name of the new template + - body (string): The liquid template used for the body of the webhook message. Either `body` or `bodyFile` must be specified. + - headers (array): The liquid template used with the webhook headers. + - bodyFile (string): A file containing liquid template used for the body of the webhook message. Either `body` or `bodyFile` must be specified. + - headersFile (string): A file containing the liquid template used with the webhook headers. + - sharing (object): Information on which entities have access to the template + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "webhooks", "payloadTemplates"], + "operation": "createOrganizationWebhooksPayloadTemplate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/webhooks/payloadTemplates" + + body_params = [ + "name", + "body", + "headers", + "bodyFile", + "headersFile", + "sharing", + ] + 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"createOrganizationWebhooksPayloadTemplate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationWebhooksPayloadTemplate(self, organizationId: str, payloadTemplateId: str): + """ + **Get the webhook payload template for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-webhooks-payload-template + + - organizationId (string): Organization ID + - payloadTemplateId (string): Payload template ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "payloadTemplates"], + "operation": "getOrganizationWebhooksPayloadTemplate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + payloadTemplateId = urllib.parse.quote(str(payloadTemplateId), safe="") + resource = f"/organizations/{organizationId}/webhooks/payloadTemplates/{payloadTemplateId}" + + return self._session.get(metadata, resource) + + def deleteOrganizationWebhooksPayloadTemplate(self, organizationId: str, payloadTemplateId: str): + """ + **Destroy a webhook payload template for an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-webhooks-payload-template + + - organizationId (string): Organization ID + - payloadTemplateId (string): Payload template ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "payloadTemplates"], + "operation": "deleteOrganizationWebhooksPayloadTemplate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + payloadTemplateId = urllib.parse.quote(str(payloadTemplateId), safe="") + resource = f"/organizations/{organizationId}/webhooks/payloadTemplates/{payloadTemplateId}" + + return self._session.delete(metadata, resource) + + def updateOrganizationWebhooksPayloadTemplate(self, organizationId: str, payloadTemplateId: str, **kwargs): + """ + **Update a webhook payload template for an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-webhooks-payload-template + + - organizationId (string): Organization ID + - payloadTemplateId (string): Payload template ID + - name (string): The name of the template + - body (string): The liquid template used for the body of the webhook message. + - headers (array): The liquid template used with the webhook headers. + - bodyFile (string): A file containing liquid template used for the body of the webhook message. + - headersFile (string): A file containing the liquid template used with the webhook headers. + - sharing (object): Information on which entities have access to the template + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "webhooks", "payloadTemplates"], + "operation": "updateOrganizationWebhooksPayloadTemplate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + payloadTemplateId = urllib.parse.quote(str(payloadTemplateId), safe="") + resource = f"/organizations/{organizationId}/webhooks/payloadTemplates/{payloadTemplateId}" + + body_params = [ + "name", + "body", + "headers", + "bodyFile", + "headersFile", + "sharing", + ] + 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"updateOrganizationWebhooksPayloadTemplate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def createOrganizationWebhooksWebhookTest(self, organizationId: str, url: str, **kwargs): + """ + **Send a test webhook for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-webhooks-webhook-test + + - organizationId (string): Organization ID + - url (string): The URL where the test webhook will be sent + - sharedSecret (string): The shared secret the test webhook will send. Optional. Defaults to HTTP server's shared secret. Otherwise, defaults to an empty string. + - payloadTemplateId (string): The ID of the payload template of the test webhook. Defaults to the HTTP server's template ID if one exists for the given URL, or Generic template ID otherwise + - payloadTemplateName (string): The name of the payload template. + - alertTypeId (string): The type of alert which the test webhook will send. Optional. Defaults to insight_app_outage_start. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["organizations", "configure", "webhooks", "webhookTests"], + "operation": "createOrganizationWebhooksWebhookTest", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/webhooks/webhookTests" + + body_params = [ + "url", + "sharedSecret", + "payloadTemplateId", + "payloadTemplateName", + "alertTypeId", + ] + 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"createOrganizationWebhooksWebhookTest: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationWebhooksWebhookTest(self, organizationId: str, webhookTestId: str): + """ + **Return the status of a webhook test for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-webhooks-webhook-test + + - organizationId (string): Organization ID + - webhookTestId (string): Webhook test ID + """ + + metadata = { + "tags": ["organizations", "configure", "webhooks", "webhookTests"], + "operation": "getOrganizationWebhooksWebhookTest", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + webhookTestId = urllib.parse.quote(str(webhookTestId), safe="") + resource = f"/organizations/{organizationId}/webhooks/webhookTests/{webhookTestId}" + + return self._session.get(metadata, resource) diff --git a/meraki/api/secureConnect.py b/meraki/api/secureConnect.py new file mode 100644 index 0000000..75a773a --- /dev/null +++ b/meraki/api/secureConnect.py @@ -0,0 +1,1084 @@ +import urllib + + +class SecureConnect(object): + def __init__(self, session): + super(SecureConnect, self).__init__() + self._session = session + + def getOrganizationSecureConnectPrivateApplicationGroups( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Provides a list of private application groups for an Organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-private-application-groups + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - nameIncludes (string): Optional parameter to search the application group list by group name, case is ignored + - applicationGroupIds (array): List of application group ids attached to fetch + - sortBy (string): Optional parameter to specify the field used to sort objects. + - sortOrder (string): Optional parameter to specify the sort order. Default value is asc. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["applicationGroupId", "modifiedAt", "name"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplicationGroups"], + "operation": "getOrganizationSecureConnectPrivateApplicationGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplicationGroups" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "nameIncludes", + "applicationGroupIds", + "sortBy", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "applicationGroupIds", + ] + 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"getOrganizationSecureConnectPrivateApplicationGroups: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSecureConnectPrivateApplicationGroup(self, organizationId: str, name: str, **kwargs): + """ + **Creates a group of private applications to apply to policy** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-private-application-group + + - organizationId (string): Organization ID + - name (string): Application Group Name. This is required and cannot have any special characters other than spaces and hyphens + - description (string): Optional short description for application group + - applicationIds (array): List of application ids attached to this Private Application Group + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplicationGroups"], + "operation": "createOrganizationSecureConnectPrivateApplicationGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplicationGroups" + + body_params = [ + "name", + "description", + "applicationIds", + ] + 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"createOrganizationSecureConnectPrivateApplicationGroup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationSecureConnectPrivateApplicationGroup(self, organizationId: str, id: str, name: str, **kwargs): + """ + **Update an application group in an Organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-secure-connect-private-application-group + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Application Group Name. This is required and cannot have any special characters other than spaces and hyphens + - description (string): Optional short description for application group + - applicationIds (array): List of application ids attached to this Private Application Group + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplicationGroups"], + "operation": "updateOrganizationSecureConnectPrivateApplicationGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplicationGroups/{id}" + + body_params = [ + "name", + "description", + "applicationIds", + ] + 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"updateOrganizationSecureConnectPrivateApplicationGroup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSecureConnectPrivateApplicationGroup(self, organizationId: str, id: str, **kwargs): + """ + **Deletes private application group from an Organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-secure-connect-private-application-group + + - organizationId (string): Organization ID + - id (string): ID + - force (boolean): Boolean flag to force delete application group, even if application group is in use by one or more rules. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplicationGroups"], + "operation": "deleteOrganizationSecureConnectPrivateApplicationGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplicationGroups/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSecureConnectPrivateApplicationGroup(self, organizationId: str, id: str): + """ + **Return the details of a specific private application group** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-private-application-group + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["secureConnect", "configure", "privateApplicationGroups"], + "operation": "getOrganizationSecureConnectPrivateApplicationGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplicationGroups/{id}" + + return self._session.get(metadata, resource) + + def getOrganizationSecureConnectPrivateApplications(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Provides a list of private applications for an Organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-private-applications + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - nameIncludes (string): Optional parameter to filter the private applications list by application and associated application group names, case is ignored + - applicationGroupIds (array): Optional parameter for filtering the list of private applications belonging to the application group identified by the given IDs. + - appTypes (array): Optional parameter for filtering the list of private applications by applications that contain at least one destination with the specified accessType value. + - sortBy (string): Optional parameter to specify the field used to sort objects. + - sortOrder (string): Optional parameter to specify the sort order. Default value is asc. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["modifiedAt", "name"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplications"], + "operation": "getOrganizationSecureConnectPrivateApplications", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplications" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "nameIncludes", + "applicationGroupIds", + "appTypes", + "sortBy", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "applicationGroupIds", + "appTypes", + ] + 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"getOrganizationSecureConnectPrivateApplications: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSecureConnectPrivateApplication(self, organizationId: str, name: str, destinations: list, **kwargs): + """ + **Adds a new private application to the Organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-private-application + + - organizationId (string): Organization ID + - name (string): Name of Application. This is required and should be unique across all applications for a given organization. Name cannot have any special characters other than spaces and hyphens. + - destinations (array): List of IP address destinations. + - description (string): Optional Text description for Application + - appProtocol (string): Protocol for communication between proxy to private application. Applicable for Browser Based Access only. + - sni (string): Optional SNI. Applicable for Browser Based Access only. SNI should be a valid domain. + - externalFQDN (string): Cisco or Customer Managed URL for Application. Applicable for Browser Based Access only. This field is system generated based on the application name and organization ID and overrides user input in payload. This value must be unique across all applications for a given organization. + - sslVerificationEnabled (boolean): Enable Upstream SSL verification for the internally hosted URL by the customer. Applicable for Browser Based Access only. Default is true. + - applicationGroupIds (array): List of application group ids attached to this Private Application + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplications"], + "operation": "createOrganizationSecureConnectPrivateApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplications" + + body_params = [ + "name", + "description", + "destinations", + "appProtocol", + "sni", + "externalFQDN", + "sslVerificationEnabled", + "applicationGroupIds", + ] + 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"createOrganizationSecureConnectPrivateApplication: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationSecureConnectPrivateApplication( + self, organizationId: str, id: str, name: str, destinations: list, **kwargs + ): + """ + **Updates a specific private application** + https://developer.cisco.com/meraki/api-v1/#!update-organization-secure-connect-private-application + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of Application. This is required and should be unique across all applications for a given organization. Name cannot have any special characters other than spaces and hyphens. + - destinations (array): List of IP address destinations. + - description (string): Optional Text description for Application + - appProtocol (string): Protocol for communication between proxy to private application. Applicable for Browser Based Access only. + - sni (string): Optional SNI. Applicable for Browser Based Access only. SNI should be a valid domain. + - externalFQDN (string): Cisco or Customer Managed URL for Application. Applicable for Browser Based Access only. This field is system generated based on the application name and organization ID and overrides user input in payload. This value must be unique across all applications for a given organization. + - sslVerificationEnabled (boolean): Enable Upstream SSL verification for the internally hosted URL by the customer. Applicable for Browser Based Access only. Default is true. + - applicationGroupIds (array): List of application group ids attached to this Private Application + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplications"], + "operation": "updateOrganizationSecureConnectPrivateApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplications/{id}" + + body_params = [ + "name", + "description", + "destinations", + "appProtocol", + "sni", + "externalFQDN", + "sslVerificationEnabled", + "applicationGroupIds", + ] + 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"updateOrganizationSecureConnectPrivateApplication: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSecureConnectPrivateApplication(self, organizationId: str, id: str, **kwargs): + """ + **Deletes a specific private application** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-secure-connect-private-application + + - organizationId (string): Organization ID + - id (string): ID + - force (boolean): Boolean flag to force delete application, even if application is in use by one or more rules. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateApplications"], + "operation": "deleteOrganizationSecureConnectPrivateApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplications/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSecureConnectPrivateApplication(self, organizationId: str, id: str): + """ + **Return the details of a specific private application** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-private-application + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["secureConnect", "configure", "privateApplications"], + "operation": "getOrganizationSecureConnectPrivateApplication", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateApplications/{id}" + + return self._session.get(metadata, resource) + + def getOrganizationSecureConnectPrivateResourceGroups(self, organizationId: str): + """ + **Provides a list of the private resource groups in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-private-resource-groups + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["secureConnect", "configure", "privateResourceGroups"], + "operation": "getOrganizationSecureConnectPrivateResourceGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResourceGroups" + + return self._session.get(metadata, resource) + + def createOrganizationSecureConnectPrivateResourceGroup(self, organizationId: str, name: str, **kwargs): + """ + **Adds a new private resource group to an organization.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-private-resource-group + + - organizationId (string): Organization ID + - name (string): Name of group. This is required and should be unique across all groups for a given organization. Name cannot have any special characters other than spaces and hyphens. + - description (string): Optional text description for a group. + - resourceIds (array): List of resource ids assigned to this group. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateResourceGroups"], + "operation": "createOrganizationSecureConnectPrivateResourceGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResourceGroups" + + body_params = [ + "name", + "description", + "resourceIds", + ] + 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"createOrganizationSecureConnectPrivateResourceGroup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationSecureConnectPrivateResourceGroup(self, organizationId: str, id: str, name: str, **kwargs): + """ + **Updates a specific private resource group.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-secure-connect-private-resource-group + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of group. This is required and should be unique across all groups for a given organization. Name cannot have any special characters other than spaces and hyphens. + - description (string): Optional text description for a group. + - resourceIds (array): List of resource ids assigned to this group. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateResourceGroups"], + "operation": "updateOrganizationSecureConnectPrivateResourceGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResourceGroups/{id}" + + body_params = [ + "name", + "description", + "resourceIds", + ] + 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"updateOrganizationSecureConnectPrivateResourceGroup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSecureConnectPrivateResourceGroup(self, organizationId: str, id: str): + """ + **Deletes a specific private resource group.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-secure-connect-private-resource-group + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["secureConnect", "configure", "privateResourceGroups"], + "operation": "deleteOrganizationSecureConnectPrivateResourceGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResourceGroups/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSecureConnectPrivateResources(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Provides a list of private resources for an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-private-resources + + - 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 + - perPage (string): Number of resources to return for a paginated response. + - startingAfter (string): The name of the resource to start after for a paginated response. Use '' for the first page. + - endingBefore (string): The name of the resource to end before for a paginated response. Use '' for the final page. + - sortBy (string): Parameter to specify the field used to sort objects, by default, resources are returned by name asc. + - sortOrder (string): Parameter to specify the direction used to sort objects, by default, resources are returned by name asc. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateResources"], + "operation": "getOrganizationSecureConnectPrivateResources", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResources" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortBy", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSecureConnectPrivateResources: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSecureConnectPrivateResource( + self, organizationId: str, name: str, accessTypes: list, resourceAddresses: list, **kwargs + ): + """ + **Adds a new private resource to the organization.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-private-resource + + - organizationId (string): Organization ID + - name (string): Name of resource. This is required and should be unique across all resources for a given organization. Name cannot have any special characters other than spaces and hyphens. + - accessTypes (array): List of access types. + - resourceAddresses (array): List of resource addresses Protocols must be unique in this list. + - description (string): Optional text description for a resource. + - resourceGroupIds (array): List of resource group ids attached to this resource. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateResources"], + "operation": "createOrganizationSecureConnectPrivateResource", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResources" + + body_params = [ + "name", + "description", + "accessTypes", + "resourceAddresses", + "resourceGroupIds", + ] + 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"createOrganizationSecureConnectPrivateResource: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationSecureConnectPrivateResource( + self, organizationId: str, id: str, name: str, accessTypes: list, resourceAddresses: list, **kwargs + ): + """ + **Updates a specific private resource.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-secure-connect-private-resource + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of resource. This is required and should be unique across all resources for a given organization.Name cannot have any special characters other than spaces and hyphens. + - accessTypes (array): List of access types. + - resourceAddresses (array): List of resource addresses Protocols must be unique in this list. + - description (string): Optional text description for resource. + - resourceGroupIds (array): List of resource group ids attached to this resource. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "privateResources"], + "operation": "updateOrganizationSecureConnectPrivateResource", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResources/{id}" + + body_params = [ + "name", + "description", + "accessTypes", + "resourceAddresses", + "resourceGroupIds", + ] + 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"updateOrganizationSecureConnectPrivateResource: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSecureConnectPrivateResource(self, organizationId: str, id: str): + """ + **Deletes a specific private resource** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-secure-connect-private-resource + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["secureConnect", "configure", "privateResources"], + "operation": "deleteOrganizationSecureConnectPrivateResource", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/privateResources/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSecureConnectPublicApplications(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Provides a list of public applications for an Organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-public-applications + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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. + - nameIncludes (string): Optional parameter to filter the public applications list by application name, case is ignored + - risks (array): List of risk levels to filter by + - categories (array): List of categories to filter by + - appTypes (array): List of app types to filter by + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + - sortBy (string): Optional parameter to specify the field used to sort objects, by default, applications are returned by lastDetected desc + - sortOrder (string): Optional parameter to specify the sort order. Default value is desc. + """ + + kwargs.update(locals()) + + if "sortBy" in kwargs: + options = ["appType", "category", "lastDetected", "name", "risk"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "configure", "publicApplications"], + "operation": "getOrganizationSecureConnectPublicApplications", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/publicApplications" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "nameIncludes", + "risks", + "categories", + "appTypes", + "t0", + "t1", + "timespan", + "sortBy", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "risks", + "categories", + "appTypes", + ] + 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"getOrganizationSecureConnectPublicApplications: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSecureConnectRegions(self, organizationId: str, **kwargs): + """ + **List deployed cloud hubs and regions in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-regions + + - organizationId (string): Organization ID + - regionType (string): Filter results by region type + """ + + kwargs.update(locals()) + + if "regionType" in kwargs: + options = ["CNHE", "CloudHub", "Region", "ThirdParty"] + assert kwargs["regionType"] in options, ( + f'''"regionType" cannot be "{kwargs["regionType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "configure", "regions"], + "operation": "getOrganizationSecureConnectRegions", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/regions" + + query_params = [ + "regionType", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSecureConnectRegions: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getOrganizationSecureConnectRemoteAccessLog(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the latest 5000 events logged by remote access.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-remote-access-log + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5000. Default is 50. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + - identityids (string): An identity ID or comma-delimited list of identity ID. + - identitytypes (string): An identity type or comma-delimited list of identity type. + - connectionevent (string): Specify the type of connection event. + - anyconnectversions (string): Specify a comma-separated list of AnyConnect Roaming Security module + versions to filter the data. + - osversions (string): Specify a comma-separated list of OS versions to filter the data. + """ + + kwargs.update(locals()) + + if "connectionevent" in kwargs: + options = ["connected", "disconnected", "failed"] + assert kwargs["connectionevent"] in options, ( + f'''"connectionevent" cannot be "{kwargs["connectionevent"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "monitor", "remoteAccessLog"], + "operation": "getOrganizationSecureConnectRemoteAccessLog", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/remoteAccessLog" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "identityids", + "identitytypes", + "connectionevent", + "anyconnectversions", + "osversions", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSecureConnectRemoteAccessLog: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSecureConnectRemoteAccessLogsExports( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Provides a list of remote access logs exports for an Organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-remote-access-logs-exports + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - status (string): Filter exports by status. + """ + + kwargs.update(locals()) + + if "status" in kwargs: + options = ["complete", "continue", "error", "in_progress", "new", "zip"] + assert kwargs["status"] in options, ( + f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "configure", "remoteAccessLogsExports"], + "operation": "getOrganizationSecureConnectRemoteAccessLogsExports", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/remoteAccessLogsExports" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "status", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSecureConnectRemoteAccessLogsExports: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSecureConnectRemoteAccessLogsExport(self, organizationId: str, **kwargs): + """ + **Creates an export for a provided timestamp interval.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-remote-access-logs-export + + - organizationId (string): Organization ID + - t0 (string): The start of the interval, must be within the past 30 days. Must be provided with t1. + - t1 (string): The end of the interval, must not exceed the current date. Must be provided with t0. + - from (integer): Legacy start of the interval in epoch seconds, must be within the past 30 days. Must be provided with to. + - to (integer): Legacy end of the interval in epoch seconds, must not exceed the current date. Must be provided with from. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "remoteAccessLogsExports"], + "operation": "createOrganizationSecureConnectRemoteAccessLogsExport", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/remoteAccessLogsExports" + + body_params = [ + "t0", + "t1", + "from", + "to", + ] + 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"createOrganizationSecureConnectRemoteAccessLogsExport: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSecureConnectRemoteAccessLogsExportsDownload( + self, organizationId: str, id: str, fileType: str, **kwargs + ): + """ + **Redirects to the download link of the completed export.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-remote-access-logs-exports-download + + - organizationId (string): Organization ID + - id (string): Export ID. + - fileType (string): Export download file type. + """ + + kwargs = locals() + + metadata = { + "tags": ["secureConnect", "configure", "remoteAccessLogsExports", "download"], + "operation": "getOrganizationSecureConnectRemoteAccessLogsExportsDownload", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/remoteAccessLogsExports/download" + + query_params = [ + "id", + "fileType", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSecureConnectRemoteAccessLogsExportsDownload: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationSecureConnectRemoteAccessLogsExport(self, organizationId: str, id: str): + """ + **Return the details of a specific remote access logs export** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-remote-access-logs-export + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["secureConnect", "configure", "remoteAccessLogsExports"], + "operation": "getOrganizationSecureConnectRemoteAccessLogsExport", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/secureConnect/remoteAccessLogsExports/{id}" + + return self._session.get(metadata, resource) + + def getOrganizationSecureConnectSites(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List sites in this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-secure-connect-sites + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - search (string): If provided, filters results by search string + - enrolledState (string): Filter results by sites that have already been enrolled or can be enrolled. Acceptable values are 'enrolled' or 'enrollable + """ + + kwargs.update(locals()) + + if "enrolledState" in kwargs: + options = ["enrollable", "enrolled"] + assert kwargs["enrolledState"] in options, ( + f'''"enrolledState" cannot be "{kwargs["enrolledState"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["secureConnect", "configure", "sites"], + "operation": "getOrganizationSecureConnectSites", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/sites" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "search", + "enrolledState", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSecureConnectSites: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSecureConnectSite(self, organizationId: str, **kwargs): + """ + **Enroll sites in this organization to Secure Connect** + https://developer.cisco.com/meraki/api-v1/#!create-organization-secure-connect-site + + - organizationId (string): Organization ID + - enrollments (array): List of Meraki SD-WAN sites with the associated regions to be enrolled. + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "sites"], + "operation": "createOrganizationSecureConnectSite", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/sites" + + body_params = [ + "enrollments", + "callback", + ] + 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"createOrganizationSecureConnectSite: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def deleteOrganizationSecureConnectSites(self, organizationId: str, **kwargs): + """ + **Detach given sites from Secure Connect** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-secure-connect-sites + + - organizationId (string): Organization ID + - sites (array): List of site IDs to detach + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["secureConnect", "configure", "sites"], + "operation": "deleteOrganizationSecureConnectSites", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/secureConnect/sites" + + return self._session.delete(metadata, resource) diff --git a/meraki/api/sensor.py b/meraki/api/sensor.py index 2807976..9c901de 100644 --- a/meraki/api/sensor.py +++ b/meraki/api/sensor.py @@ -74,9 +74,10 @@ def createDeviceSensorCommand(self, serial: str, operation: str, **kwargs): - serial (string): Serial - operation (string): Operation to run on the sensor. 'enableDownstreamPower', 'disableDownstreamPower', and 'cycleDownstreamPower' turn power on/off to the device that is connected downstream of an MT40 power monitor. 'refreshData' causes an MT15 or MT40 device to upload its latest readings so that they are immediately available in the Dashboard API. + - arguments (array): Additional options to provide to commands run on the sensor, each with a corresponding 'name' and 'value'. """ - kwargs = locals() + kwargs.update(locals()) if "operation" in kwargs: options = ["cycleDownstreamPower", "disableDownstreamPower", "enableDownstreamPower", "refreshData"] @@ -92,6 +93,7 @@ def createDeviceSensorCommand(self, serial: str, operation: str, **kwargs): resource = f"/devices/{serial}/sensor/commands" body_params = [ + "arguments", "operation", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -456,6 +458,103 @@ def getNetworkSensorRelationships(self, networkId: str): return self._session.get(metadata, resource) + def getNetworkSensorSchedules(self, networkId: str): + """ + **Returns a list of all sensor schedules.** + https://developer.cisco.com/meraki/api-v1/#!get-network-sensor-schedules + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["sensor", "configure", "schedules"], + "operation": "getNetworkSensorSchedules", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sensor/schedules" + + return self._session.get(metadata, resource) + + def getOrganizationSensorAlerts(self, organizationId: str, networkIds: list, total_pages=1, direction="next", **kwargs): + """ + **Return a list of sensor alert events** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sensor-alerts + + - organizationId (string): Organization ID + - networkIds (array): Filters alerts by network. For now, this must be a single network 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 10. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 365 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 365 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 365 days. The default is 365 days. + - sensorSerial (string): Filters alerts to those triggered by this sensor. + - triggerMetric (string): Filters alerts to those triggered by this metric. + """ + + kwargs.update(locals()) + + if "triggerMetric" in kwargs: + options = [ + "apparentPower", + "co2", + "current", + "door", + "frequency", + "humidity", + "indoorAirQuality", + "noise", + "pm25", + "powerFactor", + "realPower", + "temperature", + "tvoc", + "upstreamPower", + "voltage", + "water", + ] + assert kwargs["triggerMetric"] in options, ( + f'''"triggerMetric" cannot be "{kwargs["triggerMetric"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["sensor", "monitor", "alerts"], + "operation": "getOrganizationSensorAlerts", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sensor/alerts" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "sensorSerial", + "networkIds", + "triggerMetric", + ] + 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"getOrganizationSensorAlerts: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationSensorGatewaysConnectionsLatest(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Returns latest sensor-gateway connectivity data.** @@ -564,6 +663,72 @@ def getOrganizationSensorReadingsHistory(self, organizationId: str, total_pages= return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationSensorReadingsHistoryByInterval(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return all reported readings from sensors in a given timespan, summarized as a series of intervals, sorted by interval start time in descending order** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sensor-readings-history-by-interval + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 730 days, 11 hours, 38 minutes, and 24 seconds from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 730 days, 11 hours, 38 minutes, and 24 seconds after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 730 days, 11 hours, 38 minutes, and 24 seconds. The default is 7 days. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 15, 120, 300, 900, 3600, 14400, 86400, 604800. The default is 86400. Interval is calculated if time params are provided. + - networkIds (array): Optional parameter to filter readings by network. + - serials (array): Optional parameter to filter readings by sensor. + - metrics (array): Types of sensor readings to retrieve. If no metrics are supplied, all available types of readings will be retrieved. + - models (array): Optional parameter to filter readings by one or more models. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["sensor", "monitor", "readings", "history", "byInterval"], + "operation": "getOrganizationSensorReadingsHistoryByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sensor/readings/history/byInterval" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "serials", + "metrics", + "models", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "metrics", + "models", + ] + 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"getOrganizationSensorReadingsHistoryByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationSensorReadingsLatest(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Return the latest available reading for each metric from each sensor, sorted by sensor serial** diff --git a/meraki/api/sm.py b/meraki/api/sm.py index c79ab08..e4f811c 100644 --- a/meraki/api/sm.py +++ b/meraki/api/sm.py @@ -894,6 +894,379 @@ def getNetworkSmProfiles(self, networkId: str, **kwargs): return self._session.get(metadata, resource, params) + def getNetworkSmScripts(self, networkId: str): + """ + **List the scripts for this network** + https://developer.cisco.com/meraki/api-v1/#!get-network-sm-scripts + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["sm", "configure", "scripts"], + "operation": "getNetworkSmScripts", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sm/scripts" + + return self._session.get(metadata, resource) + + def createNetworkSmScript(self, networkId: str, name: str, platform: str, **kwargs): + """ + **Create a new script** + https://developer.cisco.com/meraki/api-v1/#!create-network-sm-script + + - networkId (string): Network ID + - name (string): Unique name to identify this script. + - platform (string): Platform that this script will run on. + - scope (string): The target scope of the script. (Either scope or targetGroupId must be present.) + - tags (array): The target tags of the script as an array of strings. Required if scope is one of withAny, withoutAny, withAll, withoutAll. + - targetGroupId (string): The tag target group ID that should be used to scope devices. Either scope or targetGroupId must be present. + - description (string): Description of this script. + - runAsUsername (string): Username that script should run as. + - externalSource (object): Properties for a script provided by a url instead of an upload + - upload (object): Properties for a script provided as an upload instead of a url + - schedule (object): When the script is intended to run + """ + + kwargs.update(locals()) + + if "platform" in kwargs and kwargs["platform"] is not None: + options = ["Windows", "macOS"] + assert kwargs["platform"] in options, ( + f'''"platform" cannot be "{kwargs["platform"]}", & must be set to one of: {options}''' + ) + if "scope" in kwargs: + options = ["all", "none", "withAll", "withAny", "withoutAll", "withoutAny"] + assert kwargs["scope"] in options, f'''"scope" cannot be "{kwargs["scope"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["sm", "configure", "scripts"], + "operation": "createNetworkSmScript", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sm/scripts" + + body_params = [ + "name", + "platform", + "scope", + "tags", + "targetGroupId", + "description", + "runAsUsername", + "externalSource", + "upload", + "schedule", + ] + 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"createNetworkSmScript: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def createNetworkSmScriptsJob(self, networkId: str, scriptId: str, **kwargs): + """ + **Create a job that will run a script on a set of devices** + https://developer.cisco.com/meraki/api-v1/#!create-network-sm-scripts-job + + - networkId (string): Network ID + - scriptId (string): ID of script that should be run on the matching devices + - deviceIds (array): List of device IDs to run that should run this script + - deviceFilter (string): Create job on all devices in-scope or devices that have failed to run this script + """ + + kwargs.update(locals()) + + if "deviceFilter" in kwargs: + options = ["All", "Failed"] + assert kwargs["deviceFilter"] in options, ( + f'''"deviceFilter" cannot be "{kwargs["deviceFilter"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["sm", "configure", "scripts", "jobs"], + "operation": "createNetworkSmScriptsJob", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sm/scripts/jobs" + + body_params = [ + "scriptId", + "deviceIds", + "deviceFilter", + ] + 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"createNetworkSmScriptsJob: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getNetworkSmScriptsJobsStatusesLatestByScriptByInterval(self, networkId: str, **kwargs): + """ + **List the latest script job statuses by script and by interval** + https://developer.cisco.com/meraki/api-v1/#!get-network-sm-scripts-jobs-statuses-latest-by-script-by-interval + + - networkId (string): Network ID + - scriptIds (array): List of script IDs to fetch statuses + - t0 (string): The beginning of the timespan for the data. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 180 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 180 days. The default is 1 day. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["sm", "configure", "scripts", "jobs", "statuses", "latest", "byScript", "byInterval"], + "operation": "getNetworkSmScriptsJobsStatusesLatestByScriptByInterval", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sm/scripts/jobs/statuses/latest/byScript/byInterval" + + query_params = [ + "scriptIds", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "scriptIds", + ] + 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"getNetworkSmScriptsJobsStatusesLatestByScriptByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getNetworkSmScriptsJobsStatusesLatestByScriptAndDevice( + self, networkId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List jobs for a given script and/or device** + https://developer.cisco.com/meraki/api-v1/#!get-network-sm-scripts-jobs-statuses-latest-by-script-and-device + + - networkId (string): Network 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 + - deviceId (string): Query parameter for filtering the list of script job statuses to those belonging to the specified deviceId. + - scriptId (string): Query parameter for filtering the list of script job statuses to those belonging to the specified script. + - inScopeOnly (boolean): If true, show only job statuses for scripts or devices that are in scope. This only applies when either deviceId or scriptId are given. + - status (string): Query parameter for filtering the list of job statuses to those having the specified status. + - sortOrder (string): Query parameter for specifying the direction of sorting to use for the given sortKey. This param is overridden if startingAfter or endingBefore is provided. + - sortKey (string): Query parameter to sort the script tasks by the value of the specified key. This param is overridden if startingAfter or endingBefore is provided. + - perPage (integer): Number of results to show per page. + - startingAfter (string): A statusId. Start the search cursor after the specified Status record. + - endingBefore (string): A statusId. Search backward with the cursor starting before the specified Status record. + """ + + kwargs.update(locals()) + + if "status" in kwargs: + options = [ + "cancelled", + "command failed", + "completed", + "created", + "enqueued", + "error", + "failed", + "pending", + "running", + "success", + "unknown", + ] + assert kwargs["status"] in options, ( + f'''"status" cannot be "{kwargs["status"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + if "sortKey" in kwargs: + options = ["completedAt", "createdAt", "enqueuedAt", "status", "updatedAt"] + assert kwargs["sortKey"] in options, ( + f'''"sortKey" cannot be "{kwargs["sortKey"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["sm", "configure", "scripts", "jobs", "statuses", "latest", "byScriptAndDevice"], + "operation": "getNetworkSmScriptsJobsStatusesLatestByScriptAndDevice", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sm/scripts/jobs/statuses/latest/byScriptAndDevice" + + query_params = [ + "deviceId", + "scriptId", + "inScopeOnly", + "status", + "sortOrder", + "sortKey", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getNetworkSmScriptsJobsStatusesLatestByScriptAndDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createNetworkSmScriptsUpload(self, networkId: str, size: str, **kwargs): + """ + **Creates an upload URL that can be used to upload a script** + https://developer.cisco.com/meraki/api-v1/#!create-network-sm-scripts-upload + + - networkId (string): Network ID + - size (string): Size of the file in bytes that will be uploaded. + """ + + kwargs = locals() + + metadata = { + "tags": ["sm", "configure", "scripts", "uploads"], + "operation": "createNetworkSmScriptsUpload", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/sm/scripts/uploads" + + body_params = [ + "size", + ] + 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"createNetworkSmScriptsUpload: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getNetworkSmScript(self, networkId: str, scriptId: str): + """ + **Return a script** + https://developer.cisco.com/meraki/api-v1/#!get-network-sm-script + + - networkId (string): Network ID + - scriptId (string): Script ID + """ + + metadata = { + "tags": ["sm", "configure", "scripts"], + "operation": "getNetworkSmScript", + } + networkId = urllib.parse.quote(str(networkId), safe="") + scriptId = urllib.parse.quote(str(scriptId), safe="") + resource = f"/networks/{networkId}/sm/scripts/{scriptId}" + + return self._session.get(metadata, resource) + + def updateNetworkSmScript(self, networkId: str, scriptId: str, **kwargs): + """ + **Update an existing script** + https://developer.cisco.com/meraki/api-v1/#!update-network-sm-script + + - networkId (string): Network ID + - scriptId (string): Script ID + - name (string): Unique name to identify this script. + - platform (string): Platform that this script will run on. + - scope (string): The target scope of the script. (Either scope or targetGroupId must be present.) + - tags (array): The target tags of the script as an array of strings. Required if scope is one of withAny, withoutAny, withAll, withoutAll. + - targetGroupId (string): The tag target group ID that should be used to scope devices. Either scope or targetGroupId must be present. + - description (string): Description of this script. + - runAsUsername (string): Username that script should run as. + - externalSource (object): Properties for a script provided by a url instead of an upload + - upload (object): Properties for a script provided as an upload instead of a url + - schedule (object): When the script is intended to run + """ + + kwargs.update(locals()) + + if "platform" in kwargs and kwargs["platform"] is not None: + options = ["Windows", "macOS"] + assert kwargs["platform"] in options, ( + f'''"platform" cannot be "{kwargs["platform"]}", & must be set to one of: {options}''' + ) + if "scope" in kwargs: + options = ["all", "none", "withAll", "withAny", "withoutAll", "withoutAny"] + assert kwargs["scope"] in options, f'''"scope" cannot be "{kwargs["scope"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["sm", "configure", "scripts"], + "operation": "updateNetworkSmScript", + } + networkId = urllib.parse.quote(str(networkId), safe="") + scriptId = urllib.parse.quote(str(scriptId), safe="") + resource = f"/networks/{networkId}/sm/scripts/{scriptId}" + + body_params = [ + "name", + "platform", + "scope", + "tags", + "targetGroupId", + "description", + "runAsUsername", + "externalSource", + "upload", + "schedule", + ] + 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"updateNetworkSmScript: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteNetworkSmScript(self, networkId: str, scriptId: str): + """ + **Delete a script** + https://developer.cisco.com/meraki/api-v1/#!delete-network-sm-script + + - networkId (string): Network ID + - scriptId (string): Script ID + """ + + metadata = { + "tags": ["sm", "configure", "scripts"], + "operation": "deleteNetworkSmScript", + } + networkId = urllib.parse.quote(str(networkId), safe="") + scriptId = urllib.parse.quote(str(scriptId), safe="") + resource = f"/networks/{networkId}/sm/scripts/{scriptId}" + + return self._session.delete(metadata, resource) + def getNetworkSmTargetGroups(self, networkId: str, **kwargs): """ **List the target groups in this network** @@ -1396,6 +1769,187 @@ def getOrganizationSmApnsCert(self, organizationId: str): return self._session.get(metadata, resource) + def createOrganizationSmAppleCloudEnrollmentSyncJob(self, organizationId: str, **kwargs): + """ + **Enqueue a sync job for an ADE account** + https://developer.cisco.com/meraki/api-v1/#!create-organization-sm-apple-cloud-enrollment-sync-job + + - organizationId (string): Organization ID + - adeAccountId (string): ADE Account ID + - fullSync (boolean): Whether or not job is full sync (defaults to full sync) + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["sm", "configure", "apple", "cloudEnrollment", "syncJobs"], + "operation": "createOrganizationSmAppleCloudEnrollmentSyncJob", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sm/apple/cloudEnrollment/syncJobs" + + body_params = [ + "adeAccountId", + "fullSync", + ] + 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"createOrganizationSmAppleCloudEnrollmentSyncJob: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSmAppleCloudEnrollmentSyncJob(self, organizationId: str, syncJobId: str): + """ + **Retrieve the status of an ADE sync job** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sm-apple-cloud-enrollment-sync-job + + - organizationId (string): Organization ID + - syncJobId (string): Sync job ID + """ + + metadata = { + "tags": ["sm", "configure", "apple", "cloudEnrollment", "syncJobs"], + "operation": "getOrganizationSmAppleCloudEnrollmentSyncJob", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + syncJobId = urllib.parse.quote(str(syncJobId), safe="") + resource = f"/organizations/{organizationId}/sm/apple/cloudEnrollment/syncJobs/{syncJobId}" + + return self._session.get(metadata, resource) + + def createOrganizationSmBulkEnrollmentToken(self, organizationId: str, networkId: str, expiresAt: str, **kwargs): + """ + **Create a PccBulkEnrollmentToken** + https://developer.cisco.com/meraki/api-v1/#!create-organization-sm-bulk-enrollment-token + + - organizationId (string): Organization ID + - networkId (string): The id of the associated node_group. + - expiresAt (string): The expiration date. + """ + + kwargs = locals() + + metadata = { + "tags": ["sm", "configure", "bulkEnrollment", "token"], + "operation": "createOrganizationSmBulkEnrollmentToken", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sm/bulkEnrollment/token" + + body_params = [ + "networkId", + "expiresAt", + ] + 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"createOrganizationSmBulkEnrollmentToken: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSmBulkEnrollmentToken(self, organizationId: str, tokenId: str): + """ + **Return a BulkEnrollmentToken** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sm-bulk-enrollment-token + + - organizationId (string): Organization ID + - tokenId (string): Token ID + """ + + metadata = { + "tags": ["sm", "configure", "bulkEnrollment", "token"], + "operation": "getOrganizationSmBulkEnrollmentToken", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + tokenId = urllib.parse.quote(str(tokenId), safe="") + resource = f"/organizations/{organizationId}/sm/bulkEnrollment/token/{tokenId}" + + return self._session.get(metadata, resource) + + def updateOrganizationSmBulkEnrollmentToken(self, organizationId: str, tokenId: str, **kwargs): + """ + **Update a PccBulkEnrollmentToken** + https://developer.cisco.com/meraki/api-v1/#!update-organization-sm-bulk-enrollment-token + + - organizationId (string): Organization ID + - tokenId (string): Token ID + - networkId (string): The id of the associated node_group. + - expiresAt (string): The expiration date. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["sm", "configure", "bulkEnrollment", "token"], + "operation": "updateOrganizationSmBulkEnrollmentToken", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + tokenId = urllib.parse.quote(str(tokenId), safe="") + resource = f"/organizations/{organizationId}/sm/bulkEnrollment/token/{tokenId}" + + body_params = [ + "networkId", + "expiresAt", + ] + 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"updateOrganizationSmBulkEnrollmentToken: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSmBulkEnrollmentToken(self, organizationId: str, tokenId: str): + """ + **Delete a PccBulkEnrollmentToken** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-sm-bulk-enrollment-token + + - organizationId (string): Organization ID + - tokenId (string): Token ID + """ + + metadata = { + "tags": ["sm", "configure", "bulkEnrollment", "token"], + "operation": "deleteOrganizationSmBulkEnrollmentToken", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + tokenId = urllib.parse.quote(str(tokenId), safe="") + resource = f"/organizations/{organizationId}/sm/bulkEnrollment/token/{tokenId}" + + return self._session.delete(metadata, resource) + + def getOrganizationSmBulkEnrollmentTokens(self, organizationId: str): + """ + **List all BulkEnrollmentTokens for an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-sm-bulk-enrollment-tokens + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["sm", "configure", "bulkEnrollment", "tokens"], + "operation": "getOrganizationSmBulkEnrollmentTokens", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/sm/bulkEnrollment/tokens" + + return self._session.get(metadata, resource) + def updateOrganizationSmSentryPoliciesAssignments(self, organizationId: str, items: list, **kwargs): """ **Update an Organizations Sentry Policies using the provided list** diff --git a/meraki/api/support.py b/meraki/api/support.py new file mode 100644 index 0000000..9fe7ab7 --- /dev/null +++ b/meraki/api/support.py @@ -0,0 +1,24 @@ +import urllib + + +class Support(object): + def __init__(self, session): + super(Support, self).__init__() + self._session = session + + def getOrganizationSupportSalesRepresentatives(self, organizationId: str): + """ + **Returns the organization's sales representatives** + https://developer.cisco.com/meraki/api-v1/#!get-organization-support-sales-representatives + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["support", "monitor", "salesRepresentatives"], + "operation": "getOrganizationSupportSalesRepresentatives", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/support/salesRepresentatives" + + return self._session.get(metadata, resource) diff --git a/meraki/api/switch.py b/meraki/api/switch.py index d5cbf2d..ca432ea 100644 --- a/meraki/api/switch.py +++ b/meraki/api/switch.py @@ -6,14 +6,17 @@ def __init__(self, session): super(Switch, self).__init__() self._session = session - def getDeviceSwitchPorts(self, serial: str): + def getDeviceSwitchPorts(self, serial: str, **kwargs): """ **List the switch ports for a switch** https://developer.cisco.com/meraki/api-v1/#!get-device-switch-ports - serial (string): Serial + - hideDefaultPorts (boolean): Optional flag that, when true, will hide modular switchports that may not be connected to the device at the moment """ + kwargs.update(locals()) + metadata = { "tags": ["switch", "configure", "ports"], "operation": "getDeviceSwitchPorts", @@ -21,7 +24,18 @@ def getDeviceSwitchPorts(self, serial: str): serial = urllib.parse.quote(str(serial), safe="") resource = f"/devices/{serial}/switch/ports" - return self._session.get(metadata, resource) + query_params = [ + "hideDefaultPorts", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getDeviceSwitchPorts: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) def cycleDeviceSwitchPorts(self, serial: str, ports: list, **kwargs): """ @@ -54,6 +68,46 @@ def cycleDeviceSwitchPorts(self, serial: str, ports: list, **kwargs): return self._session.post(metadata, resource, payload) + def updateDeviceSwitchPortsMirror(self, serial: str, source: dict, destination: dict, **kwargs): + """ + **Update a port mirror** + https://developer.cisco.com/meraki/api-v1/#!update-device-switch-ports-mirror + + - serial (string): The switch identifier + - source (object): Source ports mirror configuration + - destination (object): Destination port mirror configuration + - tags (array): Port mirror tags + - role (string): Switch role can be source or destination + - comment (string): My pretty comment + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "mirror"], + "operation": "updateDeviceSwitchPortsMirror", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/switch/ports/mirror" + + body_params = [ + "serial", + "source", + "destination", + "tags", + "role", + "comment", + ] + 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"updateDeviceSwitchPortsMirror: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getDeviceSwitchPortsStatuses(self, serial: str, **kwargs): """ **Return the status for all the ports of a switch** @@ -154,6 +208,7 @@ def updateDeviceSwitchPort(self, serial: str, portId: str, **kwargs): - vlan (integer): The VLAN of the switch port. For a trunk port, this is the native VLAN. A null value will clear the value set for trunk ports. - voiceVlan (integer): The voice VLAN of the switch port. Only applicable to access ports. - allowedVlans (string): The VLANs allowed on the switch port. Only applicable to trunk ports. + - activeVlans (string): The VLANs that are active on the switch port. Only applicable to trunk ports. - isolationEnabled (boolean): The isolation status of the switch port. - rstpEnabled (boolean): The rapid spanning tree protocol status. - stpGuard (string): The state of the STP guard ('disabled', 'root guard', 'bpdu guard' or 'loop guard'). @@ -214,6 +269,7 @@ def updateDeviceSwitchPort(self, serial: str, portId: str, **kwargs): "vlan", "voiceVlan", "allowedVlans", + "activeVlans", "isolationEnabled", "rstpEnabled", "stpGuard", @@ -303,6 +359,12 @@ def createDeviceSwitchRoutingInterface(self, serial: str, name: str, **kwargs): - multicastRouting (string): Enable multicast support if, multicast routing between VLANs is required. Options are: 'disabled', 'enabled' or 'IGMP snooping querier'. Default is 'disabled'. - vlanId (integer): The VLAN this L3 interface is on. VLAN must be between 1 and 4094. - defaultGateway (string): The next hop for any traffic that isn't going to a directly connected subnet or over a static route. This IP address must exist in a subnet with a L3 interface. Required if this is the first IPv4 interface. + - isSwitchDefaultGateway (boolean): When true, the switch uses the IPv4 uplink gateway as its IPv4 default gateway. This can only be set if the interface is designated as the IPv4 uplink and the switch is running IOS XE version >= 17.18.3. + - uplinkV4 (boolean): When true, this interface is used as static IPv4 uplink. + - candidateUplinkV4 (boolean): When true, this interface is a UAC candidate for IPv4 Uplink. + - uplinkV6 (boolean): When true, this interface is used as static IPv6 uplink. + - staticV4Dns1 (string): Primary IPv4 DNS server address + - staticV4Dns2 (string): Secondary IPv4 DNS server address - ospfSettings (object): The OSPF routing settings of the interface. - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher @@ -337,6 +399,12 @@ def createDeviceSwitchRoutingInterface(self, serial: str, name: str, **kwargs): "multicastRouting", "vlanId", "defaultGateway", + "isSwitchDefaultGateway", + "uplinkV4", + "candidateUplinkV4", + "uplinkV6", + "staticV4Dns1", + "staticV4Dns2", "ospfSettings", "ipv6", "vrf", @@ -386,6 +454,12 @@ def updateDeviceSwitchRoutingInterface(self, serial: str, interfaceId: str, **kw - multicastRouting (string): Enable multicast support if, multicast routing between VLANs is required. Options are: 'disabled', 'enabled' or 'IGMP snooping querier'. Default is 'disabled'. - vlanId (integer): The VLAN this L3 interface is on. VLAN must be between 1 and 4094. - defaultGateway (string): The next hop for any traffic that isn't going to a directly connected subnet or over a static route. This IP address must exist in a subnet with a L3 interface. Required if this is the first IPv4 interface. + - isSwitchDefaultGateway (boolean): When true, the switch uses the IPv4 uplink gateway as its IPv4 default gateway. This can only be set if the interface is designated as the IPv4 uplink and the switch is running IOS XE version >= 17.18.3. + - uplinkV4 (boolean): When true, this interface is used as static IPv4 uplink. + - candidateUplinkV4 (boolean): When true, this interface is a UAC candidate for IPv4 Uplink. + - uplinkV6 (boolean): When true, this interface is used as static IPv6 uplink. + - staticV4Dns1 (string): Primary IPv4 DNS server address + - staticV4Dns2 (string): Secondary IPv4 DNS server address - ospfSettings (object): The OSPF routing settings of the interface. - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher @@ -417,6 +491,12 @@ def updateDeviceSwitchRoutingInterface(self, serial: str, interfaceId: str, **kw "multicastRouting", "vlanId", "defaultGateway", + "isSwitchDefaultGateway", + "uplinkV4", + "candidateUplinkV4", + "uplinkV6", + "staticV4Dns1", + "staticV4Dns2", "ospfSettings", "ipv6", "vrf", @@ -1388,14 +1468,17 @@ def updateNetworkSwitchDscpToCosMappings(self, networkId: str, mappings: list, * return self._session.put(metadata, resource, payload) - def getNetworkSwitchLinkAggregations(self, networkId: str): + def getNetworkSwitchLinkAggregations(self, networkId: str, **kwargs): """ **List link aggregation groups** https://developer.cisco.com/meraki/api-v1/#!get-network-switch-link-aggregations - networkId (string): Network ID + - serials (array): Optional parameter to filter by device serial numbers. Matches multiple exact serials. """ + kwargs.update(locals()) + metadata = { "tags": ["switch", "configure", "linkAggregations"], "operation": "getNetworkSwitchLinkAggregations", @@ -1403,7 +1486,26 @@ def getNetworkSwitchLinkAggregations(self, networkId: str): networkId = urllib.parse.quote(str(networkId), safe="") resource = f"/networks/{networkId}/switch/linkAggregations" - return self._session.get(metadata, resource) + query_params = [ + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getNetworkSwitchLinkAggregations: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) def createNetworkSwitchLinkAggregation(self, networkId: str, **kwargs): """ @@ -1413,6 +1515,7 @@ def createNetworkSwitchLinkAggregation(self, networkId: str, **kwargs): - networkId (string): Network ID - switchPorts (array): Array of switch or stack ports for creating aggregation group. Minimum 2 and maximum 8 ports are supported. - switchProfilePorts (array): Array of switch profile ports for creating aggregation group. Minimum 2 and maximum 8 ports are supported. + - esiMhPairId (string): ESI-MH pair ID. Required when creating a downstream aggregation across ESI-MH pair member switches. """ kwargs.update(locals()) @@ -1427,6 +1530,7 @@ def createNetworkSwitchLinkAggregation(self, networkId: str, **kwargs): body_params = [ "switchPorts", "switchProfilePorts", + "esiMhPairId", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1652,6 +1756,126 @@ def updateNetworkSwitchPortSchedule(self, networkId: str, portScheduleId: str, * return self._session.put(metadata, resource, payload) + def getNetworkSwitchPortsProfiles(self, networkId: str): + """ + **List the port profiles in a network** + https://developer.cisco.com/meraki/api-v1/#!get-network-switch-ports-profiles + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "getNetworkSwitchPortsProfiles", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/switch/ports/profiles" + + return self._session.get(metadata, resource) + + def createNetworkSwitchPortsProfile(self, networkId: str, **kwargs): + """ + **Create a port profile in a network** + https://developer.cisco.com/meraki/api-v1/#!create-network-switch-ports-profile + + - networkId (string): Network ID + - name (string): The name of the profile. + - description (string): Text describing the profile. + - tags (array): Space-seperated list of tags + - defaultRadiusProfileName (string): When present, the default RADIUS attribute value for RADIUS-based port profile application + - authentication (object): Authentication settings for RADIUS-based port profile application. + - port (object): Configuration settings for port profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "createNetworkSwitchPortsProfile", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/switch/ports/profiles" + + body_params = [ + "name", + "description", + "tags", + "defaultRadiusProfileName", + "authentication", + "port", + ] + 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"createNetworkSwitchPortsProfile: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateNetworkSwitchPortsProfile(self, networkId: str, id: str, **kwargs): + """ + **Update a port profile in a network** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-ports-profile + + - networkId (string): Network ID + - id (string): ID + - name (string): The name of the profile. + - description (string): Text describing the profile. + - tags (array): Space-seperated list of tags + - defaultRadiusProfileName (string): When present, the default RADIUS attribute value for RADIUS-based port profile application + - authentication (object): Authentication settings for RADIUS-based port profile application. + - port (object): Configuration settings for port profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "updateNetworkSwitchPortsProfile", + } + networkId = urllib.parse.quote(str(networkId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/networks/{networkId}/switch/ports/profiles/{id}" + + body_params = [ + "name", + "description", + "tags", + "defaultRadiusProfileName", + "authentication", + "port", + ] + 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"updateNetworkSwitchPortsProfile: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteNetworkSwitchPortsProfile(self, networkId: str, id: str): + """ + **Delete a port profile from a network** + https://developer.cisco.com/meraki/api-v1/#!delete-network-switch-ports-profile + + - networkId (string): Network ID + - id (string): ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "deleteNetworkSwitchPortsProfile", + } + networkId = urllib.parse.quote(str(networkId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/networks/{networkId}/switch/ports/profiles/{id}" + + return self._session.delete(metadata, resource) + def getNetworkSwitchQosRules(self, networkId: str): """ **List quality of service rules** @@ -1855,6 +2079,64 @@ def updateNetworkSwitchQosRule(self, networkId: str, qosRuleId: str, **kwargs): return self._session.put(metadata, resource, payload) + def getNetworkSwitchRaGuardPolicy(self, networkId: str): + """ + **Return RA Guard settings** + https://developer.cisco.com/meraki/api-v1/#!get-network-switch-ra-guard-policy + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["switch", "configure", "raGuardPolicy"], + "operation": "getNetworkSwitchRaGuardPolicy", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/switch/raGuardPolicy" + + return self._session.get(metadata, resource) + + def updateNetworkSwitchRaGuardPolicy(self, networkId: str, **kwargs): + """ + **Update RA Guard settings** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-ra-guard-policy + + - networkId (string): Network ID + - defaultPolicy (string): New Router Advertisers are 'allowed' or 'blocked'. Default value is 'allowed'. + - allowedServers (array): List the MAC addresses of Router Advertisers to permit on the network when defaultPolicy is set to blocked. + - blockedServers (array): List the MAC addresses of Router Advertisers to block on the network when defaultPolicy is set to allowed. + """ + + kwargs.update(locals()) + + if "defaultPolicy" in kwargs: + options = ["allowed", "blocked"] + assert kwargs["defaultPolicy"] in options, ( + f'''"defaultPolicy" cannot be "{kwargs["defaultPolicy"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["switch", "configure", "raGuardPolicy"], + "operation": "updateNetworkSwitchRaGuardPolicy", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/switch/raGuardPolicy" + + body_params = [ + "defaultPolicy", + "allowedServers", + "blockedServers", + ] + 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"updateNetworkSwitchRaGuardPolicy: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkSwitchRoutingMulticast(self, networkId: str): """ **Return multicast settings for a network** @@ -2175,6 +2457,45 @@ def updateNetworkSwitchSettings(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) + def updateNetworkSwitchSpanningTree(self, networkId: str, **kwargs): + """ + **Updates Spanning Tree configuration** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-spanning-tree + + - networkId (string): Network ID + - enabled (boolean): Network-level spanning Tree enable + - mode (string): Catalyst Spanning Tree Protocol mode (mst, rpvst+) + - priorities (array): Spanning tree priority for switches/stacks or switch templates. An empty array will clear the priority settings. + """ + + kwargs.update(locals()) + + if "mode" in kwargs: + options = ["mst", "rpvst+"] + assert kwargs["mode"] in options, f'''"mode" cannot be "{kwargs["mode"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["switch", "configure", "spanningTree"], + "operation": "updateNetworkSwitchSpanningTree", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/switch/spanningTree" + + body_params = [ + "enabled", + "mode", + "priorities", + ] + 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"updateNetworkSwitchSpanningTree: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkSwitchStacks(self, networkId: str): """ **List the switch stacks in a network** @@ -2225,6 +2546,41 @@ def createNetworkSwitchStack(self, networkId: str, name: str, serials: list, **k return self._session.post(metadata, resource, payload) + def updateNetworkSwitchStack(self, networkId: str, switchStackId: str, **kwargs): + """ + **Update a switch stack** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-stack + + - networkId (string): Network ID + - switchStackId (string): Switch stack ID + - name (string): The name of the stack + - members (array): The list of switches that should be in the stack + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "stacks"], + "operation": "updateNetworkSwitchStack", + } + networkId = urllib.parse.quote(str(networkId), safe="") + switchStackId = urllib.parse.quote(str(switchStackId), safe="") + resource = f"/networks/{networkId}/switch/stacks/{switchStackId}" + + body_params = [ + "name", + "members", + ] + 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"updateNetworkSwitchStack: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getNetworkSwitchStack(self, networkId: str, switchStackId: str): """ **Show a switch stack** @@ -2296,6 +2652,49 @@ def addNetworkSwitchStack(self, networkId: str, switchStackId: str, serial: str, return self._session.post(metadata, resource, payload) + def updateNetworkSwitchStackPortsMirror( + self, networkId: str, switchStackId: str, source: dict, destination: dict, **kwargs + ): + """ + **Update switch port mirrors for switch stacks** + https://developer.cisco.com/meraki/api-v1/#!update-network-switch-stack-ports-mirror + + - networkId (string): Network ID + - switchStackId (string): Switch stack ID + - source (object): Source port details + - destination (object): Destination port Details + - tags (array): Port mirror tags + - role (string): Switch role can be source or destination + - comment (string): My pretty comment + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "stacks", "ports", "mirror"], + "operation": "updateNetworkSwitchStackPortsMirror", + } + networkId = urllib.parse.quote(str(networkId), safe="") + switchStackId = urllib.parse.quote(str(switchStackId), safe="") + resource = f"/networks/{networkId}/switch/stacks/{switchStackId}/ports/mirror" + + body_params = [ + "source", + "destination", + "tags", + "role", + "comment", + ] + 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"updateNetworkSwitchStackPortsMirror: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def removeNetworkSwitchStack(self, networkId: str, switchStackId: str, serial: str, **kwargs): """ **Remove a switch from a stack** @@ -2391,6 +2790,12 @@ def createNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId - multicastRouting (string): Enable multicast support if, multicast routing between VLANs is required. Options are: 'disabled', 'enabled' or 'IGMP snooping querier'. Default is 'disabled'. - vlanId (integer): The VLAN this L3 interface is on. VLAN must be between 1 and 4094. - defaultGateway (string): The next hop for any traffic that isn't going to a directly connected subnet or over a static route. This IP address must exist in a subnet with a L3 interface. Required if this is the first IPv4 interface. + - isSwitchDefaultGateway (boolean): When true, the switch uses the IPv4 uplink gateway as its IPv4 default gateway. This can only be set if the interface is designated as the IPv4 uplink and the switch is running IOS XE version >= 17.18.3. + - uplinkV4 (boolean): When true, this interface is used as static IPv4 uplink. + - candidateUplinkV4 (boolean): When true, this interface is a UAC candidate for IPv4 Uplink. + - uplinkV6 (boolean): When true, this interface is used as static IPv6 uplink. + - staticV4Dns1 (string): Primary IPv4 DNS server address + - staticV4Dns2 (string): Secondary IPv4 DNS server address - ospfSettings (object): The OSPF routing settings of the interface. - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher @@ -2426,6 +2831,12 @@ def createNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId "multicastRouting", "vlanId", "defaultGateway", + "isSwitchDefaultGateway", + "uplinkV4", + "candidateUplinkV4", + "uplinkV6", + "staticV4Dns1", + "staticV4Dns2", "ospfSettings", "ipv6", "vrf", @@ -2480,6 +2891,12 @@ def updateNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId - multicastRouting (string): Enable multicast support if, multicast routing between VLANs is required. Options are: 'disabled', 'enabled' or 'IGMP snooping querier'. Default is 'disabled'. - vlanId (integer): The VLAN this L3 interface is on. VLAN must be between 1 and 4094. - defaultGateway (string): The next hop for any traffic that isn't going to a directly connected subnet or over a static route. This IP address must exist in a subnet with a L3 interface. Required if this is the first IPv4 interface. + - isSwitchDefaultGateway (boolean): When true, the switch uses the IPv4 uplink gateway as its IPv4 default gateway. This can only be set if the interface is designated as the IPv4 uplink and the switch is running IOS XE version >= 17.18.3. + - uplinkV4 (boolean): When true, this interface is used as static IPv4 uplink. + - candidateUplinkV4 (boolean): When true, this interface is a UAC candidate for IPv4 Uplink. + - uplinkV6 (boolean): When true, this interface is used as static IPv6 uplink. + - staticV4Dns1 (string): Primary IPv4 DNS server address + - staticV4Dns2 (string): Secondary IPv4 DNS server address - ospfSettings (object): The OSPF routing settings of the interface. - ipv6 (object): The IPv6 settings of the interface. - vrf (object): The VRF settings of the interface. Requires IOS XE 17.18 or higher @@ -2512,6 +2929,12 @@ def updateNetworkSwitchStackRoutingInterface(self, networkId: str, switchStackId "multicastRouting", "vlanId", "defaultGateway", + "isSwitchDefaultGateway", + "uplinkV4", + "candidateUplinkV4", + "uplinkV6", + "staticV4Dns1", + "staticV4Dns2", "ospfSettings", "ipv6", "vrf", @@ -2911,14 +3334,68 @@ def updateNetworkSwitchStp(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) - def getOrganizationConfigTemplateSwitchProfiles(self, organizationId: str, configTemplateId: str): + def getOrganizationConfigTemplatesSwitchProfilesPortsMirrorsBySwitchProfile( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **List the switch templates for your switch template configuration** - https://developer.cisco.com/meraki/api-v1/#!get-organization-config-template-switch-profiles + **list the port mirror configurations in an organization by switch profile** + https://developer.cisco.com/meraki/api-v1/#!get-organization-config-templates-switch-profiles-ports-mirrors-by-switch-profile - organizationId (string): Organization ID - - configTemplateId (string): Config template 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 + - configTemplateIds (array): Optional parameter to filter the result set by the included set of config template IDs + - ids (array): A list of switch profile ids. The returned profiles will be filtered to only include these ids. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 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": ["switch", "configure", "configTemplates", "profiles", "ports", "mirrors", "bySwitchProfile"], + "operation": "getOrganizationConfigTemplatesSwitchProfilesPortsMirrorsBySwitchProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/configTemplates/switch/profiles/ports/mirrors/bySwitchProfile" + + query_params = [ + "configTemplateIds", + "ids", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "configTemplateIds", + "ids", + ] + 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"getOrganizationConfigTemplatesSwitchProfilesPortsMirrorsBySwitchProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationConfigTemplateSwitchProfiles(self, organizationId: str, configTemplateId: str): + """ + **List the switch templates for your switch template configuration** + https://developer.cisco.com/meraki/api-v1/#!get-organization-config-template-switch-profiles + + - organizationId (string): Organization ID + - configTemplateId (string): Config template ID + """ metadata = { "tags": ["switch", "configure", "configTemplates", "profiles"], @@ -2951,6 +3428,55 @@ def getOrganizationConfigTemplateSwitchProfilePorts(self, organizationId: str, c return self._session.get(metadata, resource) + def updateOrganizationConfigTemplateSwitchProfilePortsMirror( + self, organizationId: str, configTemplateId: str, profileId: str, source: dict, destination: dict, **kwargs + ): + """ + **Update a port mirror** + https://developer.cisco.com/meraki/api-v1/#!update-organization-config-template-switch-profile-ports-mirror + + - organizationId (string): Organization ID + - configTemplateId (string): Config template ID + - profileId (string): Profile ID + - source (object): Source ports mirror configuration + - destination (object): Destination port mirror configuration + - tags (array): Port mirror tags + - role (string): Switch role can be source or destination + - comment (string): My pretty comment + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "configTemplates", "profiles", "ports", "mirror"], + "operation": "updateOrganizationConfigTemplateSwitchProfilePortsMirror", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + configTemplateId = urllib.parse.quote(str(configTemplateId), safe="") + profileId = urllib.parse.quote(str(profileId), safe="") + resource = ( + f"/organizations/{organizationId}/configTemplates/{configTemplateId}/switch/profiles/{profileId}/ports/mirror" + ) + + body_params = [ + "source", + "destination", + "tags", + "role", + "comment", + ] + 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"updateOrganizationConfigTemplateSwitchProfilePortsMirror: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + def getOrganizationConfigTemplateSwitchProfilePort( self, organizationId: str, configTemplateId: str, profileId: str, portId: str ): @@ -2997,6 +3523,7 @@ def updateOrganizationConfigTemplateSwitchProfilePort( - vlan (integer): The VLAN of the switch template port. For a trunk port, this is the native VLAN. A null value will clear the value set for trunk ports. - voiceVlan (integer): The voice VLAN of the switch template port. Only applicable to access ports. - allowedVlans (string): The VLANs allowed on the switch template port. Only applicable to trunk ports. + - activeVlans (string): The VLANs that are active on the switch template port. Only applicable to trunk ports. - isolationEnabled (boolean): The isolation status of the switch template port. - rstpEnabled (boolean): The rapid spanning tree protocol status. - stpGuard (string): The state of the STP guard ('disabled', 'root guard', 'bpdu guard' or 'loop guard'). @@ -3059,6 +3586,7 @@ def updateOrganizationConfigTemplateSwitchProfilePort( "vlan", "voiceVlan", "allowedVlans", + "activeVlans", "isolationEnabled", "rstpEnabled", "stpGuard", @@ -3128,89 +3656,101 @@ def getOrganizationSummarySwitchPowerHistory(self, organizationId: str, **kwargs return self._session.get(metadata, resource, params) - def cloneOrganizationSwitchDevices(self, organizationId: str, sourceSerial: str, targetSerials: list, **kwargs): + def getOrganizationSwitchAlertsPoeByDevice(self, organizationId: str, networkIds: list, **kwargs): """ - **Clone port-level and some switch-level configuration settings from a source switch to one or more target switches** - https://developer.cisco.com/meraki/api-v1/#!clone-organization-switch-devices + **Gets all poe related alerts over a given network and returns information by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-alerts-poe-by-device - organizationId (string): Organization ID - - sourceSerial (string): Serial number of the source switch (must be on a network not bound to a template) - - targetSerials (array): Array of serial numbers of one or more target switches (must be on a network not bound to a template) + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. """ - kwargs = locals() + kwargs.update(locals()) metadata = { - "tags": ["switch", "configure", "devices"], - "operation": "cloneOrganizationSwitchDevices", + "tags": ["switch", "monitor", "alerts", "poe", "byDevice"], + "operation": "getOrganizationSwitchAlertsPoeByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/devices/clone" + resource = f"/organizations/{organizationId}/switch/alerts/poe/byDevice" - body_params = [ - "sourceSerial", - "targetSerials", + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + 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 = [] + body_params + 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"cloneOrganizationSwitchDevices: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationSwitchAlertsPoeByDevice: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def getOrganizationSwitchPortsBySwitch(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def aurora2OrganizationSwitchSwitchTemplates(self, organizationId: str): """ - **List the switchports in an organization by switch** - https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-by-switch + **List switch templates running IOS XE Catalyst firmware.** + https://developer.cisco.com/meraki/api-v1/#!aurora-2-organization-switch-switch-templates - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 50. - - 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. - - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. - - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. - - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. - - name (string): Optional parameter to filter items to switches with names that contain the search term or are an exact match. - - networkIds (array): Optional parameter to filter items to switches in one of the provided networks. - - portProfileIds (array): Optional parameter to filter items to switches that contain switchports belonging to one of the specified port profiles. - - serial (string): Optional parameter to filter items to switches with serial number that contains the search term or are an exact match. - - serials (array): Optional parameter to filter items to switches that have one of the provided serials. + """ + + metadata = { + "tags": ["switch", "configure"], + "operation": "aurora2OrganizationSwitchSwitchTemplates", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/aurora2SwitchTemplates" + + return self._session.get(metadata, resource) + + def getOrganizationSwitchClientsConnectionsAuthenticationByClient(self, organizationId: str, **kwargs): + """ + **Summarizes authentication outcomes per switch client across an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-clients-connections-authentication-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["switch", "configure", "ports", "bySwitch"], - "operation": "getOrganizationSwitchPortsBySwitch", + "tags": ["switch", "monitor", "clients", "connections", "authentication", "byClient"], + "operation": "getOrganizationSwitchClientsConnectionsAuthenticationByClient", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/ports/bySwitch" + resource = f"/organizations/{organizationId}/switch/clients/connections/authentication/byClient" query_params = [ - "perPage", - "startingAfter", - "endingBefore", - "configurationUpdatedAfter", - "mac", - "macs", - "name", "networkIds", - "portProfileIds", - "serial", - "serials", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "macs", "networkIds", - "portProfileIds", - "serials", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3221,66 +3761,43 @@ def getOrganizationSwitchPortsBySwitch(self, organizationId: str, total_pages=1, 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"getOrganizationSwitchPortsBySwitch: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationSwitchClientsConnectionsAuthenticationByClient: ignoring unrecognized kwargs: {invalid}" + ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationSwitchPortsClientsOverviewByDevice( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def getOrganizationSwitchClientsConnectionsDhcpByClient(self, organizationId: str, **kwargs): """ - **List the number of clients for all switchports with at least one online client in an organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-clients-overview-by-device + **Get IP assignment for all clients in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-clients-connections-dhcp-by-client - 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 - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 20. - - 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. - - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. - - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. - - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. - - name (string): Optional parameter to filter items to switches with names that contain the search term or are an exact match. - - networkIds (array): Optional parameter to filter items to switches in one of the provided networks. - - portProfileIds (array): Optional parameter to filter items to switches that contain switchports belonging to one of the specified port profiles. - - serial (string): Optional parameter to filter items to switches with serial number that contains the search term or are an exact match. - - serials (array): Optional parameter to filter items to switches that have one of the provided serials. + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["switch", "monitor", "ports", "clients", "overview", "byDevice"], - "operation": "getOrganizationSwitchPortsClientsOverviewByDevice", + "tags": ["switch", "monitor", "clients", "connections", "dhcp", "byClient"], + "operation": "getOrganizationSwitchClientsConnectionsDhcpByClient", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/ports/clients/overview/byDevice" + resource = f"/organizations/{organizationId}/switch/clients/connections/dhcp/byClient" query_params = [ + "networkIds", "t0", + "t1", "timespan", - "perPage", - "startingAfter", - "endingBefore", - "configurationUpdatedAfter", - "mac", - "macs", - "name", - "networkIds", - "portProfileIds", - "serial", - "serials", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "macs", "networkIds", - "portProfileIds", - "serials", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3292,96 +3809,124 @@ def getOrganizationSwitchPortsClientsOverviewByDevice( 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"getOrganizationSwitchPortsClientsOverviewByDevice: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationSwitchClientsConnectionsDhcpByClient: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationSwitchPortsOverview(self, organizationId: str, **kwargs): + def getOrganizationSwitchClientsConnectionsSwitchPortStatusByClient(self, organizationId: str, **kwargs): """ - **Returns the counts of all active ports for the requested timespan, grouped by speed** - https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-overview + **Switch port status by client.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-clients-connections-switch-port-status-by-client - organizationId (string): Organization ID - - t0 (string): The beginning of the timespan for the data. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 186 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 12 hours and be less than or equal to 186 days. The default is 1 day. + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. """ kwargs.update(locals()) metadata = { - "tags": ["switch", "monitor", "ports", "overview"], - "operation": "getOrganizationSwitchPortsOverview", + "tags": ["switch", "monitor", "clients", "connections", "switchPortStatus", "byClient"], + "operation": "getOrganizationSwitchClientsConnectionsSwitchPortStatusByClient", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/ports/overview" + resource = f"/organizations/{organizationId}/switch/clients/connections/switchPortStatus/byClient" query_params = [ + "networkIds", "t0", "t1", "timespan", ] 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 + 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"getOrganizationSwitchPortsOverview: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationSwitchClientsConnectionsSwitchPortStatusByClient: ignoring unrecognized kwargs: {invalid}" + ) return self._session.get(metadata, resource, params) - def getOrganizationSwitchPortsStatusesBySwitch(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def cloneOrganizationSwitchProfilesToTemplateNetwork(self, organizationId: str, **kwargs): """ - **List the switchports in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-statuses-by-switch + **Clone existing switch templates into a destination template network.** + https://developer.cisco.com/meraki/api-v1/#!clone-organization-switch-profiles-to-template-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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. - - 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. - - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. - - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. - - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. - - name (string): Optional parameter to filter items to switches with names that contain the search term or are an exact match. - - networkIds (array): Optional parameter to filter items to switches in one of the provided networks. - - portProfileIds (array): Optional parameter to filter items to switches that contain switchports belonging to one of the specified port profiles. - - serial (string): Optional parameter to filter items to switches with serial number that contains the search term or are an exact match. - - serials (array): Optional parameter to filter items to switches that have one of the provided serials. + - profileIds (array): Switch profile IDs to clone + - templateNodeGroupId (string): Destination template network ID """ kwargs.update(locals()) metadata = { - "tags": ["switch", "monitor", "ports", "statuses", "bySwitch"], - "operation": "getOrganizationSwitchPortsStatusesBySwitch", + "tags": ["switch", "configure"], + "operation": "cloneOrganizationSwitchProfilesToTemplateNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/ports/statuses/bySwitch" + resource = f"/organizations/{organizationId}/switch/cloneProfilesToTemplateNetwork" - query_params = [ - "perPage", - "startingAfter", - "endingBefore", - "configurationUpdatedAfter", - "mac", - "macs", - "name", - "networkIds", - "portProfileIds", - "serial", - "serials", + body_params = [ + "profileIds", + "templateNodeGroupId", + ] + 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"cloneOrganizationSwitchProfilesToTemplateNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchConnectivityLanLinkErrorsByDeviceByPort(self, organizationId: str, networkIds: list, **kwargs): + """ + **Lan link errors by device and port.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-connectivity-lan-link-errors-by-device-by-port + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "connectivity", "lanLink", "errors", "byDevice", "byPort"], + "operation": "getOrganizationSwitchConnectivityLanLinkErrorsByDeviceByPort", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/connectivity/lanLink/errors/byDevice/byPort" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "macs", "networkIds", - "portProfileIds", - "serials", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3393,26 +3938,214 @@ def getOrganizationSwitchPortsStatusesBySwitch(self, organizationId: str, total_ 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"getOrganizationSwitchPortsStatusesBySwitch: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationSwitchConnectivityLanLinkErrorsByDeviceByPort: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationSwitchPortsTopologyDiscoveryByDevice( + def getOrganizationSwitchConnectivityLanStpErrorsByDeviceByPort(self, organizationId: str, networkIds: list, **kwargs): + """ + **Lan STP errors by device and port.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-connectivity-lan-stp-errors-by-device-by-port + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "connectivity", "lanStp", "errors", "byDevice", "byPort"], + "operation": "getOrganizationSwitchConnectivityLanStpErrorsByDeviceByPort", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/connectivity/lanStp/errors/byDevice/byPort" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationSwitchConnectivityLanStpErrorsByDeviceByPort: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationSwitchConnectivityVrrpFailuresByDevice(self, organizationId: str, networkIds: list, **kwargs): + """ + **Gets all vrrp related alerts over a given network and returns information by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-connectivity-vrrp-failures-by-device + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "connectivity", "vrrp", "failures", "byDevice"], + "operation": "getOrganizationSwitchConnectivityVrrpFailuresByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/connectivity/vrrp/failures/byDevice" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationSwitchConnectivityVrrpFailuresByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def cloneOrganizationSwitchDevices(self, organizationId: str, sourceSerial: str, targetSerials: list, **kwargs): + """ + **Clone port-level and some switch-level configuration settings from a source switch to one or more target switches** + https://developer.cisco.com/meraki/api-v1/#!clone-organization-switch-devices + + - organizationId (string): Organization ID + - sourceSerial (string): Serial number of the source switch (must be on a network not bound to a template) + - targetSerials (array): Array of serial numbers of one or more target switches (must be on a network not bound to a template) + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "devices"], + "operation": "cloneOrganizationSwitchDevices", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/devices/clone" + + body_params = [ + "sourceSerial", + "targetSerials", + ] + 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"cloneOrganizationSwitchDevices: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchDevicesSystemQueuesHistoryBySwitchByInterval( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **List most recently seen LLDP/CDP discovery and topology information per switch port in an organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-topology-discovery-by-device + **Return a historical record of packet transmission and loss, broken down by protocol, for insight into switch device health.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-devices-system-queues-history-by-switch-by-interval - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 1200. Interval is calculated if time params are provided. + - networkIds (array): Optional parameter to filter connectivity history by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter connectivity history by switch. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "devices", "system", "queues", "history", "bySwitch", "byInterval"], + "operation": "getOrganizationSwitchDevicesSystemQueuesHistoryBySwitchByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/devices/system/queues/history/bySwitch/byInterval" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationSwitchDevicesSystemQueuesHistoryBySwitchByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsBySwitch(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the switchports in an organization by switch** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-by-switch + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 50. - 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. + - extendedParams (boolean): Optional flag to return all of the switchport data vs smaller dataset + - hideDefaultPorts (boolean): Optional flag that, when true, will hide modular switchports that may not be connected to the device at the moment + - type (array): Optional parameter to filter switchports by type ('access', 'trunk', 'stack', 'routed', 'svl' or 'dad'). All types are selected if not supplied. - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. @@ -3426,18 +4159,19 @@ def getOrganizationSwitchPortsTopologyDiscoveryByDevice( kwargs.update(locals()) metadata = { - "tags": ["switch", "monitor", "ports", "topology", "discovery", "byDevice"], - "operation": "getOrganizationSwitchPortsTopologyDiscoveryByDevice", + "tags": ["switch", "configure", "ports", "bySwitch"], + "operation": "getOrganizationSwitchPortsBySwitch", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/ports/topology/discovery/byDevice" + resource = f"/organizations/{organizationId}/switch/ports/bySwitch" query_params = [ - "t0", - "timespan", "perPage", "startingAfter", "endingBefore", + "extendedParams", + "hideDefaultPorts", + "type", "configurationUpdatedAfter", "mac", "macs", @@ -3450,6 +4184,7 @@ def getOrganizationSwitchPortsTopologyDiscoveryByDevice( params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ + "type", "macs", "networkIds", "portProfileIds", @@ -3464,27 +4199,23 @@ def getOrganizationSwitchPortsTopologyDiscoveryByDevice( 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"getOrganizationSwitchPortsTopologyDiscoveryByDevice: ignoring unrecognized kwargs: {invalid}" - ) + self._session._logger.warning(f"getOrganizationSwitchPortsBySwitch: ignoring unrecognized kwargs: {invalid}") return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationSwitchPortsUsageHistoryByDeviceByInterval( + def getOrganizationSwitchPortsClientsOverviewByDevice( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **List the historical usage and traffic data of switchports in an organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-usage-history-by-device-by-interval + **List the number of clients for all switchports with at least one online client in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-clients-overview-by-device - 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 - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 1200. Interval is calculated if time params are provided. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 10. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 20. - 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. - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. @@ -3500,17 +4231,15 @@ def getOrganizationSwitchPortsUsageHistoryByDeviceByInterval( kwargs.update(locals()) metadata = { - "tags": ["switch", "monitor", "ports", "usage", "history", "byDevice", "byInterval"], - "operation": "getOrganizationSwitchPortsUsageHistoryByDeviceByInterval", + "tags": ["switch", "monitor", "ports", "clients", "overview", "byDevice"], + "operation": "getOrganizationSwitchPortsClientsOverviewByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/switch/ports/usage/history/byDevice/byInterval" + resource = f"/organizations/{organizationId}/switch/ports/clients/overview/byDevice" query_params = [ "t0", - "t1", "timespan", - "interval", "perPage", "startingAfter", "endingBefore", @@ -3541,7 +4270,2962 @@ def getOrganizationSwitchPortsUsageHistoryByDeviceByInterval( 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"getOrganizationSwitchPortsUsageHistoryByDeviceByInterval: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationSwitchPortsClientsOverviewByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsMirrorsBySwitch(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **list the port mirror configurations in an organization by switch** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-mirrors-by-switch + + - 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 the result set by the included set of network IDs + - serials (array): A list of serial numbers. The returned devices will be filtered to only include these serials. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 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": ["switch", "configure", "ports", "mirrors", "bySwitch"], + "operation": "getOrganizationSwitchPortsMirrorsBySwitch", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/mirrors/bySwitch" + + query_params = [ + "networkIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationSwitchPortsMirrorsBySwitch: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsOverview(self, organizationId: str, **kwargs): + """ + **Returns the counts of all active ports for the requested timespan, grouped by speed** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-overview + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 186 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 12 hours and be less than or equal to 186 days. The default is 1 day. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "ports", "overview"], + "operation": "getOrganizationSwitchPortsOverview", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/overview" + + query_params = [ + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSwitchPortsOverview: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getOrganizationSwitchPortsProfiles(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the port profiles in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles + + - 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): Return the port profiles for the specified network(s) + - formattedStaticAssignments (boolean): Returns the list of static switchports that are assigned to the switchport profile + - searchQuery (string): Optional parameter to filter the result set by the search query + - radiusProfileEnabled (boolean): Optional parameter. If true, only return port profiles with a radius profile enabled + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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": ["switch", "configure", "ports", "profiles"], + "operation": "getOrganizationSwitchPortsProfiles", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles" + + query_params = [ + "networkIds", + "formattedStaticAssignments", + "searchQuery", + "radiusProfileEnabled", + "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"getOrganizationSwitchPortsProfiles: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchPortsProfile(self, organizationId: str, **kwargs): + """ + **Create a port profile in an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-ports-profile + + - organizationId (string): Organization ID + - name (string): The name of the profile. + - description (string): Text describing the profile. + - isOrganizationWide (boolean): The scope of the profile whether it is organization level or network level + - networks (object): The networks which are included/excluded in the profile + - networkId (string): The network identifier + - tags (array): Space-seperated list of tags + - defaultRadiusProfileName (string): When present, the default RADIUS attribute value for RADIUS-based port profile application + - authentication (object): Authentication settings for RADIUS-based port profile application. + - port (object): Configuration settings for port profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "createOrganizationSwitchPortsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles" + + body_params = [ + "name", + "description", + "isOrganizationWide", + "networks", + "networkId", + "tags", + "defaultRadiusProfileName", + "authentication", + "port", + ] + 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"createOrganizationSwitchPortsProfile: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def batchOrganizationSwitchPortsProfilesAssignmentsAssign(self, organizationId: str, items: list, **kwargs): + """ + **Batch assign or unassign port profiles to switch ports** + https://developer.cisco.com/meraki/api-v1/#!batch-organization-switch-ports-profiles-assignments-assign + + - organizationId (string): Organization ID + - items (array): Array of assignment operations (max 100) + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "assignments"], + "operation": "batchOrganizationSwitchPortsProfilesAssignmentsAssign", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/assignments/batchAssign" + + 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"batchOrganizationSwitchPortsProfilesAssignmentsAssign: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchPortsProfilesAssignmentsByPort( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the port profile assignments in an organization, grouped by port** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-assignments-by-port + + - 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 + - profileIds (array): Filter by specific profile IDs + - serials (array): Filter by switch serials + - networkIds (array): Filter by network IDs + - templateIds (array): Filter by template (node_profile) IDs + - types (array): Filter by port type: switch, template + - assignmentTypes (array): Filter by assignment type: direct, template, exception + - isActive (boolean): Filter by assignment status. true: only ports with active assignments, showing only active assignments per port. false: only ports with inactive assignments, showing only inactive assignments per port. Omit: all ports with all assignment layers. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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": ["switch", "configure", "ports", "profiles", "assignments", "byPort"], + "operation": "getOrganizationSwitchPortsProfilesAssignmentsByPort", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/assignments/byPort" + + query_params = [ + "profileIds", + "serials", + "networkIds", + "templateIds", + "types", + "assignmentTypes", + "isActive", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "profileIds", + "serials", + "networkIds", + "templateIds", + "types", + "assignmentTypes", + ] + 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"getOrganizationSwitchPortsProfilesAssignmentsByPort: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsProfilesAssignmentsBySwitch( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the port profile assignments in an organization, grouped by switch** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-assignments-by-switch + + - 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 + - profileIds (array): Filter by specific profile IDs + - serials (array): Filter by switch serials + - networkIds (array): Filter by network IDs + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 50. + - 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": ["switch", "configure", "ports", "profiles", "assignments", "bySwitch"], + "operation": "getOrganizationSwitchPortsProfilesAssignmentsBySwitch", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/assignments/bySwitch" + + query_params = [ + "profileIds", + "serials", + "networkIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "profileIds", + "serials", + "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"getOrganizationSwitchPortsProfilesAssignmentsBySwitch: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsProfilesAutomations(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **list the automation port profiles in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-automations + + - 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 + - ids (array): Optional parameter to filter the result set by the included set of automation IDs + - networkIds (array): Optional parameter to filter the result set by the associated networks. + - isOrganizationWide (string): Optional parameter to filter the result set by automations org-wide flag. + - searchQuery (string): Optional parameter to filter the result set by the search query + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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": ["switch", "configure", "ports", "profiles", "automations"], + "operation": "getOrganizationSwitchPortsProfilesAutomations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/automations" + + query_params = [ + "ids", + "networkIds", + "isOrganizationWide", + "searchQuery", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "ids", + "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"getOrganizationSwitchPortsProfilesAutomations: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchPortsProfilesAutomation(self, organizationId: str, **kwargs): + """ + **Create a port profile automation for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-ports-profiles-automation + + - organizationId (string): Organization ID + - name (string): Name of the port profile automation. + - description (string): Text describing the port profile automation. + - fallbackProfile (object): Configuration settings for port profile + - rules (array): Configuration settings for port profile automation rules + - assignedSwitchPorts (array): assigned switch ports + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "automations"], + "operation": "createOrganizationSwitchPortsProfilesAutomation", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/automations" + + body_params = [ + "name", + "description", + "fallbackProfile", + "rules", + "assignedSwitchPorts", + ] + 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"createOrganizationSwitchPortsProfilesAutomation: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationSwitchPortsProfilesAutomation(self, organizationId: str, id: str, **kwargs): + """ + **Update a port profile automation in an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-switch-ports-profiles-automation + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of the port profile automation. + - description (string): Text describing the port profile automation. + - fallbackProfile (object): Configuration settings for port profile + - rules (array): Configuration settings for port profile automation rules + - assignedSwitchPorts (array): assigned switch ports + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "automations"], + "operation": "updateOrganizationSwitchPortsProfilesAutomation", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/automations/{id}" + + body_params = [ + "name", + "description", + "fallbackProfile", + "rules", + "assignedSwitchPorts", + ] + 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"updateOrganizationSwitchPortsProfilesAutomation: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSwitchPortsProfilesAutomation(self, organizationId: str, id: str): + """ + **Delete an automation port profile from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-ports-profiles-automation + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "automations"], + "operation": "deleteOrganizationSwitchPortsProfilesAutomation", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/automations/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchPortsProfilesNetworksAssignments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Fetch all Network - Smart Port Profile associations for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-networks-assignments + + - 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 + - perPage (integer): Number of records per page + - page (integer): Page number + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "networks", "assignments"], + "operation": "getOrganizationSwitchPortsProfilesNetworksAssignments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments" + + query_params = [ + "perPage", + "page", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationSwitchPortsProfilesNetworksAssignments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchPortsProfilesNetworksAssignment( + self, organizationId: str, type: str, profile: dict, network: dict, **kwargs + ): + """ + **Create Network and Smart Ports Profile association for a specific profile** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-ports-profiles-networks-assignment + + - organizationId (string): Organization ID + - type (string): Type of association + - profile (object): Smart Port Profile object + - network (object): Network object + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "networks", "assignments"], + "operation": "createOrganizationSwitchPortsProfilesNetworksAssignment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments" + + body_params = [ + "type", + "profile", + "network", + ] + 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"createOrganizationSwitchPortsProfilesNetworksAssignment: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def batchOrganizationSwitchPortsProfilesNetworksAssignmentsCreate(self, organizationId: str, items: list, **kwargs): + """ + **Batch Create Network and Smart Ports Profile associations for a specific profile** + https://developer.cisco.com/meraki/api-v1/#!batch-organization-switch-ports-profiles-networks-assignments-create + + - organizationId (string): Organization ID + - items (array): Array of network and profile associations + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "networks", "assignments"], + "operation": "batchOrganizationSwitchPortsProfilesNetworksAssignmentsCreate", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments/batchCreate" + + 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"batchOrganizationSwitchPortsProfilesNetworksAssignmentsCreate: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def bulkOrganizationSwitchPortsProfilesNetworksAssignmentsDelete(self, organizationId: str, items: list, **kwargs): + """ + **Bulk delete Network and Smart Port Profile associations** + https://developer.cisco.com/meraki/api-v1/#!bulk-organization-switch-ports-profiles-networks-assignments-delete + + - organizationId (string): Organization ID + - items (array): Array of assignments to delete + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "networks", "assignments"], + "operation": "bulkOrganizationSwitchPortsProfilesNetworksAssignmentsDelete", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments/bulkDelete" + + 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"bulkOrganizationSwitchPortsProfilesNetworksAssignmentsDelete: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def deleteOrganizationSwitchPortsProfilesNetworksAssignment(self, organizationId: str, assignmentId: str): + """ + **Delete Network and Smart Port profile association for a specific profile** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-ports-profiles-networks-assignment + + - organizationId (string): Organization ID + - assignmentId (string): Assignment ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "networks", "assignments"], + "operation": "deleteOrganizationSwitchPortsProfilesNetworksAssignment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + assignmentId = urllib.parse.quote(str(assignmentId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/networks/assignments/{assignmentId}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchPortsProfilesOverviewByProfile( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the port profiles in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-overview-by-profile + + - 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): Return the port profiles for the specified network(s) + - formattedStaticAssignments (boolean): Returns the list of static switchports that are assgined to the switchport profile + - searchQuery (string): Optional parameter to filter the result set by the search query + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. + - 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": ["switch", "configure", "ports", "profiles", "overview", "byProfile"], + "operation": "getOrganizationSwitchPortsProfilesOverviewByProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/overview/byProfile" + + query_params = [ + "networkIds", + "formattedStaticAssignments", + "searchQuery", + "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"getOrganizationSwitchPortsProfilesOverviewByProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsProfilesRadiusAssignments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the port profile RADIUS assignments** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-radius-assignments + + - 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): If present, the networks to limit the assignments to + - portProfileIds (array): If present, the port profiles to limit the assignments to + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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": ["switch", "configure", "ports", "profiles", "radius", "assignments"], + "operation": "getOrganizationSwitchPortsProfilesRadiusAssignments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/radius/assignments" + + query_params = [ + "networkIds", + "portProfileIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "portProfileIds", + ] + 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"getOrganizationSwitchPortsProfilesRadiusAssignments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchPortsProfilesRadiusAssignment(self, organizationId: str, network: dict, **kwargs): + """ + **Create a port profile RADIUS assignment** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-ports-profiles-radius-assignment + + - organizationId (string): Organization ID + - network (object): The network where the RADIUS name is assigned + - portProfile (object): The assigned port profile + - radius (object): The RADIUS options for this assignment + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "radius", "assignments"], + "operation": "createOrganizationSwitchPortsProfilesRadiusAssignment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/radius/assignments" + + body_params = [ + "network", + "portProfile", + "radius", + ] + 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"createOrganizationSwitchPortsProfilesRadiusAssignment: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchPortsProfilesRadiusAssignment(self, organizationId: str, id: str): + """ + **Return a port profile RADIUS assignment** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profiles-radius-assignment + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "radius", "assignments"], + "operation": "getOrganizationSwitchPortsProfilesRadiusAssignment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/radius/assignments/{id}" + + return self._session.get(metadata, resource) + + def updateOrganizationSwitchPortsProfilesRadiusAssignment(self, organizationId: str, id: str, **kwargs): + """ + **Update a port profile RADIUS assignment** + https://developer.cisco.com/meraki/api-v1/#!update-organization-switch-ports-profiles-radius-assignment + + - organizationId (string): Organization ID + - id (string): ID + - network (object): The network where the RADIUS name is assigned + - portProfile (object): The assigned port profile + - radius (object): The RADIUS options for this assignment + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "radius", "assignments"], + "operation": "updateOrganizationSwitchPortsProfilesRadiusAssignment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/radius/assignments/{id}" + + body_params = [ + "network", + "portProfile", + "radius", + ] + 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"updateOrganizationSwitchPortsProfilesRadiusAssignment: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSwitchPortsProfilesRadiusAssignment(self, organizationId: str, id: str): + """ + **Deletes a port profile RADIUS assignment** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-ports-profiles-radius-assignment + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles", "radius", "assignments"], + "operation": "deleteOrganizationSwitchPortsProfilesRadiusAssignment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/radius/assignments/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchPortsProfile(self, organizationId: str, id: str): + """ + **Get detailed information about a port profile** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-profile + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "getOrganizationSwitchPortsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/{id}" + + return self._session.get(metadata, resource) + + def updateOrganizationSwitchPortsProfile(self, organizationId: str, id: str, **kwargs): + """ + **Update a port profile in an organization** + https://developer.cisco.com/meraki/api-v1/#!update-organization-switch-ports-profile + + - organizationId (string): Organization ID + - id (string): ID + - name (string): The name of the profile. + - description (string): Text describing the profile. + - isOrganizationWide (boolean): The scope of the profile whether it is organization level or network level + - networks (object): The networks which are included/excluded in the profile + - networkId (string): The network identifier + - tags (array): Space-seperated list of tags + - defaultRadiusProfileName (string): When present, the default RADIUS attribute value for RADIUS-based port profile application + - authentication (object): Authentication settings for RADIUS-based port profile application. + - port (object): Configuration settings for port profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "updateOrganizationSwitchPortsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/{id}" + + body_params = [ + "name", + "description", + "isOrganizationWide", + "networks", + "networkId", + "tags", + "defaultRadiusProfileName", + "authentication", + "port", + ] + 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"updateOrganizationSwitchPortsProfile: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSwitchPortsProfile(self, organizationId: str, id: str): + """ + **Delete a port profile from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-ports-profile + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["switch", "configure", "ports", "profiles"], + "operation": "deleteOrganizationSwitchPortsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/switch/ports/profiles/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchPortsStatusesBySwitch(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the switchports in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-statuses-by-switch + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - 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. + - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. + - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. + - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. + - name (string): Optional parameter to filter items to switches with names that contain the search term or are an exact match. + - networkIds (array): Optional parameter to filter items to switches in one of the provided networks. + - portProfileIds (array): Optional parameter to filter items to switches that contain switchports belonging to one of the specified port profiles. + - serial (string): Optional parameter to filter items to switches with serial number that contains the search term or are an exact match. + - serials (array): Optional parameter to filter items to switches that have one of the provided serials. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "ports", "statuses", "bySwitch"], + "operation": "getOrganizationSwitchPortsStatusesBySwitch", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/statuses/bySwitch" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "configurationUpdatedAfter", + "mac", + "macs", + "name", + "networkIds", + "portProfileIds", + "serial", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "macs", + "networkIds", + "portProfileIds", + "serials", + ] + 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"getOrganizationSwitchPortsStatusesBySwitch: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsStatusesPacketsByDeviceByPort(self, organizationId: str, networkIds: list, **kwargs): + """ + **Switch port packets by device and port.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-statuses-packets-by-device-by-port + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 1200, 14400, 86400. The default is 14400. Interval is calculated if time params are provided. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "ports", "statuses", "packets", "byDevice", "byPort"], + "operation": "getOrganizationSwitchPortsStatusesPacketsByDeviceByPort", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/statuses/packets/byDevice/byPort" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + "interval", + ] + 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"getOrganizationSwitchPortsStatusesPacketsByDeviceByPort: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationSwitchPortsTopologyDiscoveryByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List most recently seen LLDP/CDP discovery and topology information per switch port in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-topology-discovery-by-device + + - 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 + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameter t0. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - 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. + - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. + - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. + - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. + - name (string): Optional parameter to filter items to switches with names that contain the search term or are an exact match. + - networkIds (array): Optional parameter to filter items to switches in one of the provided networks. + - portProfileIds (array): Optional parameter to filter items to switches that contain switchports belonging to one of the specified port profiles. + - serial (string): Optional parameter to filter items to switches with serial number that contains the search term or are an exact match. + - serials (array): Optional parameter to filter items to switches that have one of the provided serials. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "ports", "topology", "discovery", "byDevice"], + "operation": "getOrganizationSwitchPortsTopologyDiscoveryByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/topology/discovery/byDevice" + + query_params = [ + "t0", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + "configurationUpdatedAfter", + "mac", + "macs", + "name", + "networkIds", + "portProfileIds", + "serial", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "macs", + "networkIds", + "portProfileIds", + "serials", + ] + 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"getOrganizationSwitchPortsTopologyDiscoveryByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsTransceiversReadingsHistoryBySwitch( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Return time-series digital optical monitoring (DOM) readings for ports on each DOM-enabled switch in an organization, in addition to thresholds for each relevant Small Form Factor Pluggable (SFP) module.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-transceivers-readings-history-by-switch + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 1200. Interval is calculated if time params are provided. + - networkIds (array): Networks for which information should be gathered. + - serials (array): Optional parameter to filter usage by switch. + - portIds (array): Optional parameter to filter usage by port ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "ports", "transceivers", "readings", "history", "bySwitch"], + "operation": "getOrganizationSwitchPortsTransceiversReadingsHistoryBySwitch", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/transceivers/readings/history/bySwitch" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "serials", + "portIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "portIds", + ] + 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"getOrganizationSwitchPortsTransceiversReadingsHistoryBySwitch: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchPortsUsageHistoryByDeviceByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the historical usage and traffic data of switchports in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-ports-usage-history-by-device-by-interval + + - 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 + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 1200, 14400, 86400. The default is 1200. Interval is calculated if time params are provided. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 10. + - 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. + - configurationUpdatedAfter (string): Optional parameter to filter items to switches where the configuration has been updated after the given timestamp. + - mac (string): Optional parameter to filter items to switches with MAC addresses that contain the search term or are an exact match. + - macs (array): Optional parameter to filter items to switches that have one of the provided MAC addresses. + - name (string): Optional parameter to filter items to switches with names that contain the search term or are an exact match. + - networkIds (array): Optional parameter to filter items to switches in one of the provided networks. + - portProfileIds (array): Optional parameter to filter items to switches that contain switchports belonging to one of the specified port profiles. + - serial (string): Optional parameter to filter items to switches with serial number that contains the search term or are an exact match. + - serials (array): Optional parameter to filter items to switches that have one of the provided serials. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "ports", "usage", "history", "byDevice", "byInterval"], + "operation": "getOrganizationSwitchPortsUsageHistoryByDeviceByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/ports/usage/history/byDevice/byInterval" + + query_params = [ + "t0", + "t1", + "timespan", + "interval", + "perPage", + "startingAfter", + "endingBefore", + "configurationUpdatedAfter", + "mac", + "macs", + "name", + "networkIds", + "portProfileIds", + "serial", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "macs", + "networkIds", + "portProfileIds", + "serials", + ] + 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"getOrganizationSwitchPortsUsageHistoryByDeviceByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpAutonomousSystems(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the autonomous systems configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-autonomous-systems + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - numbers (array): Optional parameter to filter autonomous systems by number. This filter uses multiple exact matches. + - autonomousSystemIds (array): Optional parameter to filter autonomous systems by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "autonomousSystems"], + "operation": "getOrganizationSwitchRoutingBgpAutonomousSystems", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/autonomousSystems" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "numbers", + "autonomousSystemIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "numbers", + "autonomousSystemIds", + ] + 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"getOrganizationSwitchRoutingBgpAutonomousSystems: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpAutonomousSystem(self, organizationId: str, number: int, **kwargs): + """ + **Create an autonomous system** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-autonomous-system + + - organizationId (string): Organization ID + - number (integer): The autonomous system number (CLI: 'router bgp ') + - description (string): A description for the autonomous system + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "autonomousSystems"], + "operation": "createOrganizationSwitchRoutingBgpAutonomousSystem", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/autonomousSystems" + + body_params = [ + "number", + "description", + ] + 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"createOrganizationSwitchRoutingBgpAutonomousSystem: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchRoutingBgpAutonomousSystemsOverviewByAutonomousSystem( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the overview of the autonomous systems configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-autonomous-systems-overview-by-autonomous-system + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - numbers (array): Optional parameter to filter autonomous systems by number. This filter uses multiple exact matches. + - autonomousSystemIds (array): Optional parameter to filter autonomous systems by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "autonomousSystems", "overview", "byAutonomousSystem"], + "operation": "getOrganizationSwitchRoutingBgpAutonomousSystemsOverviewByAutonomousSystem", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/autonomousSystems/overview/byAutonomousSystem" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "numbers", + "autonomousSystemIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "numbers", + "autonomousSystemIds", + ] + 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"getOrganizationSwitchRoutingBgpAutonomousSystemsOverviewByAutonomousSystem: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def updateOrganizationSwitchRoutingBgpAutonomousSystem(self, organizationId: str, autonomousSystemId: str, **kwargs): + """ + **Update an autonomous system** + https://developer.cisco.com/meraki/api-v1/#!update-organization-switch-routing-bgp-autonomous-system + + - organizationId (string): Organization ID + - autonomousSystemId (string): Autonomous system ID + - number (integer): The autonomous system number (CLI: 'router bgp ') + - description (string): A description for the autonomous system + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "autonomousSystems"], + "operation": "updateOrganizationSwitchRoutingBgpAutonomousSystem", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + autonomousSystemId = urllib.parse.quote(str(autonomousSystemId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/autonomousSystems/{autonomousSystemId}" + + body_params = [ + "number", + "description", + ] + 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"updateOrganizationSwitchRoutingBgpAutonomousSystem: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationSwitchRoutingBgpAutonomousSystem(self, organizationId: str, autonomousSystemId: str): + """ + **Delete an autonomous system from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-routing-bgp-autonomous-system + + - organizationId (string): Organization ID + - autonomousSystemId (string): Autonomous system ID + """ + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "autonomousSystems"], + "operation": "deleteOrganizationSwitchRoutingBgpAutonomousSystem", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + autonomousSystemId = urllib.parse.quote(str(autonomousSystemId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/autonomousSystems/{autonomousSystemId}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchRoutingBgpFiltersFilterLists( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the filter lists configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-filters-filter-lists + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter 'filter lists' by network ID. This filter uses multiple exact matches. + - listIds (array): Optional parameter to filter 'filter lists' by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "filterLists"], + "operation": "getOrganizationSwitchRoutingBgpFiltersFilterLists", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/filterLists" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "listIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "listIds", + ] + 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"getOrganizationSwitchRoutingBgpFiltersFilterLists: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpFiltersFilterListsDeploy( + self, organizationId: str, filterList: dict, network: dict, rules: list, **kwargs + ): + """ + **Create or update a filter list, in addition to its associated rules** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-filters-filter-lists-deploy + + - organizationId (string): Organization ID + - filterList (object): Information regarding the filter list + - network (object): Information regarding the network the filter list belongs to + - rules (array): Information regarding the filter list rules + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "filterLists", "deploy"], + "operation": "createOrganizationSwitchRoutingBgpFiltersFilterListsDeploy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/filterLists/deploy" + + body_params = [ + "filterList", + "network", + "rules", + ] + 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"createOrganizationSwitchRoutingBgpFiltersFilterListsDeploy: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchRoutingBgpFiltersFilterListsOverviewByFilterList( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the overview of the filter lists configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-filters-filter-lists-overview-by-filter-list + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter 'filter list' overviews by network ID. This filter uses multiple exact matches. + - listIds (array): Optional parameter to filter 'filter list' overviews by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "routing", "bgp", "filters", "filterLists", "overview", "byFilterList"], + "operation": "getOrganizationSwitchRoutingBgpFiltersFilterListsOverviewByFilterList", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/filterLists/overview/byFilterList" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "listIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "listIds", + ] + 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"getOrganizationSwitchRoutingBgpFiltersFilterListsOverviewByFilterList: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpFiltersFilterListsRules( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the filter list rules configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-filters-filter-lists-rules + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter 'filter list' rules by network ID. This filter uses multiple exact matches. + - ruleIds (array): Optional parameter to filter 'filter list' rules by ID. This filter uses multiple exact matches. + - filterListIds (array): Optional parameter to filter 'filter lists' by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "filterLists", "rules"], + "operation": "getOrganizationSwitchRoutingBgpFiltersFilterListsRules", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/filterLists/rules" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "ruleIds", + "filterListIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "ruleIds", + "filterListIds", + ] + 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"getOrganizationSwitchRoutingBgpFiltersFilterListsRules: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def deleteOrganizationSwitchRoutingBgpFiltersFilterList(self, organizationId: str, listId: str): + """ + **Delete a filter list** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-routing-bgp-filters-filter-list + + - organizationId (string): Organization ID + - listId (string): List ID + """ + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "filterLists"], + "operation": "deleteOrganizationSwitchRoutingBgpFiltersFilterList", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + listId = urllib.parse.quote(str(listId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/filterLists/{listId}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchRoutingBgpFiltersPrefixLists( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the prefix lists configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-filters-prefix-lists + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter prefix lists by network ID. This filter uses multiple exact matches. + - listIds (array): Optional parameter to filter prefix lists by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "prefixLists"], + "operation": "getOrganizationSwitchRoutingBgpFiltersPrefixLists", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/prefixLists" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "listIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "listIds", + ] + 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"getOrganizationSwitchRoutingBgpFiltersPrefixLists: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpFiltersPrefixListsDeploy( + self, organizationId: str, network: dict, prefixList: dict, rules: list, **kwargs + ): + """ + **Create or update a prefix list, in addition to its associated rules** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-filters-prefix-lists-deploy + + - organizationId (string): Organization ID + - network (object): Information regarding the network the prefix list belongs to + - prefixList (object): Information regarding the prefix list + - rules (array): Information regarding the prefix list rules + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "prefixLists", "deploy"], + "operation": "createOrganizationSwitchRoutingBgpFiltersPrefixListsDeploy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/prefixLists/deploy" + + body_params = [ + "network", + "prefixList", + "rules", + ] + 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"createOrganizationSwitchRoutingBgpFiltersPrefixListsDeploy: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchRoutingBgpFiltersPrefixListsOverviewByPrefixList( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the overview of the prefix lists configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-filters-prefix-lists-overview-by-prefix-list + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter prefix list overviews by network ID. This filter uses multiple exact matches. + - listIds (array): Optional parameter to filter prefix list overviews by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "routing", "bgp", "filters", "prefixLists", "overview", "byPrefixList"], + "operation": "getOrganizationSwitchRoutingBgpFiltersPrefixListsOverviewByPrefixList", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/prefixLists/overview/byPrefixList" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "listIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "listIds", + ] + 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"getOrganizationSwitchRoutingBgpFiltersPrefixListsOverviewByPrefixList: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpFiltersPrefixListsRules( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the prefix list rules configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-filters-prefix-lists-rules + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter prefix list rules by network ID. This filter uses multiple exact matches. + - prefixListIds (array): Optional parameter to filter prefix list rules by prefix list ID. This filter uses multiple exact matches. + - ruleIds (array): Optional parameter to filter prefix list rules by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "prefixLists", "rules"], + "operation": "getOrganizationSwitchRoutingBgpFiltersPrefixListsRules", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/prefixLists/rules" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "prefixListIds", + "ruleIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "prefixListIds", + "ruleIds", + ] + 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"getOrganizationSwitchRoutingBgpFiltersPrefixListsRules: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def deleteOrganizationSwitchRoutingBgpFiltersPrefixList(self, organizationId: str, listId: str): + """ + **Delete a prefix list** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-routing-bgp-filters-prefix-list + + - organizationId (string): Organization ID + - listId (string): List ID + """ + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "filters", "prefixLists"], + "operation": "deleteOrganizationSwitchRoutingBgpFiltersPrefixList", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + listId = urllib.parse.quote(str(listId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/filters/prefixLists/{listId}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchRoutingBgpPeersGroups(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the BGP peer groups configured in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-groups + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter peer groups by network ID. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter peer groups by router ID. This filter uses multiple exact matches. + - profileIds (array): Optional parameter to filter peer groups by profile ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter peer groups by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "groups"], + "operation": "getOrganizationSwitchRoutingBgpPeersGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/groups" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "routerIds", + "profileIds", + "peerGroupIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "routerIds", + "profileIds", + "peerGroupIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersGroups: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpPeersGroupsAddressFamiliesDeployments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List all BGP deployment information for multiple peer groups or address families configured in the given organization, including profile information, peer group address family information, neighbors, and listen ranges** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-groups-address-families-deployments + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter peer group address family deployments by network ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter peer group address family deployments by peer group + - addressFamilyIds (array): Optional parameter to filter peer group address family deployments by address family + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "groups", "addressFamilies", "deployments"], + "operation": "getOrganizationSwitchRoutingBgpPeersGroupsAddressFamiliesDeployments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/groups/addressFamilies/deployments" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "peerGroupIds", + "addressFamilyIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "peerGroupIds", + "addressFamilyIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersGroupsAddressFamiliesDeployments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpPeersGroupsDeploy( + self, + organizationId: str, + addressFamily: dict, + network: dict, + peerGroup: dict, + peerGroupAddressFamilyBindingProfile: dict, + peerGroupProfile: dict, + policies: list, + router: dict, + **kwargs, + ): + """ + **Create or update a peer group, in addition to an associated peer group profile, peer group address family binding, peer group address family binding profile and routing policies associated with the peer group** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-peers-groups-deploy + + - organizationId (string): Organization ID + - addressFamily (object): Information regarding the address family the peer group address family binding belongs to + - network (object): Information regarding the network the peer group profile belongs to + - peerGroup (object): Information regarding the peer group + - peerGroupAddressFamilyBindingProfile (object): Information regarding the peer group address family binding profile + - peerGroupProfile (object): Information regarding the peer group profile + - policies (array): Information regarding the routing policies + - router (object): Information regarding the router this peer group belongs to + - peerGroupAddressFamilyBinding (object): Information regarding the peer group address family binding. Only required when updating. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "groups", "deploy"], + "operation": "createOrganizationSwitchRoutingBgpPeersGroupsDeploy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/groups/deploy" + + body_params = [ + "addressFamily", + "network", + "peerGroup", + "peerGroupAddressFamilyBinding", + "peerGroupAddressFamilyBindingProfile", + "peerGroupProfile", + "policies", + "router", + ] + 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"createOrganizationSwitchRoutingBgpPeersGroupsDeploy: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchRoutingBgpPeersGroupsDeployments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List all BGP deployment information for peer groups configured in the given organization, including peer group address family information, as well as routing policies** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-groups-deployments + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 20. + - 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. + - networkIds (array): Optional parameter to filter peer group deployments by network ID. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter peer group deployments by router ID. This filter uses multiple exact matches. + - profileIds (array): Optional parameter to filter peer group deployments by profile ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter peer group deployments by peer group ID. This filter uses multiple exact matches. + - afi (string): Optional parameter to filter deployments on each peer group by address family identifier (AFI). + - safi (string): Optional parameter to filter deployments on each peer group by subsequent address family identifier (SAFI). + """ + + kwargs.update(locals()) + + if "afi" in kwargs: + options = ["ipv4"] + assert kwargs["afi"] in options, f'''"afi" cannot be "{kwargs["afi"]}", & must be set to one of: {options}''' + if "safi" in kwargs: + options = ["unicast"] + assert kwargs["safi"] in options, f'''"safi" cannot be "{kwargs["safi"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "groups", "deployments"], + "operation": "getOrganizationSwitchRoutingBgpPeersGroupsDeployments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/groups/deployments" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "routerIds", + "profileIds", + "peerGroupIds", + "afi", + "safi", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "routerIds", + "profileIds", + "peerGroupIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersGroupsDeployments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpPeersGroupsOverviewByPeerGroup( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the overview of the BGP peer groups configured in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-groups-overview-by-peer-group + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter peer group overviews by network ID. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter peer group overviews by router ID. This filter uses multiple exact matches. + - profileIds (array): Optional parameter to filter peer group overviews by profile ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter peer group overviews by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "routing", "bgp", "peers", "groups", "overview", "byPeerGroup"], + "operation": "getOrganizationSwitchRoutingBgpPeersGroupsOverviewByPeerGroup", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/groups/overview/byPeerGroup" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "routerIds", + "profileIds", + "peerGroupIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "routerIds", + "profileIds", + "peerGroupIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersGroupsOverviewByPeerGroup: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpPeersListenRanges(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the listen ranges configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-listen-ranges + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter listen ranges by network ID. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter listen ranges by router ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter listen ranges by peer group ID. This filter uses multiple exact matches. + - listenRangeIds (array): Optional parameter to filter listen ranges by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "listenRanges"], + "operation": "getOrganizationSwitchRoutingBgpPeersListenRanges", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/listenRanges" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "routerIds", + "peerGroupIds", + "listenRangeIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "routerIds", + "peerGroupIds", + "listenRangeIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersListenRanges: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpPeersNeighbors(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the neighbors configured for BGP in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-neighbors + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter neighbors by network ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter neighbors by peer group ID. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter neighbors by router ID. This filter uses multiple exact matches. + - neighborIds (array): Optional parameter to filter neighbors by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "neighbors"], + "operation": "getOrganizationSwitchRoutingBgpPeersNeighbors", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/neighbors" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "peerGroupIds", + "routerIds", + "neighborIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "peerGroupIds", + "routerIds", + "neighborIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersNeighbors: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpPeersNeighborsDeploy( + self, + organizationId: str, + addressFamily: dict, + neighbor: dict, + neighborAddressFamilyBinding: dict, + peerGroup: dict, + policies: list, + router: dict, + **kwargs, + ): + """ + **Create or update a neighor, in addition to an associated neighbor address family binding and routing policies associated with the neighbor** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-peers-neighbors-deploy + + - organizationId (string): Organization ID + - addressFamily (object): Information regarding the address family this binding is bound to + - neighbor (object): Information regarding the BPG neighbor + - neighborAddressFamilyBinding (object): Information regarding the neighbor address family binding + - peerGroup (object): Information regarding the peer group this neighbor belongs to + - policies (array): Information regarding the routing policies related to the neighbor + - router (object): Information regarding the router this neighbor peers with + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "neighbors", "deploy"], + "operation": "createOrganizationSwitchRoutingBgpPeersNeighborsDeploy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/neighbors/deploy" + + body_params = [ + "addressFamily", + "neighbor", + "neighborAddressFamilyBinding", + "peerGroup", + "policies", + "router", + ] + 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"createOrganizationSwitchRoutingBgpPeersNeighborsDeploy: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchRoutingBgpPeersNeighborsDeployments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List all BGP deployment information for neighbors configured in the given organization, including address family information, as well as routing policies** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-peers-neighbors-deployments + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 20. + - 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. + - networkIds (array): Optional parameter to filter neighbor deployments by network ID. This filter uses multiple exact matches. + - peerGroupIds (array): Optional parameter to filter neighbor deployments by peer group ID. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter neighbor deployments by router ID. This filter uses multiple exact matches. + - neighborIds (array): Optional parameter to filter neighbor deployments by neighbor ID. This filter uses multiple exact matches. + - afi (string): Optional parameter to filter deployments on each neighbor by address family identifier (AFI). + - safi (string): Optional parameter to filter deployments on each neighbor by subsequent address family identifier (SAFI). + """ + + kwargs.update(locals()) + + if "afi" in kwargs: + options = ["ipv4"] + assert kwargs["afi"] in options, f'''"afi" cannot be "{kwargs["afi"]}", & must be set to one of: {options}''' + if "safi" in kwargs: + options = ["unicast"] + assert kwargs["safi"] in options, f'''"safi" cannot be "{kwargs["safi"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "peers", "neighbors", "deployments"], + "operation": "getOrganizationSwitchRoutingBgpPeersNeighborsDeployments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/peers/neighbors/deployments" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "peerGroupIds", + "routerIds", + "neighborIds", + "afi", + "safi", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "peerGroupIds", + "routerIds", + "neighborIds", + ] + 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"getOrganizationSwitchRoutingBgpPeersNeighborsDeployments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpRouters(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the routers configured in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-routers + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter routers by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter routers by serial. This filter uses multiple exact matches. + - switchNames (array): Optional parameter to filter routers by switch name. The filter uses multiple exact matches. + - asNumbers (array): Optional parameter to filter routers by autonomous system number. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter routers by ID. This filter uses multiple exact matches. + - switchStackIds (array): Optional parameter to filter routers by switch stack id. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "routers"], + "operation": "getOrganizationSwitchRoutingBgpRouters", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + "switchNames", + "asNumbers", + "routerIds", + "switchStackIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "switchNames", + "asNumbers", + "routerIds", + "switchStackIds", + ] + 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"getOrganizationSwitchRoutingBgpRouters: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpRoutersDeploy( + self, + organizationId: str, + addressFamily: dict, + addressFamilyPrefixes: list, + addressFamilyProfile: dict, + autonomousSystem: dict, + router: dict, + switch: dict, + **kwargs, + ): + """ + **Create a BGP router, in addition to an associated address family, address family prefixes, and address family profile** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-routers-deploy + + - organizationId (string): Organization ID + - addressFamily (object): Information regarding the address family + - addressFamilyPrefixes (array): The list of network prefixes to which the address family applies + - addressFamilyProfile (object): Information regarding the profile applied to the address family + - autonomousSystem (object): Information regarding the router's autonomous system + - router (object): Information regarding the BPG router + - switch (object): The router's switch node. When the router is part of a switch stack, this is the switch stack's active node + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "routers", "deploy"], + "operation": "createOrganizationSwitchRoutingBgpRoutersDeploy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers/deploy" + + body_params = [ + "addressFamily", + "addressFamilyPrefixes", + "addressFamilyProfile", + "autonomousSystem", + "router", + "switch", + ] + 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"createOrganizationSwitchRoutingBgpRoutersDeploy: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationSwitchRoutingBgpRoutersDeployments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List all BGP deployment information for routers configured in a given organization, including all address families** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-routers-deployments + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 20. + - 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. + - networkIds (array): Optional parameter to filter router deployments by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter router deployments by serial. This filter uses multiple exact matches. + - switchNames (array): Optional parameter to filter router deployments by switch name. The filter uses multiple exact matches. + - asNumbers (array): Optional parameter to filter router deployments by autonomous system number. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter router deployments by router ID. This filter uses multiple exact matches. + - switchStackIds (array): Optional parameter to filter router deployments by switch stack id. This filter uses multiple exact matches. + - afi (string): Optional parameter to filter deployments on each router by address family identifier (AFI). + - safi (string): Optional parameter to filter deployments on each router by subsequent address family identifier (SAFI). + """ + + kwargs.update(locals()) + + if "afi" in kwargs: + options = ["ipv4"] + assert kwargs["afi"] in options, f'''"afi" cannot be "{kwargs["afi"]}", & must be set to one of: {options}''' + if "safi" in kwargs: + options = ["unicast"] + assert kwargs["safi"] in options, f'''"safi" cannot be "{kwargs["safi"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "routers", "deployments"], + "operation": "getOrganizationSwitchRoutingBgpRoutersDeployments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers/deployments" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + "switchNames", + "asNumbers", + "routerIds", + "switchStackIds", + "afi", + "safi", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "switchNames", + "asNumbers", + "routerIds", + "switchStackIds", + ] + 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"getOrganizationSwitchRoutingBgpRoutersDeployments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchRoutingBgpRoutersOverviewByRouter( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the overview of the routers configured in the given organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-bgp-routers-overview-by-router + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter router overviews by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter router overviews by serial. This filter uses multiple exact matches. + - switchNames (array): Optional parameter to filter router overviews by switch name. This filter uses multiple exact matches. + - asNumbers (array): Optional parameter to filter router overviews by autonomous system number. This filter uses multiple exact matches. + - routerIds (array): Optional parameter to filter router overviews by ID. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "monitor", "routing", "bgp", "routers", "overview", "byRouter"], + "operation": "getOrganizationSwitchRoutingBgpRoutersOverviewByRouter", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers/overview/byRouter" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + "switchNames", + "asNumbers", + "routerIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "switchNames", + "asNumbers", + "routerIds", + ] + 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"getOrganizationSwitchRoutingBgpRoutersOverviewByRouter: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationSwitchRoutingBgpRoutersPeersDeploy( + self, organizationId: str, addressFamily: dict, peerGroups: list, router: dict, **kwargs + ): + """ + **Create and update listen ranges, update peers' enabled flag, and delete peer groups for a BGP router** + https://developer.cisco.com/meraki/api-v1/#!create-organization-switch-routing-bgp-routers-peers-deploy + + - organizationId (string): Organization ID + - addressFamily (object): Information regarding the address family + - peerGroups (array): Information regarding the peer group peers for a router's peer group + - router (object): Information regarding the BPG router + """ + + kwargs = locals() + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "routers", "peers", "deploy"], + "operation": "createOrganizationSwitchRoutingBgpRoutersPeersDeploy", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers/peers/deploy" + + body_params = [ + "addressFamily", + "peerGroups", + "router", + ] + 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"createOrganizationSwitchRoutingBgpRoutersPeersDeploy: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def deleteOrganizationSwitchRoutingBgpRouter(self, organizationId: str, routerId: str): + """ + **Delete a router from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-switch-routing-bgp-router + + - organizationId (string): Organization ID + - routerId (string): Router ID + """ + + metadata = { + "tags": ["switch", "configure", "routing", "bgp", "routers"], + "operation": "deleteOrganizationSwitchRoutingBgpRouter", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + routerId = urllib.parse.quote(str(routerId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/bgp/routers/{routerId}" + + return self._session.delete(metadata, resource) + + def getOrganizationSwitchRoutingStaticRoutes(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List layer 3 static routes for switches within an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-routing-static-routes + + - 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 the result set by the included set of network IDs + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 20. + - 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": ["switch", "monitor", "routing", "staticRoutes"], + "operation": "getOrganizationSwitchRoutingStaticRoutes", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/routing/staticRoutes" + + 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"getOrganizationSwitchRoutingStaticRoutes: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchSpanningTree(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Returns Spanning Tree configuration settings** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-spanning-tree + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter by network ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["switch", "configure", "spanningTree"], + "operation": "getOrganizationSwitchSpanningTree", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/spanningTree" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationSwitchSpanningTree: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationSwitchStacksPortsMirrorsByStack(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the port mirror configurations in an organization by switch** + https://developer.cisco.com/meraki/api-v1/#!get-organization-switch-stacks-ports-mirrors-by-stack + + - 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 + - ids (array): Return the port mirror configuration for the specified stack(s) + - networkIds (array): Return the port mirror configurations for the specified network(s) + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 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": ["switch", "configure", "stacks", "ports", "mirrors", "byStack"], + "operation": "getOrganizationSwitchStacksPortsMirrorsByStack", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/switch/stacks/ports/mirrors/byStack" + + query_params = [ + "ids", + "networkIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "ids", + "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"getOrganizationSwitchStacksPortsMirrorsByStack: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) diff --git a/meraki/api/users.py b/meraki/api/users.py new file mode 100644 index 0000000..f48c8b5 --- /dev/null +++ b/meraki/api/users.py @@ -0,0 +1,838 @@ +import urllib + + +class Users(object): + def __init__(self, session): + super(Users, self).__init__() + self._session = session + + def getOrganizationIamUsersAuthorizations( + self, organizationId: str, userIds: list, total_pages=1, direction="next", **kwargs + ): + """ + **List specific authorizations for the list of Meraki end users.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-authorizations + + - organizationId (string): Organization ID + - userIds (array): Meraki end user IDs + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 10. + - 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": ["users", "configure", "iam", "authorizations"], + "operation": "getOrganizationIamUsersAuthorizations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "userIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "userIds", + ] + 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"getOrganizationIamUsersAuthorizations: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationIamUsersAuthorization(self, organizationId: str, authZone: dict, **kwargs): + """ + **Authorize a Meraki end user for an auth zone.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-authorization + + - organizationId (string): Organization ID + - authZone (object): Auth zone + - email (string): Meraki end user's email + - idpUserId (string): Meraki end user's ID + - startsAt (string): Start time of the desired access for the authorization. Defaults to now. + - expiresAt (string): Expiration time of the desired access for the authorization + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "authorizations"], + "operation": "createOrganizationIamUsersAuthorization", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations" + + body_params = [ + "email", + "idpUserId", + "authZone", + "startsAt", + "expiresAt", + ] + 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"createOrganizationIamUsersAuthorization: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationIamUsersAuthorizations(self, organizationId: str, **kwargs): + """ + **Update a Meraki end user's access to an auth zone.** + https://developer.cisco.com/meraki/api-v1/#!update-organization-iam-users-authorizations + + - organizationId (string): Organization ID + - authorizationId (string): Authorization ID + - email (string): Meraki end user's email + - authZone (object): Auth zone + - startsAt (string): Start time of the desired access for the authorization + - expiresAt (string): Expiration time of the desired access for the authorization + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "authorizations"], + "operation": "updateOrganizationIamUsersAuthorizations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations" + + body_params = [ + "authorizationId", + "email", + "authZone", + "startsAt", + "expiresAt", + ] + 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"updateOrganizationIamUsersAuthorizations: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def revokeOrganizationIamUsersAuthorizationsAuthorization(self, organizationId: str, authZone: dict, **kwargs): + """ + **Revoke a Meraki end user's access to an auth zone.** + https://developer.cisco.com/meraki/api-v1/#!revoke-organization-iam-users-authorizations-authorization + + - organizationId (string): Organization ID + - authZone (object): Auth zone + - email (string): Meraki end user's email + - authorizationId (string): Authorization ID + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "authorizations", "authorization"], + "operation": "revokeOrganizationIamUsersAuthorizationsAuthorization", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations/authorization/revoke" + + body_params = [ + "email", + "authorizationId", + "authZone", + ] + 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"revokeOrganizationIamUsersAuthorizationsAuthorization: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationIamUsersAuthorizationsZones(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List all of the available auth zones for an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-authorizations-zones + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 10 - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "authorizations", "zones"], + "operation": "getOrganizationIamUsersAuthorizationsZones", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations/zones" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationIamUsersAuthorizationsZones: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def deleteOrganizationIamUsersAuthorization(self, organizationId: str, authorizationId: str): + """ + **Delete an authorization for a Meraki end user.** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-iam-users-authorization + + - organizationId (string): Organization ID + - authorizationId (string): Authorization ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "authorizations"], + "operation": "deleteOrganizationIamUsersAuthorization", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + authorizationId = urllib.parse.quote(str(authorizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/authorizations/{authorizationId}" + + return self._session.delete(metadata, resource) + + def createOrganizationIamUsersIdp(self, organizationId: str, name: str, type: str, idpConfig: dict, **kwargs): + """ + **Create an identity provider for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idp + + - organizationId (string): Organization ID + - name (string): Name of the identity provider + - type (string): Type of the identity provider + - idpConfig (object): Identity provider configuration. Required for external identity providers. + - description (string): Optional. Description of the identity provider + - syncType (string): The synchronization method for the identity provider. Set to 'proactive' to sync all users and groups from your identity provider. + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = ["Azure AD"] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + if "syncType" in kwargs and kwargs["syncType"] is not None: + options = ["proactive"] + assert kwargs["syncType"] in options, ( + f'''"syncType" cannot be "{kwargs["syncType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["users", "configure", "iam", "idps"], + "operation": "createOrganizationIamUsersIdp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps" + + body_params = [ + "name", + "type", + "description", + "idpConfig", + "syncType", + ] + 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"createOrganizationIamUsersIdp: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def searchOrganizationIdpGroups(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Search all IdP groups for an organization** + https://developer.cisco.com/meraki/api-v1/#!search-organization-idp-groups + + - 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 + - idpIds (array): Filter IdP groups by IdP ID(s). Multiple IdP IDs can be passed as a comma separated list. + - authZone (object): Auth zone + - searchQuery (string): Fuzzy filter by group name + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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": ["users", "configure", "iam", "idps", "groups", "search"], + "operation": "searchOrganizationIdpGroups", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/groups/search" + + body_params = [ + "idpIds", + "authZone", + "searchQuery", + "perPage", + "startingAfter", + "endingBefore", + ] + 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"searchOrganizationIdpGroups: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationIamUsersIdpsProductIntegrations(self, organizationId: str): + """ + **List all available IdP Product Integration urls for the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-idps-product-integrations + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "idps", "productIntegrations"], + "operation": "getOrganizationIamUsersIdpsProductIntegrations", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/productIntegrations" + + return self._session.get(metadata, resource) + + def createOrganizationIamUsersIdpsSearch(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Search all IdPs for an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idps-search + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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. + - idpIds (array): Filter identity providers by id(s). Multiple ids can be passed as a comma separated list. + - type (string): Filter identity providers by idp type. + - authZone (object): Filter by auth zone + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = ["Azure AD"] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["users", "configure", "iam", "idps", "search"], + "operation": "createOrganizationIamUsersIdpsSearch", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/search" + + body_params = [ + "perPage", + "startingAfter", + "endingBefore", + "idpIds", + "type", + "authZone", + ] + 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"createOrganizationIamUsersIdpsSearch: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationIamUsersIdpsSyncHistory(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get the IdP sync status records for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-idps-sync-history + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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. + - idpId (string): Identity provider ID. Optional. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "idps", "sync", "history"], + "operation": "getOrganizationIamUsersIdpsSyncHistory", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/sync/history" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "idpId", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationIamUsersIdpsSyncHistory: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationIamUsersIdpsSyncLatest(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get the latest IdP sync status records for all IdPs in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-idps-sync-latest + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. Default is 10. + - 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. + - idpIds (array): Identity provider IDs. Optional. + - authZoneId (string): Auth Zone ID + - authZoneType (string): Auth Zone type + """ + + kwargs.update(locals()) + + if "authZoneType" in kwargs: + options = ["access_policy", "node_group", "product", "ssid"] + assert kwargs["authZoneType"] in options, ( + f'''"authZoneType" cannot be "{kwargs["authZoneType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["users", "configure", "iam", "idps", "sync", "latest"], + "operation": "getOrganizationIamUsersIdpsSyncLatest", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/sync/latest" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "idpIds", + "authZoneId", + "authZoneType", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "idpIds", + ] + 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"getOrganizationIamUsersIdpsSyncLatest: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationIamUsersIdpsTestConnectivity(self, organizationId: str, **kwargs): + """ + **Test connectivity to an Entra ID identity provider.** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idps-test-connectivity + + - organizationId (string): Organization ID + - idpId (string): Id of the identity provider + - idpConfig (object): Identity provider configuration. Required for external identity providers. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "idps", "testConnectivity"], + "operation": "createOrganizationIamUsersIdpsTestConnectivity", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/testConnectivity" + + body_params = [ + "idpId", + "idpConfig", + ] + 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"createOrganizationIamUsersIdpsTestConnectivity: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def createOrganizationIamUsersIdpsUser(self, organizationId: str, **kwargs): + """ + **Create a Meraki user** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idps-user + + - organizationId (string): Organization ID + - displayName (string): A human-readable identifier for the created user. + - email (string): An email address identified with the user. + - password (string): The password for the user account. + - sendPassword (boolean): If true, sends an email with the password to the user. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "idps"], + "operation": "createOrganizationIamUsersIdpsUser", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/users" + + body_params = [ + "displayName", + "email", + "password", + "sendPassword", + ] + 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"createOrganizationIamUsersIdpsUser: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def updateOrganizationIamUsersIdpsUser(self, organizationId: str, id: str, **kwargs): + """ + **Update a Meraki user** + https://developer.cisco.com/meraki/api-v1/#!update-organization-iam-users-idps-user + + - organizationId (string): Organization ID + - id (string): ID + - displayName (string): A human-readable identifier for the created user. + - email (string): An email address identified with the user. + - password (string): The password for the user account. + - sendPassword (boolean): If true, sends an email with the password to the user. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "idps"], + "operation": "updateOrganizationIamUsersIdpsUser", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/users/{id}" + + body_params = [ + "displayName", + "email", + "password", + "sendPassword", + ] + 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"updateOrganizationIamUsersIdpsUser: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationIamUsersIdpsUser(self, organizationId: str, id: str): + """ + **Delete a Meraki end user** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-iam-users-idps-user + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "idps"], + "operation": "deleteOrganizationIamUsersIdpsUser", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/users/{id}" + + return self._session.delete(metadata, resource) + + def createOrganizationIamUsersIdpSync(self, organizationId: str, idpId: str, **kwargs): + """ + **Trigger an IdP sync for an identity provider** + https://developer.cisco.com/meraki/api-v1/#!create-organization-iam-users-idp-sync + + - organizationId (string): Organization ID + - idpId (string): Idp ID + - emails (array): List of emails to sync + - force (boolean): Force a complete sync of all users and groups + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["users", "configure", "iam", "idps", "sync"], + "operation": "createOrganizationIamUsersIdpSync", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + idpId = urllib.parse.quote(str(idpId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/{idpId}/sync" + + body_params = [ + "emails", + "force", + ] + 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"createOrganizationIamUsersIdpSync: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationIamUsersIdpSyncLatest(self, organizationId: str, idpId: str): + """ + **Get the latest IdP sync status for an identity provider** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-idp-sync-latest + + - organizationId (string): Organization ID + - idpId (string): Idp ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "idps", "sync", "latest"], + "operation": "getOrganizationIamUsersIdpSyncLatest", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + idpId = urllib.parse.quote(str(idpId), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/{idpId}/sync/latest" + + return self._session.get(metadata, resource) + + def updateOrganizationIamUsersIdp(self, organizationId: str, id: str, **kwargs): + """ + **Update an identity provider** + https://developer.cisco.com/meraki/api-v1/#!update-organization-iam-users-idp + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of the identity provider + - description (string): Description of the identity provider + - idpConfig (object): Identity provider configuration. You can update individual attributes + - syncType (string): The synchronization method for the identity provider. Set to 'proactive' to sync all users and groups from your identity provider. Set to 'null' for on-demand user and group provisioning. + """ + + kwargs.update(locals()) + + if "syncType" in kwargs and kwargs["syncType"] is not None: + options = ["proactive"] + assert kwargs["syncType"] in options, ( + f'''"syncType" cannot be "{kwargs["syncType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["users", "configure", "iam", "idps"], + "operation": "updateOrganizationIamUsersIdp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/{id}" + + body_params = [ + "name", + "description", + "idpConfig", + "syncType", + ] + 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"updateOrganizationIamUsersIdp: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationIamUsersIdp(self, organizationId: str, id: str): + """ + **Delete a identity provider from an organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-iam-users-idp + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "idps"], + "operation": "deleteOrganizationIamUsersIdp", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/{id}" + + return self._session.delete(metadata, resource) + + def getOrganizationIamUsersIdpAuthZones(self, organizationId: str, id: str): + """ + **List all auth zones for an identity provider** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-idp-auth-zones + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "idps", "authZones"], + "operation": "getOrganizationIamUsersIdpAuthZones", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/iam/users/idps/{id}/authZones" + + return self._session.get(metadata, resource) + + def searchOrganizationUsers(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the end users and their associated identity providers for an organization.** + https://developer.cisco.com/meraki/api-v1/#!search-organization-users + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 50. Default is 10. + - 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. + - userIds (array): Filter end users by id(s). + - idpIds (array): Filter by identity provider id(s). + - groupIds (array): Filter by identity provider group id(s). + - accessTypes (array): Filter by access type(s). + - searchQuery (string): Fuzzy filter by display name, user name and email. + - statuses (array): Filter by user status(es). + - sortKey (string): Optional parameter to specify the field used to sort results. (default: username) + - sortOrder (string): Optional parameter to specify the sort order. (default: asc) + """ + + kwargs.update(locals()) + + if "sortKey" in kwargs: + options = ["created_at", "updated_at", "username"] + assert kwargs["sortKey"] in options, ( + f'''"sortKey" cannot be "{kwargs["sortKey"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["users", "configure", "iam", "search"], + "operation": "searchOrganizationUsers", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/search" + + body_params = [ + "perPage", + "startingAfter", + "endingBefore", + "userIds", + "idpIds", + "groupIds", + "accessTypes", + "searchQuery", + "statuses", + "sortKey", + "sortOrder", + ] + 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"searchOrganizationUsers: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationIamUsersSummaryPanel(self, organizationId: str): + """ + **Get the count of users and user groups for an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-iam-users-summary-panel + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["users", "configure", "iam", "summaryPanel"], + "operation": "getOrganizationIamUsersSummaryPanel", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/iam/users/summaryPanel" + + return self._session.get(metadata, resource) diff --git a/meraki/api/wireless.py b/meraki/api/wireless.py index be352cc..e87ed42 100644 --- a/meraki/api/wireless.py +++ b/meraki/api/wireless.py @@ -68,6 +68,7 @@ def updateDeviceWirelessBluetoothSettings(self, serial: str, **kwargs): Dashboard's automatically generated value. - minor (integer): Desired minor value of the beacon. If the value is set to null it will reset to Dashboard's automatically generated value. + - transmit (object): Transmit settings including power, interval, and advertised power. """ kwargs.update(locals()) @@ -83,6 +84,7 @@ def updateDeviceWirelessBluetoothSettings(self, serial: str, **kwargs): "uuid", "major", "minor", + "transmit", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -196,6 +198,23 @@ def updateDeviceWirelessElectronicShelfLabel(self, serial: str, **kwargs): return self._session.put(metadata, resource, payload) + def getDeviceWirelessHealthScores(self, serial: str): + """ + **Fetch the health scores for a given AP on this network** + https://developer.cisco.com/meraki/api-v1/#!get-device-wireless-health-scores + + - serial (string): Serial + """ + + metadata = { + "tags": ["wireless", "monitor", "healthScores"], + "operation": "getDeviceWirelessHealthScores", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/healthScores" + + return self._session.get(metadata, resource) + def getDeviceWirelessLatencyStats(self, serial: str, **kwargs): """ **Aggregated latency info for a given AP on this network** @@ -248,6 +267,123 @@ def getDeviceWirelessLatencyStats(self, serial: str, **kwargs): return self._session.get(metadata, resource, params) + def getDeviceWirelessRadioAfcPosition(self, serial: str): + """ + **Return the position for a wireless device** + https://developer.cisco.com/meraki/api-v1/#!get-device-wireless-radio-afc-position + + - serial (string): Serial + """ + + metadata = { + "tags": ["wireless", "configure", "radio", "afc", "position"], + "operation": "getDeviceWirelessRadioAfcPosition", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/radio/afc/position" + + return self._session.get(metadata, resource) + + def updateDeviceWirelessRadioAfcPosition(self, serial: str, **kwargs): + """ + **Update the position attributes for this device** + https://developer.cisco.com/meraki/api-v1/#!update-device-wireless-radio-afc-position + + - serial (string): Serial + - height (object): Height attributes + - gps (object): GPS attributes + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "afc", "position"], + "operation": "updateDeviceWirelessRadioAfcPosition", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/radio/afc/position" + + body_params = [ + "height", + "gps", + ] + 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"updateDeviceWirelessRadioAfcPosition: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getDeviceWirelessRadioAfcPowerLimits(self, serial: str): + """ + **Return the AFC power limits for a wireless device** + https://developer.cisco.com/meraki/api-v1/#!get-device-wireless-radio-afc-power-limits + + - serial (string): Serial + """ + + metadata = { + "tags": ["wireless", "configure", "radio", "afc", "powerLimits"], + "operation": "getDeviceWirelessRadioAfcPowerLimits", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/radio/afc/powerLimits" + + return self._session.get(metadata, resource) + + def getDeviceWirelessRadioOverrides(self, serial: str): + """ + **Return the radio overrides of a device** + https://developer.cisco.com/meraki/api-v1/#!get-device-wireless-radio-overrides + + - serial (string): Serial + """ + + metadata = { + "tags": ["wireless", "configure", "radio", "overrides"], + "operation": "getDeviceWirelessRadioOverrides", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/radio/overrides" + + return self._session.get(metadata, resource) + + def updateDeviceWirelessRadioOverrides(self, serial: str, **kwargs): + """ + **Update 2.4 GHz, 5 GHz, and 6 GHz radio settings (channel, channel width, power, and enable/disable) that override RF profiles.** + https://developer.cisco.com/meraki/api-v1/#!update-device-wireless-radio-overrides + + - serial (string): Serial + - rfProfile (object): This device's RF profile + - radios (array): Radio overrides. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "overrides"], + "operation": "updateDeviceWirelessRadioOverrides", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/radio/overrides" + + body_params = [ + "rfProfile", + "radios", + ] + 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"updateDeviceWirelessRadioOverrides: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def getDeviceWirelessRadioSettings(self, serial: str): """ **Return the manually configured radio settings overrides of a device, which take precedence over RF profiles.** @@ -300,6 +436,23 @@ def updateDeviceWirelessRadioSettings(self, serial: str, **kwargs): return self._session.put(metadata, resource, payload) + def getDeviceWirelessRadioStatus(self, serial: str): + """ + **Show the status of this device's radios** + https://developer.cisco.com/meraki/api-v1/#!get-device-wireless-radio-status + + - serial (string): Serial + """ + + metadata = { + "tags": ["wireless", "configure", "radio", "status"], + "operation": "getDeviceWirelessRadioStatus", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/wireless/radio/status" + + return self._session.get(metadata, resource) + def getDeviceWirelessStatus(self, serial: str): """ **Return the SSID statuses of an access point** @@ -655,6 +808,7 @@ def updateNetworkWirelessBluetoothSettings(self, networkId: str, **kwargs): - majorMinorAssignmentMode (string): The way major and minor number should be assigned to nodes in the network. ('Unique', 'Non-unique') - major (integer): The major number to be used in the beacon identifier. Only valid in 'Non-unique' mode. - minor (integer): The minor number to be used in the beacon identifier. Only valid in 'Non-unique' mode. + - transmit (object): Transmit settings. """ kwargs.update(locals()) @@ -679,6 +833,7 @@ def updateNetworkWirelessBluetoothSettings(self, networkId: str, **kwargs): "majorMinorAssignmentMode", "major", "minor", + "transmit", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -848,6 +1003,23 @@ def getNetworkWirelessClientsConnectionStats(self, networkId: str, **kwargs): return self._session.get(metadata, resource, params) + def getNetworkWirelessClientsHealthScores(self, networkId: str): + """ + **Fetch the health scores for all clients on this network** + https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-clients-health-scores + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["wireless", "monitor", "clients", "healthScores"], + "operation": "getNetworkWirelessClientsHealthScores", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/clients/healthScores" + + return self._session.get(metadata, resource) + def getNetworkWirelessClientsLatencyStats(self, networkId: str, **kwargs): """ **Aggregated latency info for this network, grouped by clients** @@ -902,6 +1074,53 @@ def getNetworkWirelessClientsLatencyStats(self, networkId: str, **kwargs): return self._session.get(metadata, resource, params) + def getNetworkWirelessClientsOnboardingHistory(self, networkId: str, **kwargs): + """ + **Return counts of distinct wireless clients connecting to a network over time** + https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-clients-onboarding-history + + - networkId (string): Network ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 7 days. + - resolution (integer): The time resolution in seconds for returned data. The valid resolutions are: 300. The default is 300. + - band (string): Filter results by band (either '2.4', '5' or '6'); this cannot be combined with the SSID filter. + - ssid (integer): Filter results by SSID number; this cannot be combined with the band filter. + """ + + kwargs.update(locals()) + + if "band" in kwargs: + options = ["2.4", "5", "6"] + assert kwargs["band"] in options, f'''"band" cannot be "{kwargs["band"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["wireless", "monitor", "clients", "onboardingHistory"], + "operation": "getNetworkWirelessClientsOnboardingHistory", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/clients/onboardingHistory" + + query_params = [ + "t0", + "t1", + "timespan", + "resolution", + "band", + "ssid", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getNetworkWirelessClientsOnboardingHistory: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + def getNetworkWirelessClientConnectionStats(self, networkId: str, clientId: str, **kwargs): """ **Aggregated connectivity info for a given client on this network** @@ -1038,6 +1257,25 @@ def getNetworkWirelessClientConnectivityEvents( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getNetworkWirelessClientHealthScores(self, networkId: str, clientId: str): + """ + **Fetch the health scores for a given client on this network** + https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-client-health-scores + + - networkId (string): Network ID + - clientId (string): Client ID + """ + + metadata = { + "tags": ["wireless", "monitor", "clients", "healthScores"], + "operation": "getNetworkWirelessClientHealthScores", + } + networkId = urllib.parse.quote(str(networkId), safe="") + clientId = urllib.parse.quote(str(clientId), safe="") + resource = f"/networks/{networkId}/wireless/clients/{clientId}/healthScores" + + return self._session.get(metadata, resource) + def getNetworkWirelessClientLatencyHistory(self, networkId: str, clientId: str, **kwargs): """ **Return the latency history for a client** @@ -1133,6 +1371,53 @@ def getNetworkWirelessClientLatencyStats(self, networkId: str, clientId: str, ** return self._session.get(metadata, resource, params) + def getNetworkWirelessClientRoamingHistory(self, networkId: str, clientId: str, total_pages=1, direction="next", **kwargs): + """ + **Get client roam events within the specified timespan.** + https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-client-roaming-history + + - networkId (string): Network ID + - clientId (string): Client 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "clients", "roaming", "history"], + "operation": "getNetworkWirelessClientRoamingHistory", + } + networkId = urllib.parse.quote(str(networkId), safe="") + clientId = urllib.parse.quote(str(clientId), safe="") + resource = f"/networks/{networkId}/wireless/clients/{clientId}/roaming/history" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getNetworkWirelessClientRoamingHistory: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getNetworkWirelessConnectionStats(self, networkId: str, **kwargs): """ **Aggregated connectivity info for this network** @@ -1284,6 +1569,23 @@ def getNetworkWirelessDevicesConnectionStats(self, networkId: str, **kwargs): return self._session.get(metadata, resource, params) + def getNetworkWirelessDevicesHealthScores(self, networkId: str): + """ + **Fetch the health scores of all APs on this network** + https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-devices-health-scores + + - networkId (string): Network ID + """ + + metadata = { + "tags": ["wireless", "monitor", "devices", "healthScores"], + "operation": "getNetworkWirelessDevicesHealthScores", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/devices/healthScores" + + return self._session.get(metadata, resource) + def getNetworkWirelessDevicesLatencyStats(self, networkId: str, **kwargs): """ **Aggregated latency info for this network, grouped by node** @@ -1439,6 +1741,7 @@ def createNetworkWirelessEthernetPortsProfile(self, networkId: str, name: str, p - name (string): AP port profile name - ports (array): AP ports configuration - usbPorts (array): AP usb ports configuration + - security (object): AP port security configuration """ kwargs.update(locals()) @@ -1454,6 +1757,7 @@ def createNetworkWirelessEthernetPortsProfile(self, networkId: str, name: str, p "name", "ports", "usbPorts", + "security", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1564,6 +1868,7 @@ def updateNetworkWirelessEthernetPortsProfile(self, networkId: str, profileId: s - name (string): AP port profile name - ports (array): AP ports configuration - usbPorts (array): AP usb ports configuration + - security (object): AP port security configuration """ kwargs.update(locals()) @@ -1580,6 +1885,7 @@ def updateNetworkWirelessEthernetPortsProfile(self, networkId: str, profileId: s "name", "ports", "usbPorts", + "security", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1811,6 +2117,41 @@ def updateNetworkWirelessLocationScanning(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) + def updateNetworkWirelessLocationWayfinding(self, networkId: str, **kwargs): + """ + **Change client wayfinding settings** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-location-wayfinding + + - networkId (string): Network ID + - enabled (boolean): Whether to enable client wayfinding on that network (only supported on Wireless networks). + - maintenanceWindow (object): Maintenance window during which optimization might take place to improve location accuracy. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "location", "wayfinding"], + "operation": "updateNetworkWirelessLocationWayfinding", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/location/wayfinding" + + body_params = [ + "enabled", + "maintenanceWindow", + ] + 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"updateNetworkWirelessLocationWayfinding: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + def getNetworkWirelessMeshStatuses(self, networkId: str, total_pages=1, direction="next", **kwargs): """ **List wireless mesh statuses for repeaters** @@ -1848,32 +2189,26 @@ def getNetworkWirelessMeshStatuses(self, networkId: str, total_pages=1, directio return self._session.get_pages(metadata, resource, params, total_pages, direction) - def updateNetworkWirelessRadioRrm(self, networkId: str, **kwargs): + def updateNetworkWirelessOpportunisticPcap(self, networkId: str, **kwargs): """ - **Update the AutoRF settings for a wireless network** - https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-radio-rrm + **Update the Opportunistic Pcap settings for a wireless network** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-opportunistic-pcap - networkId (string): Network ID - - busyHour (object): Busy Hour settings - - channel (object): Channel settings - - fra (object): FRA settings - - ai (object): AI settings + - enablement (object): Enablement settings """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "radio", "rrm"], - "operation": "updateNetworkWirelessRadioRrm", + "tags": ["wireless", "configure", "opportunisticPcap"], + "operation": "updateNetworkWirelessOpportunisticPcap", } networkId = urllib.parse.quote(str(networkId), safe="") - resource = f"/networks/{networkId}/wireless/radio/rrm" + resource = f"/networks/{networkId}/wireless/opportunisticPcap" body_params = [ - "busyHour", - "channel", - "fra", - "ai", + "enablement", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -1881,18 +2216,94 @@ def updateNetworkWirelessRadioRrm(self, networkId: str, **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"updateNetworkWirelessRadioRrm: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"updateNetworkWirelessOpportunisticPcap: ignoring unrecognized kwargs: {invalid}" + ) return self._session.put(metadata, resource, payload) - def getNetworkWirelessRfProfiles(self, networkId: str, **kwargs): + def updateNetworkWirelessRadioAutoRf(self, networkId: str, **kwargs): """ - **List RF profiles for this network** - https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-rf-profiles + **Update the AutoRF settings for a wireless network** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-radio-auto-rf - networkId (string): Network ID - - includeTemplateProfiles (boolean): If the network is bound to a template, this parameter controls whether or not the non-basic RF profiles defined on the template should be included in the response alongside the non-basic profiles defined on the bound network. Defaults to false. - """ + - busyHour (object): Busy Hour settings + - channel (object): Channel settings + - fra (object): FRA settings + - aiRrm (object): AI-RRM settings + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "autoRf"], + "operation": "updateNetworkWirelessRadioAutoRf", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/radio/autoRf" + + body_params = [ + "busyHour", + "channel", + "fra", + "aiRrm", + ] + 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"updateNetworkWirelessRadioAutoRf: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def updateNetworkWirelessRadioRrm(self, networkId: str, **kwargs): + """ + **Update the AutoRF settings for a wireless network** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-radio-rrm + + - networkId (string): Network ID + - busyHour (object): Busy Hour settings + - channel (object): Channel settings + - fra (object): FRA settings + - ai (object): AI settings + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "rrm"], + "operation": "updateNetworkWirelessRadioRrm", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/wireless/radio/rrm" + + body_params = [ + "busyHour", + "channel", + "fra", + "ai", + ] + 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"updateNetworkWirelessRadioRrm: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + + def getNetworkWirelessRfProfiles(self, networkId: str, **kwargs): + """ + **List RF profiles for this network** + https://developer.cisco.com/meraki/api-v1/#!get-network-wireless-rf-profiles + + - networkId (string): Network ID + - includeTemplateProfiles (boolean): If the network is bound to a template, this parameter controls whether or not the non-basic RF profiles defined on the template should be included in the response alongside the non-basic profiles defined on the bound network. Defaults to false. + """ kwargs.update(locals()) @@ -2252,6 +2663,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - number (string): Number - name (string): The name of the SSID - enabled (boolean): Whether or not the SSID is enabled + - localAuth (boolean): Extended local auth flag for Enterprise NAC - authMode (string): The association control method for the SSID ('open', 'open-enhanced', 'psk', 'open-with-radius', 'open-enhanced-with-radius', 'open-with-nac', '8021x-meraki', '8021x-nac', '8021x-radius', '8021x-google', '8021x-entra', '8021x-localradius', 'ipsk-with-radius', 'ipsk-without-radius', 'ipsk-with-nac' or 'ipsk-with-radius-easy-psk') - enterpriseAdminAccess (string): Whether or not an SSID is accessible by 'enterprise' administrators ('access disabled' or 'access enabled') - ssidAdminAccessible (boolean): SSID Administrator access status @@ -2283,6 +2695,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - radiusAccountingInterimInterval (integer): The interval (in seconds) in which accounting information is updated and sent to the RADIUS accounting server. - radiusAttributeForGroupPolicies (string): Specify the RADIUS attribute used to look up group policies ('Filter-Id', 'Reply-Message', 'Airespace-ACL-Name' or 'Aruba-User-Role'). Access points must receive this attribute in the RADIUS Access-Accept message - ipAssignmentMode (string): The client IP assignment mode ('NAT mode', 'Bridge mode', 'Layer 3 roaming', 'Ethernet over GRE', 'Layer 3 roaming with a concentrator', 'VPN' or 'Campus Gateway') + - campusGateway (object): Campus gateway settings - useVlanTagging (boolean): Whether or not traffic should be directed to use specific VLANs. This param is only valid if the ipAssignmentMode is 'Bridge mode' or 'Layer 3 roaming' - concentratorNetworkId (string): The concentrator to use when the ipAssignmentMode is 'Layer 3 roaming with a concentrator' or 'VPN'. - secondaryConcentratorNetworkId (string): The secondary concentrator to use when the ipAssignmentMode is 'VPN'. If configured, the APs will switch to using this concentrator if the primary concentrator is unreachable. This param is optional. ('disabled' represents no secondary concentrator.) @@ -2312,6 +2725,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - dnsRewrite (object): DNS servers rewrite settings - speedBurst (object): The SpeedBurst setting for this SSID' - namedVlans (object): Named VLAN settings. + - security (object): Security settings for the SSID - localAuthFallback (object): The current configuration for Local Authentication Fallback. Enables the Access Point (AP) to store client authentication data for a specified duration that can be adjusted as needed. - radiusAccountingStartDelay (integer): The delay (in seconds) before sending the first RADIUS accounting start message. Must be between 0 and 60 seconds. """ @@ -2403,6 +2817,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): body_params = [ "name", "enabled", + "localAuth", "authMode", "enterpriseAdminAccess", "ssidAdminAccessible", @@ -2434,6 +2849,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): "radiusAccountingInterimInterval", "radiusAttributeForGroupPolicies", "ipAssignmentMode", + "campusGateway", "useVlanTagging", "concentratorNetworkId", "secondaryConcentratorNetworkId", @@ -2463,6 +2879,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): "dnsRewrite", "speedBurst", "namedVlans", + "security", "localAuthFallback", "radiusAccountingStartDelay", ] @@ -3015,6 +3432,154 @@ def updateNetworkWirelessSsidOpenRoaming(self, networkId: str, number: str, **kw return self._session.put(metadata, resource, payload) + def updateNetworkWirelessSsidPoliciesClientExclusion(self, networkId: str, number: str, **kwargs): + """ + **Update the client exclusion status configuration for a given SSID** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-ssid-policies-client-exclusion + + - networkId (string): Network ID + - number (string): Number + - static (object): Static client exclusion status + - dynamic (object): Dynamic client exclusion configuration + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "ssids", "policies", "clientExclusion"], + "operation": "updateNetworkWirelessSsidPoliciesClientExclusion", + } + networkId = urllib.parse.quote(str(networkId), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/networks/{networkId}/wireless/ssids/{number}/policies/clientExclusion" + + body_params = [ + "static", + "dynamic", + ] + 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"updateNetworkWirelessSsidPoliciesClientExclusion: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def updateNetworkWirelessSsidPoliciesClientExclusionStaticExclusions( + self, networkId: str, number: str, macs: list, **kwargs + ): + """ + **Replace the static client exclusion list for the given SSID (use PUT /exclusions)** + https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-ssid-policies-client-exclusion-static-exclusions + + - networkId (string): Network ID + - number (string): Number + - macs (array): MAC addresses to set as static exclusion list + """ + + kwargs = locals() + + metadata = { + "tags": ["wireless", "configure", "ssids", "policies", "clientExclusion", "static", "exclusions"], + "operation": "updateNetworkWirelessSsidPoliciesClientExclusionStaticExclusions", + } + networkId = urllib.parse.quote(str(networkId), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/networks/{networkId}/wireless/ssids/{number}/policies/clientExclusion/static/exclusions" + + body_params = [ + "macs", + ] + 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"updateNetworkWirelessSsidPoliciesClientExclusionStaticExclusions: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkAdd( + self, networkId: str, number: str, macs: list, **kwargs + ): + """ + **Add MAC addresses to the existing static client exclusion list for the given SSID (use POST /bulkAdd)** + https://developer.cisco.com/meraki/api-v1/#!create-network-wireless-ssid-policies-client-exclusion-static-exclusions-bulk-add + + - networkId (string): Network ID + - number (string): Number + - macs (array): MAC addresses to add to static exclusion + """ + + kwargs = locals() + + metadata = { + "tags": ["wireless", "configure", "ssids", "policies", "clientExclusion", "static", "exclusions", "bulkAdd"], + "operation": "createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkAdd", + } + networkId = urllib.parse.quote(str(networkId), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/networks/{networkId}/wireless/ssids/{number}/policies/clientExclusion/static/exclusions/bulkAdd" + + body_params = [ + "macs", + ] + 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"createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkAdd: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkRemove( + self, networkId: str, number: str, macs: list, **kwargs + ): + """ + **Remove MAC addresses from the existing static client exclusion list for the given SSID (use POST /bulkRemove)** + https://developer.cisco.com/meraki/api-v1/#!create-network-wireless-ssid-policies-client-exclusion-static-exclusions-bulk-remove + + - networkId (string): Network ID + - number (string): Number + - macs (array): MAC addresses to remove from static exclusion + """ + + kwargs = locals() + + metadata = { + "tags": ["wireless", "configure", "ssids", "policies", "clientExclusion", "static", "exclusions", "bulkRemove"], + "operation": "createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkRemove", + } + networkId = urllib.parse.quote(str(networkId), safe="") + number = urllib.parse.quote(str(number), safe="") + resource = f"/networks/{networkId}/wireless/ssids/{number}/policies/clientExclusion/static/exclusions/bulkRemove" + + body_params = [ + "macs", + ] + 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"createNetworkWirelessSsidPoliciesClientExclusionStaticExclusionsBulkRemove: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + def getNetworkWirelessSsidSchedules(self, networkId: str, number: str): """ **List the outage schedule for the SSID** @@ -3103,6 +3668,7 @@ def updateNetworkWirelessSsidSplashSettings(self, networkId: str, number: str, * - redirectUrl (string): The custom redirect URL where the users will go after the splash page. - useRedirectUrl (boolean): The Boolean indicating whether the the user will be redirected to the custom redirect URL after the splash page. A custom redirect URL must be set if this is true. - welcomeMessage (string): The welcome message for the users on the splash page. + - language (string): Language of splash page. - userConsent (object): User consent settings - themeId (string): The id of the selected splash theme. - splashLogo (object): The logo used in the splash page. @@ -3124,6 +3690,32 @@ def updateNetworkWirelessSsidSplashSettings(self, networkId: str, number: str, * assert kwargs["splashTimeout"] in options, ( f'''"splashTimeout" cannot be "{kwargs["splashTimeout"]}", & must be set to one of: {options}''' ) + if "language" in kwargs: + options = [ + "DA", + "DE", + "EL", + "EN", + "ES", + "FI", + "FR", + "GL", + "IT", + "JA", + "KO", + "NL", + "NO", + "PL", + "PT", + "RU", + "SK", + "SV", + "UK", + "ZH", + ] + assert kwargs["language"] in options, ( + f'''"language" cannot be "{kwargs["language"]}", & must be set to one of: {options}''' + ) if "controllerDisconnectionBehavior" in kwargs: options = ["default", "open", "restricted"] assert kwargs["controllerDisconnectionBehavior"] in options, ( @@ -3145,6 +3737,7 @@ def updateNetworkWirelessSsidSplashSettings(self, networkId: str, number: str, * "redirectUrl", "useRedirectUrl", "welcomeMessage", + "language", "userConsent", "themeId", "splashLogo", @@ -3377,34 +3970,38 @@ def updateNetworkWirelessZigbee(self, networkId: str, **kwargs): return self._session.put(metadata, resource, payload) - def getOrganizationWirelessAirMarshalRules(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceConnectivityWirelessRfHealthByBand(self, organizationId: str, networkIds: list, **kwargs): """ - **Returns the current Air Marshal rules for this organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-air-marshal-rules + **Show the by-device RF Health score overview information for the organization in the given interval** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-connectivity-wireless-rf-health-by-band - 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) The set of network IDs to include. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - - 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. + - networkIds (array): Networks for which information should be gathered. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 3600, 14400, 86400. The default is 3600. Interval is calculated if time params are provided. + - minimumRfHealthScore (integer): Minimum RF Health score for an AP to be retrieved. + - maximumRfHealthScore (integer): Maximum RF Health score for an AP to be retrieved. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "airMarshal", "rules"], - "operation": "getOrganizationWirelessAirMarshalRules", + "tags": ["wireless", "configure", "connectivity", "rfHealth", "byBand"], + "operation": "getOrganizationAssuranceConnectivityWirelessRfHealthByBand", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/airMarshal/rules" + resource = f"/organizations/{organizationId}/assurance/connectivity/wireless/rfHealth/byBand" query_params = [ + "t0", + "t1", + "timespan", + "interval", "networkIds", - "perPage", - "startingAfter", - "endingBefore", + "minimumRfHealthScore", + "maximumRfHealthScore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} @@ -3421,23 +4018,26 @@ def getOrganizationWirelessAirMarshalRules(self, organizationId: str, total_page 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"getOrganizationWirelessAirMarshalRules: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceConnectivityWirelessRfHealthByBand: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationWirelessAirMarshalSettingsByNetwork( + def getOrganizationAssuranceImpactedDeviceWirelessByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Returns the current Air Marshal settings for this network** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-air-marshal-settings-by-network + **Returns count of impacted wireless devices per network on a given organization and time range.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-impacted-device-wireless-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): The network IDs to include in the result set. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - networkGroupIds (array): Filter results by a list of network group IDs. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 2 hours and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5000. Default is 1000. - 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. """ @@ -3445,14 +4045,17 @@ def getOrganizationWirelessAirMarshalSettingsByNetwork( kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "airMarshal", "settings", "byNetwork"], - "operation": "getOrganizationWirelessAirMarshalSettingsByNetwork", + "tags": ["wireless", "monitor", "impactedDevice", "byNetwork"], + "operation": "getOrganizationAssuranceImpactedDeviceWirelessByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/airMarshal/settings/byNetwork" + resource = f"/organizations/{organizationId}/assurance/impactedDevice/wireless/byNetwork" query_params = [ - "networkIds", + "networkGroupIds", + "t0", + "t1", + "timespan", "perPage", "startingAfter", "endingBefore", @@ -3460,7 +4063,7 @@ def getOrganizationWirelessAirMarshalSettingsByNetwork( params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "networkIds", + "networkGroupIds", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3472,23 +4075,29 @@ def getOrganizationWirelessAirMarshalSettingsByNetwork( 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"getOrganizationWirelessAirMarshalSettingsByNetwork: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceImpactedDeviceWirelessByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessClientsOverviewByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **List access point client count at the moment in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-overview-by-device + **Summarizes wireless post connection capacity successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-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 access points client counts by network ID. This filter uses multiple exact matches. - - serials (array): Optional parameter to filter access points client counts by its serial numbers. This filter uses multiple exact matches. - - campusGatewayClusterIds (array): Optional parameter to filter access points client counts by MCG cluster IDs. This filter uses multiple exact matches. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. """ @@ -3496,16 +4105,20 @@ def getOrganizationWirelessClientsOverviewByDevice(self, organizationId: str, to kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "clients", "overview", "byDevice"], - "operation": "getOrganizationWirelessClientsOverviewByDevice", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/clients/overview/byDevice" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork" query_params = [ "networkIds", "serials", - "campusGatewayClusterIds", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", "perPage", "startingAfter", "endingBefore", @@ -3515,7 +4128,8 @@ def getOrganizationWirelessClientsOverviewByDevice(self, organizationId: str, to array_params = [ "networkIds", "serials", - "campusGatewayClusterIds", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3527,57 +4141,61 @@ def getOrganizationWirelessClientsOverviewByDevice(self, organizationId: str, to 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"getOrganizationWirelessClientsOverviewByDevice: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesChannelUtilizationByDevice( + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByBand( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Get average channel utilization for all bands in a network, split by AP** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-by-device + **Summarizes wireless post connection capacity successes and failures by band.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-band - 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): Filter results by network. - - serials (array): Filter results by device. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "channelUtilization", "byDevice"], - "operation": "getOrganizationWirelessDevicesChannelUtilizationByDevice", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork", "byBand"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByBand", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/byDevice" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/byBand" query_params = [ "networkIds", "serials", - "perPage", - "startingAfter", - "endingBefore", + "ssidNumbers", + "bands", "t0", "t1", "timespan", - "interval", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3589,57 +4207,61 @@ def getOrganizationWirelessDevicesChannelUtilizationByDevice( 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"getOrganizationWirelessDevicesChannelUtilizationByDevice: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByBand: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesChannelUtilizationByNetwork( + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClient( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Get average channel utilization across all bands for all networks in the organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-by-network + **Summarizes wireless post connection capacity successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-client - 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): Filter results by network. - - serials (array): Filter results by device. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "channelUtilization", "byNetwork"], - "operation": "getOrganizationWirelessDevicesChannelUtilizationByNetwork", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork", "byClient"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClient", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/byNetwork" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/byClient" query_params = [ "networkIds", "serials", - "perPage", - "startingAfter", - "endingBefore", + "ssidNumbers", + "bands", "t0", "t1", "timespan", - "interval", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3651,57 +4273,61 @@ def getOrganizationWirelessDevicesChannelUtilizationByNetwork( 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"getOrganizationWirelessDevicesChannelUtilizationByNetwork: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClient: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval( + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClientOs( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Get a time-series of average channel utilization for all bands, segmented by device.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-history-by-device-by-interval + **Summarizes wireless post connection capacity successes and failures by client OS and driver version.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-client-os - 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): Filter results by network. - - serials (array): Filter results by device. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 7 days. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "channelUtilization", "history", "byDevice", "byInterval"], - "operation": "getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork", "byClientOs"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClientOs", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/history/byDevice/byInterval" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/byClientOs" query_params = [ "networkIds", "serials", - "perPage", - "startingAfter", - "endingBefore", + "ssidNumbers", + "bands", "t0", "t1", "timespan", - "interval", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3713,57 +4339,61 @@ def getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval( 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"getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClientOs: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval( + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClientType( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Get a time-series of average channel utilization for all bands** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-history-by-network-by-interval + **Summarizes wireless post connection capacity successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-client-type - 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): Filter results by network. - - serials (array): Filter results by device. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 7 days. - - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "channelUtilization", "history", "byNetwork", "byInterval"], - "operation": "getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork", "byClientType"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClientType", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/history/byNetwork/byInterval" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/byClientType" query_params = [ "networkIds", "serials", - "perPage", - "startingAfter", - "endingBefore", + "ssidNumbers", + "bands", "t0", "t1", "timespan", - "interval", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3775,44 +4405,61 @@ def getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval( 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"getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByClientType: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesEthernetStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **List the most recent Ethernet link speed, duplex, aggregation and power mode and status information for wireless devices.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-ethernet-statuses + **Summarizes wireless post connection capacity successes and failures by device.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-device - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 100. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - networkIds (array): A list of Meraki network IDs to filter results to contain only specified networks. E.g.: networkIds[]=N_12345678&networkIds[]=L_3456 """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "ethernet", "statuses"], - "operation": "getOrganizationWirelessDevicesEthernetStatuses", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork", "byDevice"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/ethernet/statuses" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/byDevice" query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", "perPage", "startingAfter", "endingBefore", - "networkIds", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", + "serials", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3824,59 +4471,63 @@ def getOrganizationWirelessDevicesEthernetStatuses(self, organizationId: str, to 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"getOrganizationWirelessDevicesEthernetStatuses: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByDevice: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesPacketLossByClient(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Get average packet loss for the given timespan for all clients in the organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-packet-loss-by-client + **Time-series of wireless post connection capacity successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-interval - 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): Filter results by network. - - ssids (array): Filter results by SSID number. - - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. - - macs (array): Filter results by client mac address(es). - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 90 days. The default is 7 days. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "packetLoss", "byClient"], - "operation": "getOrganizationWirelessDevicesPacketLossByClient", + "tags": ["wireless", "monitor", "experience", "channelAvailability", "byNetwork", "byInterval"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/packetLoss/byClient" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/byInterval" query_params = [ "networkIds", - "ssids", + "serials", + "ssidNumbers", "bands", - "macs", - "perPage", - "startingAfter", - "endingBefore", "t0", "t1", "timespan", + "interval", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", - "ssids", + "serials", + "ssidNumbers", "bands", - "macs", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -3888,58 +4539,60 @@ def getOrganizationWirelessDevicesPacketLossByClient(self, organizationId: str, 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"getOrganizationWirelessDevicesPacketLossByClient: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesPacketLossByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Get average packet loss for the given timespan for all devices in the organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-packet-loss-by-device + **Summarizes wireless post connection capacity successes and failures by ssid.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-by-network-by-ssid - 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): Filter results by network. - - serials (array): Filter results by device. - - ssids (array): Filter results by SSID number. - - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 90 days. The default is 7 days. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "packetLoss", "byDevice"], - "operation": "getOrganizationWirelessDevicesPacketLossByDevice", + "tags": ["wireless", "configure", "experience", "channelAvailability", "byNetwork", "bySsid"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkBySsid", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/packetLoss/byDevice" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/byNetwork/bySsid" query_params = [ "networkIds", "serials", - "ssids", + "ssidNumbers", "bands", - "perPage", - "startingAfter", - "endingBefore", "t0", "t1", "timespan", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", - "ssids", + "ssidNumbers", "bands", ] for k, v in kwargs.items(): @@ -3952,60 +4605,70 @@ def getOrganizationWirelessDevicesPacketLossByDevice(self, organizationId: str, 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"getOrganizationWirelessDevicesPacketLossByDevice: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesPacketLossByNetwork( + def getOrganizationAssuranceWirelessExperienceChannelAvailabilityInsightsByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **Get average packet loss for the given timespan for all networks in the organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-packet-loss-by-network + **Provides insights into wireless capacity experience by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-channel-availability-insights-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): Filter results by network. - - serials (array): Filter results by device. - - ssids (array): Filter results by SSID number. - - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - contributor (string): Contributor for which to retrieve insights. If not specified, returns overall insights. + - subContributor (string): Sub-contributor for which to retrieve insights. If not specified, returns all sub contributor insights. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 90 days. The default is 7 days. """ kwargs.update(locals()) + if "contributor" in kwargs: + options = ["Co-channel interference", "High traffic", "Non-wifi interference"] + assert kwargs["contributor"] in options, ( + f'''"contributor" cannot be "{kwargs["contributor"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["wireless", "monitor", "devices", "packetLoss", "byNetwork"], - "operation": "getOrganizationWirelessDevicesPacketLossByNetwork", + "tags": ["wireless", "configure", "experience", "channelAvailability", "insights", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceChannelAvailabilityInsightsByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/packetLoss/byNetwork" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/channelAvailability/insights/byNetwork" query_params = [ "networkIds", "serials", - "ssids", + "ssidNumbers", "bands", - "perPage", - "startingAfter", - "endingBefore", + "contributor", + "subContributor", "t0", "t1", "timespan", + "perPage", + "startingAfter", + "endingBefore", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", - "ssids", + "ssidNumbers", "bands", ] for k, v in kwargs.items(): @@ -4018,53 +4681,143 @@ def getOrganizationWirelessDevicesPacketLossByNetwork( 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"getOrganizationWirelessDevicesPacketLossByNetwork: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceChannelAvailabilityInsightsByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesPowerModeHistory(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationAssuranceWirelessExperienceClientsInsights(self, organizationId: str, **kwargs): """ - **Return a record of power mode changes for wireless devices in the organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-power-mode-history + **Returns the top wireless service-level insights for the specified time window, including each network and the impacted client count per metric.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-clients-insights + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. + - limit (integer): Number of top networks to return. Default is 5. Maximum is 10. + """ + + kwargs.update(locals()) + + if "limit" in kwargs: + options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + assert kwargs["limit"] in options, f'''"limit" cannot be "{kwargs["limit"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["wireless", "configure", "experience", "clients", "insights"], + "operation": "getOrganizationAssuranceWirelessExperienceClientsInsights", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/clients/insights" + + query_params = [ + "t0", + "t1", + "timespan", + "limit", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationAssuranceWirelessExperienceClientsInsights: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationAssuranceWirelessExperienceClientsOverviewHistoryByInterval(self, organizationId: str, **kwargs): + """ + **Returns time series data for impacted and active clients for organization wireless experience metrics.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-clients-overview-history-by-interval + + - organizationId (string): Organization ID + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - resolution (integer): The time resolution in seconds for returned data. The valid resolutions are: 300, 600, 900, 1800, 3600, 86400. The default is 300. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "experience", "clients", "overview", "history", "byInterval"], + "operation": "getOrganizationAssuranceWirelessExperienceClientsOverviewHistoryByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/clients/overview/history/byInterval" + + query_params = [ + "t0", + "t1", + "timespan", + "resolution", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationAssuranceWirelessExperienceClientsOverviewHistoryByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless coverage successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-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 - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 1 day from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 1 day after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 1 day. The default is 1 day. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - networkIds (array): Optional parameter to filter the result set by the included set of network IDs - - serials (array): Optional parameter to filter device availabilities history by device serial numbers """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "power", "mode", "history"], - "operation": "getOrganizationWirelessDevicesPowerModeHistory", + "tags": ["wireless", "configure", "experience", "coverage", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/power/mode/history" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork" query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", "t0", "t1", "timespan", "perPage", "startingAfter", "endingBefore", - "networkIds", - "serials", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", "serials", + "ssidNumbers", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4076,133 +4829,5097 @@ def getOrganizationWirelessDevicesPowerModeHistory(self, organizationId: str, to 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"getOrganizationWirelessDevicesPowerModeHistory: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationAssuranceWirelessExperienceCoverageByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesProvisioningDeployments( + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkByBand( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **List the zero touch deployments for wireless access points in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-provisioning-deployments + **Summarizes wireless coverage successes and failures by band.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-band - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 20. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. - 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. - - search (string): Filter by MAC address, serial number, new device name, old device name, or model. - - sortBy (string): Field used to sort results. Default is 'status'. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "experience", "coverage", "byNetwork", "byBand"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkByBand", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/byBand" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkByBand: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClient( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless coverage successes and failures by client.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-client + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "coverage", "byNetwork", "byClient"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/byClient" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClientOs( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless coverage successes and failures by client OS.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-client-os + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "coverage", "byNetwork", "byClientOs"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClientOs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/byClientOs" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClientOs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClientType( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless coverage successes and failures by client type.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-client-type + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "coverage", "byNetwork", "byClientType"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClientType", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/byClientType" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkByClientType: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless coverage successes and failures by device.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-device + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "coverage", "byNetwork", "byDevice"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/byDevice" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Time-series of wireless coverage successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-interval + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 60, 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "monitor", "experience", "coverage", "byNetwork", "byInterval"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/byInterval" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "interval", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageByNetworkBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless coverage successes and failures by SSID.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-by-network-by-ssid + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "coverage", "byNetwork", "bySsid"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageByNetworkBySsid", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/byNetwork/bySsid" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceCoverageInsightsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Provides insights into wireless coverage experience by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-coverage-insights-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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - contributor (string): Contributor for which to retrieve insights. If not specified, returns overall insights. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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()) + + if "contributor" in kwargs: + options = ["Admin power restriction", "Insufficient AP density", "Sticky client", "Transient weak signal"] + assert kwargs["contributor"] in options, ( + f'''"contributor" cannot be "{kwargs["contributor"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "configure", "experience", "coverage", "insights", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceCoverageInsightsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/coverage/insights/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "contributor", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceCoverageInsightsByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceMetricsOverviewHistoryByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns organization wireless experience metrics overview grouped by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-metrics-overview-history-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): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 5000. Default is 1000. + - 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", "experience", "metrics", "overview", "history", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceMetricsOverviewHistoryByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/metrics/overview/history/byNetwork" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + "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"getOrganizationAssuranceWirelessExperienceMetricsOverviewHistoryByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by band.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-band + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork", "byBand"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byBand" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClient( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by client.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-client + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 10000. + - 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", "experience", "successfulConnects", "byNetwork", "byClient"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byClient" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientOs( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by client OS.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-client-os + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork", "byClientOs"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientOs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byClientOs" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientOs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientType( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by client type.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-client-type + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork", "byClientType"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientType", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byClientType" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientType: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by device.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-device + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork", "byDevice"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byDevice" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Time-series of wireless connection successes and failures by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-interval + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 60, 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "monitor", "experience", "successfulConnects", "byNetwork", "byInterval"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byInterval" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "interval", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServer( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by server.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-server + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork", "byServer"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServer", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byServer" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServer: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by ssid.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network-by-ssid + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "successfulConnects", "byNetwork", "bySsid"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/bySsid" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Provides insights into wireless successful connects experience by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-insights-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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - contributor (string): Contributor for which to retrieve insights. If not specified, returns overall insights. + - subContributor (string): Sub-contributor for which to retrieve insights. If not specified, returns all sub contributor insights. + - insights (string): Insights version to use. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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()) + + if "contributor" in kwargs: + options = ["assoc", "auth", "dhcp", "dns"] + assert kwargs["contributor"] in options, ( + f'''"contributor" cannot be "{kwargs["contributor"]}", & must be set to one of: {options}''' + ) + if "insights" in kwargs: + options = ["1", "2"] + assert kwargs["insights"] in options, ( + f'''"insights" cannot be "{kwargs["insights"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "configure", "experience", "successfulConnects", "insights", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/insights/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "contributor", + "subContributor", + "insights", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless time to connect metrics by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByBand( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by band.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-band + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork", "byBand"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByBand", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byBand" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByBand: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClient( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless time to connect metrics by client.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-client + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 10000. + - 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", "experience", "timeToConnect", "byNetwork", "byClient"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byClient" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClientOs( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by client OS.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-client-os + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork", "byClientOs"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClientOs", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byClientOs" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClientOs: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClientType( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection successes and failures by client type.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-client-type + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork", "byClientType"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClientType", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byClientType" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByClientType: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection time to connect metrics by device.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-device + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork", "byDevice"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byDevice" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Time-series of wireless time to connect by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-interval + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 14 days. The default is 2 hours. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 60, 300, 600, 3600, 14400, 86400. The default is 300. Interval is calculated if time params are provided. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "monitor", "experience", "timeToConnect", "byNetwork", "byInterval"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byInterval" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "interval", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByServer( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection time to connect metrics by server.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-server + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork", "byServer"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByServer", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/byServer" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkByServer: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarizes wireless connection time to connect metrics by ssid.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-by-network-by-ssid + + - 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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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", "experience", "timeToConnect", "byNetwork", "bySsid"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkBySsid", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/byNetwork/bySsid" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationAssuranceWirelessExperienceTimeToConnectInsightsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Provides insights into wireless time to connect experience by network.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-time-to-connect-insights-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): Filter results by network. + - serials (array): Filter results by device serial. + - ssidNumbers (array): Filter results by SSID number. + - bands (array): Filter results by band. + - contributor (string): Contributor for which to retrieve insights. If not specified, returns overall insights. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 14 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 15 minutes and be less than or equal to 14 days. The default is 2 hours. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 10000. Default is 1000. + - 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()) + + if "contributor" in kwargs: + options = ["assoc", "auth", "dhcp", "dns"] + assert kwargs["contributor"] in options, ( + f'''"contributor" cannot be "{kwargs["contributor"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "configure", "experience", "timeToConnect", "insights", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceTimeToConnectInsightsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/assurance/wireless/experience/timeToConnect/insights/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + "contributor", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssidNumbers", + "bands", + ] + 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"getOrganizationAssuranceWirelessExperienceTimeToConnectInsightsByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessAirMarshalRules(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Returns the current Air Marshal rules for this organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-air-marshal-rules + + - 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) The set of network IDs to include. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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", "airMarshal", "rules"], + "operation": "getOrganizationWirelessAirMarshalRules", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/airMarshal/rules" + + 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"getOrganizationWirelessAirMarshalRules: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessAirMarshalSettingsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns the current Air Marshal settings for this network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-air-marshal-settings-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): The network IDs to include in the result set. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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", "airMarshal", "settings", "byNetwork"], + "operation": "getOrganizationWirelessAirMarshalSettingsByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/airMarshal/settings/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"getOrganizationWirelessAirMarshalSettingsByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessAlertsLowPowerByDevice(self, organizationId: str, networkIds: list, **kwargs): + """ + **Gets all low power related alerts over a given network and returns information by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-alerts-low-power-by-device + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "alerts", "lowPower", "byDevice"], + "operation": "getOrganizationWirelessAlertsLowPowerByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/alerts/lowPower/byDevice" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationWirelessAlertsLowPowerByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessCertificatesOpenRoamingCertificateAuthority(self, organizationId: str): + """ + **Query for details on the organization's OpenRoaming Certificate Authority certificate (CAs).** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-certificates-open-roaming-certificate-authority + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["wireless", "configure", "certificates", "openRoaming", "certificateAuthority"], + "operation": "getOrganizationWirelessCertificatesOpenRoamingCertificateAuthority", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/certificates/openRoaming/certificateAuthority" + + return self._session.get(metadata, resource) + + def getOrganizationWirelessClientsConnectionsAssociationByClient(self, organizationId: str, **kwargs): + """ + **Summarize association outcomes per wireless client across an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-connections-association-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "clients", "connections", "association", "byClient"], + "operation": "getOrganizationWirelessClientsConnectionsAssociationByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/connections/association/byClient" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationWirelessClientsConnectionsAssociationByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessClientsConnectionsAuthenticationByClient(self, organizationId: str, **kwargs): + """ + **Summarize authentication outcomes per wireless client across an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-connections-authentication-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "clients", "connections", "authentication", "byClient"], + "operation": "getOrganizationWirelessClientsConnectionsAuthenticationByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/connections/authentication/byClient" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationWirelessClientsConnectionsAuthenticationByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessClientsConnectionsDhcpByClient(self, organizationId: str, **kwargs): + """ + **Get IP assignment for all clients in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-connections-dhcp-by-client + + - organizationId (string): Organization ID + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 7 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 2 hours. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "clients", "connections", "dhcp", "byClient"], + "operation": "getOrganizationWirelessClientsConnectionsDhcpByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/connections/dhcp/byClient" + + query_params = [ + "networkIds", + "t0", + "t1", + "timespan", + ] + 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"getOrganizationWirelessClientsConnectionsDhcpByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessClientsConnectionsFailuresHistoryByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns failed wireless client connections for this organization by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-connections-failures-history-by-device + + - 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 + - connectionTimeSortOrder (string): (optional) Sort order of events by connection start time. (default desc) + - failureSteps (array): (optional) The step in the connection process that failed + - clientMac (string): (optional) The MAC address of the client with which the list of events will be filtered. + - serials (array): (optional) Filter devices by serial number + - timespan (integer): (optional) The timespan, in seconds, for the failed connections. The period will be from [timespan] seconds ago until now. The maximum allowed timespan is 1 month. Default: 86400 (24 hours) + - ssidNumber (integer): (optional) The SSID number to include + - networkIds (array): (optional) The set of network IDs to include. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 50. + - 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()) + + if "connectionTimeSortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["connectionTimeSortOrder"] in options, ( + f'''"connectionTimeSortOrder" cannot be "{kwargs["connectionTimeSortOrder"]}", & must be set to one of: {options}''' + ) + if "ssidNumber" in kwargs: + options = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] + assert kwargs["ssidNumber"] in options, ( + f'''"ssidNumber" cannot be "{kwargs["ssidNumber"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "configure", "clients", "connections", "failures", "history", "byDevice"], + "operation": "getOrganizationWirelessClientsConnectionsFailuresHistoryByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/connections/failures/history/byDevice" + + query_params = [ + "connectionTimeSortOrder", + "failureSteps", + "clientMac", + "serials", + "timespan", + "ssidNumber", + "networkIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "failureSteps", + "serials", + "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"getOrganizationWirelessClientsConnectionsFailuresHistoryByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessClientsConnectionsImpactedByNetworkBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Summarize the number of wireless clients impacted by connection failures on network SSIDs, across an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-connections-impacted-by-network-by-ssid + + - 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): Filter results by network. + - networkGroupIds (array): Filter results by a list of network group IDs. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 7 days. The default is 2 hours. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "clients", "connections", "impacted", "byNetwork", "bySsid"], + "operation": "getOrganizationWirelessClientsConnectionsImpactedByNetworkBySsid", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/connections/impacted/byNetwork/bySsid" + + query_params = [ + "networkIds", + "networkGroupIds", + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "networkGroupIds", + ] + 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"getOrganizationWirelessClientsConnectionsImpactedByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessClientsOverviewByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List access point client count at the moment in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-overview-by-device + + - 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 access points client counts by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter access points client counts by its serial numbers. This filter uses multiple exact matches. + - campusGatewayClusterIds (array): Optional parameter to filter access points client counts by MCG cluster IDs. This filter uses multiple exact matches. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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", "monitor", "clients", "overview", "byDevice"], + "operation": "getOrganizationWirelessClientsOverviewByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/overview/byDevice" + + query_params = [ + "networkIds", + "serials", + "campusGatewayClusterIds", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "campusGatewayClusterIds", + ] + 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"getOrganizationWirelessClientsOverviewByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def byOrganizationWirelessClientsRfHealthOverviewNetwork(self, organizationId: str, **kwargs): + """ + **Show the by-network client information for the organization in the given interval** + https://developer.cisco.com/meraki/api-v1/#!by-organization-wireless-clients-rf-health-overview-network + + - organizationId (string): Organization ID + - networkIds (array): Networks for which information should be gathered. + - bands (array): Bands for which information should be gathered. Valid bands are 2.4, 5, and 6. + - channels (array): Channel for which information should be gathered. + - serials (array): Serial number of the devices for which information should be gathered. + - gFloorplanId (string): Geoaligned floorplan ID nodes for which information is gathered belong to. + - tags (array): Access Point tags for which information should be gathered. + - models (array): Access Point models for which information should be gathered. + - rfProfiles (array): Rf Profiles for which information should be gathered. + - minimumRfHealthScore (integer): Minimum RF Health score for an AP to be retrieved. + - maximumRfHealthScore (integer): Maximum RF Health score for an AP to be retrieved. + - retryOnEmpty (boolean): If true, the query will be retried with a longer timeframe if the results are empty. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "clients", "rfHealth", "overview"], + "operation": "byOrganizationWirelessClientsRfHealthOverviewNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/rfHealth/overview/byNetwork" + + query_params = [ + "networkIds", + "bands", + "channels", + "serials", + "gFloorplanId", + "tags", + "models", + "rfProfiles", + "minimumRfHealthScore", + "maximumRfHealthScore", + "retryOnEmpty", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "bands", + "channels", + "serials", + "tags", + "models", + "rfProfiles", + ] + 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"byOrganizationWirelessClientsRfHealthOverviewNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessClientsStickyEvents(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get sticky client events within the specified timespan.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-sticky-events + + - 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): Filter results by network. + - clientIds (array): Filter results by client id. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "clients", "stickyEvents"], + "operation": "getOrganizationWirelessClientsStickyEvents", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/stickyEvents" + + query_params = [ + "networkIds", + "clientIds", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "clientIds", + ] + 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"getOrganizationWirelessClientsStickyEvents: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessClientsUsageByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Returns client usage details for wireless networks within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-usage-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 + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 1 hour and be less than or equal to 7 days. The default is 2 hours. + - networkIds (array): Filter results by a list of network IDs. + - networkGroupIds (array): Filter results by a list of network group IDs. + - gatewayNetworkIds (array): Limit the results to clients tunneled to campus gateways in the provided networks. + - usageUnits (string): Usage units to use in the response. + """ + + kwargs.update(locals()) + + if "usageUnits" in kwargs: + options = ["GB", "KB", "MB", "TB"] + assert kwargs["usageUnits"] in options, ( + f'''"usageUnits" cannot be "{kwargs["usageUnits"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "monitor", "clients", "usage", "byNetwork"], + "operation": "getOrganizationWirelessClientsUsageByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/usage/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "networkGroupIds", + "gatewayNetworkIds", + "usageUnits", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "networkGroupIds", + "gatewayNetworkIds", + ] + 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"getOrganizationWirelessClientsUsageByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessClientsUsageByNetworkBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns client usage details for wireless network SSIDs within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-usage-by-network-by-ssid + + - 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 + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 1 hour and be less than or equal to 7 days. The default is 2 hours. + - networkIds (array): Filter results by a list of network IDs. + - networkGroupIds (array): Filter results by a list of network group IDs. + - ssidIds (array): Filter results by a list of SSID IDs. + - ssidNames (array): Filter results by a list of SSID names. + - gatewayNetworkIds (array): Limit the results to clients tunneled to campus gateways in the provided networks. + - usageUnits (string): Usage units to use in the response. + """ + + kwargs.update(locals()) + + if "usageUnits" in kwargs: + options = ["GB", "KB", "MB", "TB"] + assert kwargs["usageUnits"] in options, ( + f'''"usageUnits" cannot be "{kwargs["usageUnits"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "monitor", "clients", "usage", "byNetwork", "bySsid"], + "operation": "getOrganizationWirelessClientsUsageByNetworkBySsid", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/usage/byNetwork/bySsid" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "networkGroupIds", + "ssidIds", + "ssidNames", + "gatewayNetworkIds", + "usageUnits", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "networkGroupIds", + "ssidIds", + "ssidNames", + "gatewayNetworkIds", + ] + 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"getOrganizationWirelessClientsUsageByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessClientsUsageBySsid(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Returns client usage details for SSIDs within an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-clients-usage-by-ssid + + - 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 + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 8 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 1 hour and be less than or equal to 7 days. The default is 2 hours. + - ssidNames (array): Filter results by a list of SSID names. + - networkIds (array): Limit the results to clients that belong to one of the provided networks. + - networkGroupIds (array): Limit the results to clients that belong to one of the provided network groups. + - gatewayNetworkIds (array): Limit the results to clients tunneled to campus gateways in the provided networks. + - usageUnits (string): Usage units to use in the response. + """ + + kwargs.update(locals()) + + if "usageUnits" in kwargs: + options = ["GB", "KB", "MB", "TB"] + assert kwargs["usageUnits"] in options, ( + f'''"usageUnits" cannot be "{kwargs["usageUnits"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "monitor", "clients", "usage", "bySsid"], + "operation": "getOrganizationWirelessClientsUsageBySsid", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/clients/usage/bySsid" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "ssidNames", + "networkIds", + "networkGroupIds", + "gatewayNetworkIds", + "usageUnits", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "ssidNames", + "networkIds", + "networkGroupIds", + "gatewayNetworkIds", + ] + 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"getOrganizationWirelessClientsUsageBySsid: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesAccelerometerStatuses( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the most recent AP accelerometer status information for wireless devices that support it.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-accelerometer-statuses + + - 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 + - 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. + - networkIds (array): A list of Meraki network IDs to filter results to contain only specified networks. E.g.: networkIds[]=N_12345678&networkIds[]=L_3456 + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "accelerometer", "statuses"], + "operation": "getOrganizationWirelessDevicesAccelerometerStatuses", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/accelerometer/statuses" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationWirelessDevicesAccelerometerStatuses: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesChannelUtilizationByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get average channel utilization for all bands in a network, split by AP** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-by-device + + - 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): Filter results by network. + - serials (array): Filter results by device. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "channelUtilization", "byDevice"], + "operation": "getOrganizationWirelessDevicesChannelUtilizationByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/byDevice" + + query_params = [ + "networkIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesChannelUtilizationByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesChannelUtilizationByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get average channel utilization across all bands for all networks in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-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): Filter results by network. + - serials (array): Filter results by device. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "channelUtilization", "byNetwork"], + "operation": "getOrganizationWirelessDevicesChannelUtilizationByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/byNetwork" + + query_params = [ + "networkIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesChannelUtilizationByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get a time-series of average channel utilization for all bands, segmented by device.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-history-by-device-by-interval + + - 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): Filter results by network. + - serials (array): Filter results by device. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 7 days. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "channelUtilization", "history", "byDevice", "byInterval"], + "operation": "getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/history/byDevice/byInterval" + + query_params = [ + "networkIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesChannelUtilizationHistoryByDeviceByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get a time-series of average channel utilization for all bands** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-channel-utilization-history-by-network-by-interval + + - 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): Filter results by network. + - serials (array): Filter results by device. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 31 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 31 days. The default is 7 days. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 3600, 7200, 14400, 21600. The default is 3600. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "channelUtilization", "history", "byNetwork", "byInterval"], + "operation": "getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/channelUtilization/history/byNetwork/byInterval" + + query_params = [ + "networkIds", + "serials", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "interval", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesChannelUtilizationHistoryByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesDataRateByClient(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get average uplink and downlink datarates for all clients in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-data-rate-by-client + + - 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): Filter results by network. + - serials (array): Filter results by device serial number. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - macs (array): Filter results by client mac address(es). + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "dataRate", "byClient"], + "operation": "getOrganizationWirelessDevicesDataRateByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/dataRate/byClient" + + query_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "macs", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "macs", + ] + 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"getOrganizationWirelessDevicesDataRateByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesEthernetStatuses(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the most recent Ethernet link speed, duplex, aggregation and power mode and status information for wireless devices.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-ethernet-statuses + + - 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 + - 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. + - networkIds (array): A list of Meraki network IDs to filter results to contain only specified networks. E.g.: networkIds[]=N_12345678&networkIds[]=L_3456 + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "ethernet", "statuses"], + "operation": "getOrganizationWirelessDevicesEthernetStatuses", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/ethernet/statuses" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationWirelessDevicesEthernetStatuses: 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.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-latency-by-client + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. + - networkIds (array): Filter results by network. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - ssids (array): Filter results by SSID number. + - macs (array): Filter results by client mac address(es). + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "latency", "byClient"], + "operation": "getOrganizationWirelessDevicesLatencyByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/latency/byClient" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "bands", + "ssids", + "macs", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "bands", + "ssids", + "macs", + ] + 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"getOrganizationWirelessDevicesLatencyByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesLatencyByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get latency summaries for all wireless devices in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-latency-by-device + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - ssids (array): Filter results by SSID number. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "latency", "byDevice"], + "operation": "getOrganizationWirelessDevicesLatencyByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/latency/byDevice" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "serials", + "bands", + "ssids", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "bands", + "ssids", + ] + 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"getOrganizationWirelessDevicesLatencyByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesLatencyByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get per-network latency summaries for all wireless networks in an organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-latency-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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 90 days. The default is 7 days. + - networkIds (array): Filter results by network. + - serials (array): Filter results by device. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - ssids (array): Filter results by SSID number. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "latency", "byNetwork"], + "operation": "getOrganizationWirelessDevicesLatencyByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/latency/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "serials", + "bands", + "ssids", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "bands", + "ssids", + ] + 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"getOrganizationWirelessDevicesLatencyByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationWirelessDevicesLiveToolsClientDisconnect(self, organizationId: str, clientId: str, **kwargs): + """ + **Enqueue a job to disconnect a client from an AP** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-devices-live-tools-client-disconnect + + - organizationId (string): Organization ID + - clientId (string): Client ID + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "liveTools", "devices", "clients", "disconnect"], + "operation": "createOrganizationWirelessDevicesLiveToolsClientDisconnect", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + clientId = urllib.parse.quote(str(clientId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/liveTools/clients/{clientId}/disconnect" + + body_params = [ + "callback", + ] + 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"createOrganizationWirelessDevicesLiveToolsClientDisconnect: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def getOrganizationWirelessDevicesPacketLossByClient(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get average packet loss for the given timespan for all clients in the organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-packet-loss-by-client + + - 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): Filter results by network. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - macs (array): Filter results by client mac address(es). + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 90 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "packetLoss", "byClient"], + "operation": "getOrganizationWirelessDevicesPacketLossByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/packetLoss/byClient" + + query_params = [ + "networkIds", + "ssids", + "bands", + "macs", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "ssids", + "bands", + "macs", + ] + 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"getOrganizationWirelessDevicesPacketLossByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesPacketLossByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Get average packet loss for the given timespan for all devices in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-packet-loss-by-device + + - 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): Filter results by network. + - serials (array): Filter results by device. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 90 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "packetLoss", "byDevice"], + "operation": "getOrganizationWirelessDevicesPacketLossByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/packetLoss/byDevice" + + query_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssids", + "bands", + ] + 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"getOrganizationWirelessDevicesPacketLossByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesPacketLossByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get average packet loss for the given timespan for all networks in the organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-packet-loss-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): Filter results by network. + - serials (array): Filter results by device. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 90 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 90 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 90 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "packetLoss", "byNetwork"], + "operation": "getOrganizationWirelessDevicesPacketLossByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/packetLoss/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssids", + "bands", + ] + 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"getOrganizationWirelessDevicesPacketLossByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesPowerModeHistory(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return a record of power mode changes for wireless devices in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-power-mode-history + + - 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 + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 1 day from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 1 day after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 1 day. The default is 1 day. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - 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. + - networkIds (array): Optional parameter to filter the result set by the included set of network IDs + - serials (array): Optional parameter to filter device availabilities history by device serial numbers + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "power", "mode", "history"], + "operation": "getOrganizationWirelessDevicesPowerModeHistory", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/power/mode/history" + + query_params = [ + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesPowerModeHistory: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesProvisioningDeployments( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List the zero touch deployments for wireless access points in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-provisioning-deployments + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 20. + - 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. + - search (string): Filter by MAC address, serial number, new device name, old device name, or model. + - sortBy (string): Field used to sort results. Default is 'status'. - sortOrder (string): Sort order. Default is 'asc'. - deploymentType (string): Filter deployments by type. """ kwargs.update(locals()) - if "sortBy" in kwargs: - options = ["afterAction", "createdAt", "deploymentId", "name", "status"] - assert kwargs["sortBy"] in options, ( - f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' - ) - if "sortOrder" in kwargs: - options = ["asc", "desc"] - assert kwargs["sortOrder"] in options, ( - f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' - ) - if "deploymentType" in kwargs: - options = ["deploy", "replace"] - assert kwargs["deploymentType"] in options, ( - f'''"deploymentType" cannot be "{kwargs["deploymentType"]}", & must be set to one of: {options}''' - ) + if "sortBy" in kwargs: + options = ["afterAction", "createdAt", "deploymentId", "name", "status"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + if "deploymentType" in kwargs: + options = ["deploy", "replace"] + assert kwargs["deploymentType"] in options, ( + f'''"deploymentType" cannot be "{kwargs["deploymentType"]}", & must be set to one of: {options}''' + ) + + metadata = { + "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], + "operation": "getOrganizationWirelessDevicesProvisioningDeployments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "search", + "sortBy", + "sortOrder", + "deploymentType", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + if self._session._validate_kwargs: + all_params = query_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"getOrganizationWirelessDevicesProvisioningDeployments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationWirelessDevicesProvisioningDeployment(self, organizationId: str, items: list, **kwargs): + """ + **Create a zero touch deployment for a wireless access point** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-devices-provisioning-deployment + + - organizationId (string): Organization ID + - items (array): List of zero touch deployments to create + - meta (object): Metadata relevant to the paginated dataset + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], + "operation": "createOrganizationWirelessDevicesProvisioningDeployment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments" + + body_params = [ + "items", + "meta", + ] + 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"createOrganizationWirelessDevicesProvisioningDeployment: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationWirelessDevicesProvisioningDeployments(self, organizationId: str, items: list, **kwargs): + """ + **Update a zero touch deployment** + https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-devices-provisioning-deployments + + - organizationId (string): Organization ID + - items (array): List of zero touch deployments to create + - meta (object): Metadata relevant to the paginated dataset + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], + "operation": "updateOrganizationWirelessDevicesProvisioningDeployments", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments" + + body_params = [ + "items", + "meta", + ] + 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"updateOrganizationWirelessDevicesProvisioningDeployments: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def getOrganizationWirelessDevicesProvisioningDeploymentsByNewDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns deployment IDs for the given new node serial numbers** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-provisioning-deployments-by-new-device + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 80. + - 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. + - serials (array): Array of new device serial numbers to query + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "provisioning", "deployments", "byNewDevice"], + "operation": "getOrganizationWirelessDevicesProvisioningDeploymentsByNewDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments/byNewDevice" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "serials", + ] + 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"getOrganizationWirelessDevicesProvisioningDeploymentsByNewDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def deleteOrganizationWirelessDevicesProvisioningDeployment(self, organizationId: str, deploymentId: str): + """ + **Delete a zero touch deployment** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-devices-provisioning-deployment + + - organizationId (string): Organization ID + - deploymentId (string): Deployment ID + """ + + metadata = { + "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], + "operation": "deleteOrganizationWirelessDevicesProvisioningDeployment", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + deploymentId = urllib.parse.quote(str(deploymentId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments/{deploymentId}" + + return self._session.delete(metadata, resource) + + def getOrganizationWirelessDevicesProvisioningRecommendationsTags(self, organizationId: str, **kwargs): + """ + **List the recommended device tags for zero touch deployments available for the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-provisioning-recommendations-tags + + - organizationId (string): Organization ID + - networkIds (array): The list of networks to use as hints for device tags recommendations. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "provisioning", "recommendations", "tags"], + "operation": "getOrganizationWirelessDevicesProvisioningRecommendationsTags", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/provisioning/recommendations/tags" + + query_params = [ + "networkIds", + ] + 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"getOrganizationWirelessDevicesProvisioningRecommendationsTags: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessDevicesRadsecCertificatesAuthorities(self, organizationId: str, **kwargs): + """ + **Query for details on the organization's RADSEC device Certificate Authority certificates (CAs)** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-radsec-certificates-authorities + + - organizationId (string): Organization ID + - certificateAuthorityIds (array): Optional parameter to filter CAs by one or more CA IDs. All returned CAs will have an ID that is an exact match. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities"], + "operation": "getOrganizationWirelessDevicesRadsecCertificatesAuthorities", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities" + + query_params = [ + "certificateAuthorityIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "certificateAuthorityIds", + ] + 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"getOrganizationWirelessDevicesRadsecCertificatesAuthorities: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def updateOrganizationWirelessDevicesRadsecCertificatesAuthorities(self, organizationId: str, **kwargs): + """ + **Update an organization's RADSEC device Certificate Authority (CA) state** + https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-devices-radsec-certificates-authorities + + - organizationId (string): Organization ID + - status (string): The "status" to update the Certificate Authority to. Only valid option is "trusted". + - certificateAuthorityId (string): The ID of the Certificate Authority to update. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities"], + "operation": "updateOrganizationWirelessDevicesRadsecCertificatesAuthorities", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities" + + body_params = [ + "status", + "certificateAuthorityId", + ] + 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"updateOrganizationWirelessDevicesRadsecCertificatesAuthorities: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def createOrganizationWirelessDevicesRadsecCertificatesAuthority(self, organizationId: str): + """ + **Create an organization's RADSEC device Certificate Authority (CA)** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-devices-radsec-certificates-authority + + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities"], + "operation": "createOrganizationWirelessDevicesRadsecCertificatesAuthority", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities" + + return self._session.post(metadata, resource) + + def getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls(self, organizationId: str, **kwargs): + """ + **Query for certificate revocation list (CRL) for the organization's RADSEC device Certificate Authorities (CAs).** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-radsec-certificates-authorities-crls + + - organizationId (string): Organization ID + - certificateAuthorityIds (array): Optional parameter to filter CAs by one or more CA IDs. All returned CAs will have an ID that is an exact match. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities", "crls"], + "operation": "getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities/crls" + + query_params = [ + "certificateAuthorityIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "certificateAuthorityIds", + ] + 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"getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas(self, organizationId: str, **kwargs): + """ + **Query for all delta certificate revocation list (CRL) for the organization's RADSEC device Certificate Authority (CA) with the given id.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-radsec-certificates-authorities-crls-deltas + + - organizationId (string): Organization ID + - certificateAuthorityIds (array): Parameter to filter CAs by one or more CA IDs. All returned CAs will have an ID that is an exact match. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities", "crls", "deltas"], + "operation": "getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities/crls/deltas" + + query_params = [ + "certificateAuthorityIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "certificateAuthorityIds", + ] + 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"getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessDevicesSignalQualityByClient( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get average signal quality for all clients in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-signal-quality-by-client + + - 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): Filter results by network. + - serials (array): Filter results by device serial number. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - macs (array): Filter results by client mac address(es). + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "signalQuality", "byClient"], + "operation": "getOrganizationWirelessDevicesSignalQualityByClient", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/signalQuality/byClient" + + query_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "macs", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "macs", + ] + 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"getOrganizationWirelessDevicesSignalQualityByClient: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesSignalQualityByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get average signal quality for all devices in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-signal-quality-by-device + + - 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): Filter results by network. + - serials (array): Filter results by device serial number. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "signalQuality", "byDevice"], + "operation": "getOrganizationWirelessDevicesSignalQualityByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/signalQuality/byDevice" + + query_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssids", + "bands", + ] + 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"getOrganizationWirelessDevicesSignalQualityByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesSignalQualityByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Get average signal quality for all networks in the organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-signal-quality-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): Filter results by network. + - serials (array): Filter results by device serial number. + - ssids (array): Filter results by SSID number. + - bands (array): Filter results by band. Valid bands are: 2.4, 5, and 6. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 30 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days. The default is 7 days. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "signalQuality", "byNetwork"], + "operation": "getOrganizationWirelessDevicesSignalQualityByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/signalQuality/byNetwork" + + query_params = [ + "networkIds", + "serials", + "ssids", + "bands", + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "ssids", + "bands", + ] + 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"getOrganizationWirelessDevicesSignalQualityByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesSystemCpuLoadHistory( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Return the CPU Load history for a list of wireless devices in the organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-system-cpu-load-history + + - 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 + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 1 day from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 1 day after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 1 day. The default is 1 day. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. + - 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. + - networkIds (array): Optional parameter to filter the result set by the included set of network IDs + - serials (array): Optional parameter to filter device availabilities history by device serial numbers + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "system", "cpu", "load", "history"], + "operation": "getOrganizationWirelessDevicesSystemCpuLoadHistory", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/system/cpu/load/history" + + query_params = [ + "t0", + "t1", + "timespan", + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesSystemCpuLoadHistory: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesTelemetry(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the wireless device telemetry of an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-telemetry + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 200. 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. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 3 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 minutes after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be greater than or equal to 5 minutes and be less than or equal to 30 minutes. The default is 30 minutes. + - networkIds (array): Optional parameter to filter results by network. + - serials (array): Optional parameter to filter results by device serial. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "telemetry"], + "operation": "getOrganizationWirelessDevicesTelemetry", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/telemetry" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "t0", + "t1", + "timespan", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessDevicesTelemetry: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessDevicesWirelessControllersByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List of Catalyst access points information** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-wireless-controllers-by-device + + - 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 access points by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter access points by its cloud ID. This filter uses multiple exact matches. + - controllerSerials (array): Optional parameter to filter access points by its wireless LAN controller cloud ID. This filter uses multiple exact matches. + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "monitor", "devices", "wirelessControllers", "byDevice"], + "operation": "getOrganizationWirelessDevicesWirelessControllersByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/wirelessControllers/byDevice" + + query_params = [ + "networkIds", + "serials", + "controllerSerials", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "controllerSerials", + ] + 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"getOrganizationWirelessDevicesWirelessControllersByDevice: 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** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-location-scanning-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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 250. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter scanning settings by network ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "location", "scanning", "byNetwork"], + "operation": "getOrganizationWirelessLocationScanningByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/location/scanning/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationWirelessLocationScanningByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessLocationScanningReceivers(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return scanning API receivers** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-location-scanning-receivers + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 250. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter scanning API receivers by network ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "location", "scanning", "receivers"], + "operation": "getOrganizationWirelessLocationScanningReceivers", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationWirelessLocationScanningReceivers: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationWirelessLocationScanningReceiver( + self, organizationId: str, network: dict, url: str, version: str, radio: dict, sharedSecret: str, **kwargs + ): + """ + **Add new receiver for scanning API** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-location-scanning-receiver + + - organizationId (string): Organization ID + - network (object): Add scanning API receiver for network + - url (string): Receiver Url + - version (string): Scanning API Version + - radio (object): Add scanning API Radio + - sharedSecret (string): Secret Value for Receiver + """ + + kwargs = locals() + + metadata = { + "tags": ["wireless", "configure", "location", "scanning", "receivers"], + "operation": "createOrganizationWirelessLocationScanningReceiver", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers" + + body_params = [ + "network", + "url", + "version", + "radio", + "sharedSecret", + ] + 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"createOrganizationWirelessLocationScanningReceiver: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateOrganizationWirelessLocationScanningReceiver(self, organizationId: str, receiverId: str, **kwargs): + """ + **Change scanning API receiver settings** + https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-location-scanning-receiver + + - organizationId (string): Organization ID + - receiverId (string): Receiver ID + - url (string): Receiver Url + - version (string): Scanning API Version + - radio (object): Add scanning API Radio + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "location", "scanning", "receivers"], + "operation": "updateOrganizationWirelessLocationScanningReceiver", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + receiverId = urllib.parse.quote(str(receiverId), safe="") + resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers/{receiverId}" + + body_params = [ + "url", + "version", + "radio", + ] + 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"updateOrganizationWirelessLocationScanningReceiver: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationWirelessLocationScanningReceiver(self, organizationId: str, receiverId: str): + """ + **Delete a scanning API receiver** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-location-scanning-receiver + + - organizationId (string): Organization ID + - receiverId (string): Receiver ID + """ + + metadata = { + "tags": ["wireless", "configure", "location", "scanning", "receivers"], + "operation": "deleteOrganizationWirelessLocationScanningReceiver", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + receiverId = urllib.parse.quote(str(receiverId), safe="") + resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers/{receiverId}" + + return self._session.delete(metadata, resource) + + def getOrganizationWirelessLocationWayfindingByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Return Client wayfinding settings** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-location-wayfinding-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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter wayfinding settings by network ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "location", "wayfinding", "byNetwork"], + "operation": "getOrganizationWirelessLocationWayfindingByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/location/wayfinding/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationWirelessLocationWayfindingByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessMqttSettings(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **Return MQTT Settings for networks** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-mqtt-settings + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 250. Default is 50. + - 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. + - networkIds (array): Optional parameter to filter mqtt settings by network ID. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "mqtt", "settings"], + "operation": "getOrganizationWirelessMqttSettings", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/mqtt/settings" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + 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"getOrganizationWirelessMqttSettings: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def updateOrganizationWirelessMqttSettings(self, organizationId: str, network: dict, mqtt: dict, **kwargs): + """ + **Add new broker config for wireless MQTT** + https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-mqtt-settings + + - organizationId (string): Organization ID + - network (object): Add MQTT Settings for network + - mqtt (object): MQTT Settings for network + - ble (object): MQTT BLE Settings for network + - wifi (object): MQTT Wi-Fi Settings for network + """ + + kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], - "operation": "getOrganizationWirelessDevicesProvisioningDeployments", + "tags": ["wireless", "configure", "mqtt", "settings"], + "operation": "updateOrganizationWirelessMqttSettings", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments" + resource = f"/organizations/{organizationId}/wireless/mqtt/settings" + + body_params = [ + "network", + "mqtt", + "ble", + "wifi", + ] + 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"updateOrganizationWirelessMqttSettings: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def byOrganizationWirelessOpportunisticPcapLicenseNetwork(self, organizationId: str, **kwargs): + """ + **Check the Opportunistic Pcap license status of an organization by network** + https://developer.cisco.com/meraki/api-v1/#!by-organization-wireless-opportunistic-pcap-license-network + + - organizationId (string): Organization ID + - networkIds (array): Optional parameter to filter results by network. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "opportunisticPcap", "license"], + "operation": "byOrganizationWirelessOpportunisticPcapLicenseNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/opportunisticPcap/license/byNetwork" + + query_params = [ + "networkIds", + ] + 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"byOrganizationWirelessOpportunisticPcapLicenseNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessRadioAfcPositionByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List the AFC power limits of an organization by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-afc-position-by-device + + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter device's AFC position by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter device's AFC position by device serial numbers. This filter uses multiple exact matches. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "afc", "position", "byDevice"], + "operation": "getOrganizationWirelessRadioAfcPositionByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/radio/afc/position/byDevice" query_params = [ "perPage", "startingAfter", "endingBefore", - "search", - "sortBy", - "sortOrder", - "deploymentType", + "networkIds", + "serials", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + array_params = [ + "networkIds", + "serials", + ] + 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 + 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"getOrganizationWirelessDevicesProvisioningDeployments: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRadioAfcPositionByDevice: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def createOrganizationWirelessDevicesProvisioningDeployment(self, organizationId: str, items: list, **kwargs): + def getOrganizationWirelessRadioAfcPowerLimitsByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Create a zero touch deployment for a wireless access point** - https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-devices-provisioning-deployment + **List the AFC power limits of an organization by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-afc-power-limits-by-device - organizationId (string): Organization ID - - items (array): List of zero touch deployments to create - - meta (object): Metadata relevant to the paginated dataset + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter device's AFC power limits by network ID. This filter uses multiple exact matches. + - serials (array): Optional parameter to filter device's AFC power limits by device serial numbers. This filter uses multiple exact matches. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], - "operation": "createOrganizationWirelessDevicesProvisioningDeployment", + "tags": ["wireless", "configure", "radio", "afc", "powerLimits", "byDevice"], + "operation": "getOrganizationWirelessRadioAfcPowerLimitsByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments" + resource = f"/organizations/{organizationId}/wireless/radio/afc/powerLimits/byDevice" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + ] + 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"getOrganizationWirelessRadioAfcPowerLimitsByDevice: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationWirelessRadioAutoRfByNetwork(self, organizationId: str, **kwargs): + """ + **List the AutoRF settings of an organization by network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-auto-rf-by-network + + - organizationId (string): Organization ID + - networkIds (array): Optional parameter to filter results by network. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "autoRf", "byNetwork"], + "operation": "getOrganizationWirelessRadioAutoRfByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/radio/autoRf/byNetwork" + + query_params = [ + "networkIds", + ] + 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"getOrganizationWirelessRadioAutoRfByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get(metadata, resource, params) + + def getOrganizationWirelessRadioAutoRfChannelsPlanningActivities(self, organizationId: str, **kwargs): + """ + **List the channel planning activities of an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-auto-rf-channels-planning-activities + + - organizationId (string): Organization ID + - networkIds (array): Optional parameter to filter results by network. + - deviceSerials (array): Optional parameter to filter results by device serial. + - bands (array): Optional parameter to filter results by bands. Valid bands are 2.4, 5, and 6. + - channels (array): Optional parameter to filter results by channels. + - serials (array): Serial number of the devices for which information should be gathered. + - gFloorplanId (string): Geoaligned floorplan ID nodes for which information is gathered belong to. + - tags (array): Optional parameter to filter results by node tags. + - models (array): Optional parameter to filter results by access point models. + - rfProfiles (array): Optional parameter to filter results by RF Profiles. + - minimumRfHealthScore (integer): Minimum RF Health score for an AP to be retrieved. + - maximumRfHealthScore (integer): Maximum RF Health score for an AP to be retrieved. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "radio", "autoRf", "channels", "planning", "activities"], + "operation": "getOrganizationWirelessRadioAutoRfChannelsPlanningActivities", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/radio/autoRf/channels/planning/activities" + + query_params = [ + "networkIds", + "deviceSerials", + "bands", + "channels", + "serials", + "gFloorplanId", + "tags", + "models", + "rfProfiles", + "minimumRfHealthScore", + "maximumRfHealthScore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - body_params = [ - "items", - "meta", + array_params = [ + "networkIds", + "deviceSerials", + "bands", + "channels", + "serials", + "tags", + "models", + "rfProfiles", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + 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 = [] + body_params + 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"createOrganizationWirelessDevicesProvisioningDeployment: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRadioAutoRfChannelsPlanningActivities: ignoring unrecognized kwargs: {invalid}" ) - return self._session.post(metadata, resource, payload) + return self._session.get(metadata, resource, params) - def updateOrganizationWirelessDevicesProvisioningDeployments(self, organizationId: str, items: list, **kwargs): + def recalculateOrganizationWirelessRadioAutoRfChannels(self, organizationId: str, networkIds: list, **kwargs): """ - **Update a zero touch deployment** - https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-devices-provisioning-deployments + **Recalculates automatically assigned channels for every AP within specified the specified network(s)** + https://developer.cisco.com/meraki/api-v1/#!recalculate-organization-wireless-radio-auto-rf-channels - organizationId (string): Organization ID - - items (array): List of zero touch deployments to create - - meta (object): Metadata relevant to the paginated dataset + - networkIds (array): A list of network ids (limit: 15). """ - kwargs.update(locals()) + kwargs = locals() metadata = { - "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], - "operation": "updateOrganizationWirelessDevicesProvisioningDeployments", + "tags": ["wireless", "configure", "radio", "autoRf", "channels"], + "operation": "recalculateOrganizationWirelessRadioAutoRfChannels", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments" + resource = f"/organizations/{organizationId}/wireless/radio/autoRf/channels/recalculate" body_params = [ - "items", - "meta", + "networkIds", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -4211,55 +9928,47 @@ def updateOrganizationWirelessDevicesProvisioningDeployments(self, organizationI 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"updateOrganizationWirelessDevicesProvisioningDeployments: ignoring unrecognized kwargs: {invalid}" + f"recalculateOrganizationWirelessRadioAutoRfChannels: ignoring unrecognized kwargs: {invalid}" ) - return self._session.put(metadata, resource, payload) - - def deleteOrganizationWirelessDevicesProvisioningDeployment(self, organizationId: str, deploymentId: str): - """ - **Delete a zero touch deployment** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-devices-provisioning-deployment - - - organizationId (string): Organization ID - - deploymentId (string): Deployment ID - """ - - metadata = { - "tags": ["wireless", "configure", "devices", "provisioning", "deployments"], - "operation": "deleteOrganizationWirelessDevicesProvisioningDeployment", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - deploymentId = urllib.parse.quote(str(deploymentId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/provisioning/deployments/{deploymentId}" - - return self._session.delete(metadata, resource) + return self._session.post(metadata, resource, payload) - def getOrganizationWirelessDevicesRadsecCertificatesAuthorities(self, organizationId: str, **kwargs): + def getOrganizationWirelessRadioOverridesByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Query for details on the organization's RADSEC device Certificate Authority certificates (CAs)** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-radsec-certificates-authorities + **Return a list of radio overrides** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-overrides-by-device - organizationId (string): Organization ID - - certificateAuthorityIds (array): Optional parameter to filter CAs by one or more CA IDs. All returned CAs will have an ID that is an exact match. + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100. 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. + - networkIds (array): A list of network IDs. The returned radio overrides will be filtered to only include these networks. + - serials (array): A list of serial numbers. The returned radio overrides will be filtered to only include these serials. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities"], - "operation": "getOrganizationWirelessDevicesRadsecCertificatesAuthorities", + "tags": ["wireless", "configure", "radio", "overrides", "byDevice"], + "operation": "getOrganizationWirelessRadioOverridesByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities" + resource = f"/organizations/{organizationId}/wireless/radio/overrides/byDevice" query_params = [ - "certificateAuthorityIds", + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "serials", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "certificateAuthorityIds", + "networkIds", + "serials", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4271,88 +9980,132 @@ def getOrganizationWirelessDevicesRadsecCertificatesAuthorities(self, organizati 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"getOrganizationWirelessDevicesRadsecCertificatesAuthorities: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRadioOverridesByDevice: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get(metadata, resource, params) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def updateOrganizationWirelessDevicesRadsecCertificatesAuthorities(self, organizationId: str, **kwargs): + def byOrganizationWirelessRadioRfHealthNeighborsRssiDevice(self, organizationId: str, **kwargs): """ - **Update an organization's RADSEC device Certificate Authority (CA) state** - https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-devices-radsec-certificates-authorities + **Show the by-device neighbor rssi information for the organization in the given interval** + https://developer.cisco.com/meraki/api-v1/#!by-organization-wireless-radio-rf-health-neighbors-rssi-device - organizationId (string): Organization ID - - status (string): The "status" to update the Certificate Authority to. Only valid option is "trusted". - - certificateAuthorityId (string): The ID of the Certificate Authority to update. + - networkIds (array): Networks for which information should be gathered. + - bands (array): Bands for which information should be gathered. Valid bands are 2.4, 5, and 6. + - channels (array): Channel for which information should be gathered. + - serials (array): Serial number of the devices for which information should be gathered. + - tags (array): Access Point tags for which information should be gathered. + - models (array): Access Point models for which information should be gathered. + - rfProfiles (array): Rf Profiles for which information should be gathered. + - gFloorplanId (string): Geoaligned floorplan ID nodes for which information is gathered belong to. + - minimumNeighborRssi (integer): Minimum Neighbor RSSI score for a neighbor entry to be retrieved. + - maximumNeighborRssi (integer): Maximum Neighbor RSSI score for a neighbor entry to be retrieved. + - minimumRfHealthScore (integer): Minimum RF Health score for an AP to be retrieved. + - maximumRfHealthScore (integer): Maximum RF Health score for an AP to be retrieved. + - rfScoreInterval (integer): Size of the rf score interval in seconds. + - rfScoreRetryOnEmpty (boolean): If true, the query will be retried further back if no data is present in the latest rf score interval. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities"], - "operation": "updateOrganizationWirelessDevicesRadsecCertificatesAuthorities", + "tags": ["wireless", "configure", "radio", "rfHealth", "neighbors", "rssi"], + "operation": "byOrganizationWirelessRadioRfHealthNeighborsRssiDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities" + resource = f"/organizations/{organizationId}/wireless/radio/rfHealth/neighbors/rssi/byDevice" - body_params = [ - "status", - "certificateAuthorityId", + query_params = [ + "networkIds", + "bands", + "channels", + "serials", + "tags", + "models", + "rfProfiles", + "gFloorplanId", + "minimumNeighborRssi", + "maximumNeighborRssi", + "minimumRfHealthScore", + "maximumRfHealthScore", + "rfScoreInterval", + "rfScoreRetryOnEmpty", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "bands", + "channels", + "serials", + "tags", + "models", + "rfProfiles", + ] + 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 = [] + body_params + 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"updateOrganizationWirelessDevicesRadsecCertificatesAuthorities: ignoring unrecognized kwargs: {invalid}" + f"byOrganizationWirelessRadioRfHealthNeighborsRssiDevice: ignoring unrecognized kwargs: {invalid}" ) - return self._session.put(metadata, resource, payload) - - def createOrganizationWirelessDevicesRadsecCertificatesAuthority(self, organizationId: str): - """ - **Create an organization's RADSEC device Certificate Authority (CA)** - https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-devices-radsec-certificates-authority - - - organizationId (string): Organization ID - """ - - metadata = { - "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities"], - "operation": "createOrganizationWirelessDevicesRadsecCertificatesAuthority", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities" - - return self._session.post(metadata, resource) + return self._session.get(metadata, resource, params) - def getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls(self, organizationId: str, **kwargs): + def getOrganizationWirelessRadioRfHealthOverviewByNetworkByInterval(self, organizationId: str, **kwargs): """ - **Query for certificate revocation list (CRL) for the organization's RADSEC device Certificate Authorities (CAs).** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-radsec-certificates-authorities-crls + **Show the by-network RF Health score overview information for the organization in the given interval** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-rf-health-overview-by-network-by-interval - organizationId (string): Organization ID - - certificateAuthorityIds (array): Optional parameter to filter CAs by one or more CA IDs. All returned CAs will have an ID that is an exact match. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 182 days, 14 hours, 54 minutes, and 36 seconds from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 30 days, 10 hours, 29 minutes, and 6 seconds after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 30 days, 10 hours, 29 minutes, and 6 seconds. The default is 14 days. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 7200, 86400. The default is 7200. Interval is calculated if time params are provided. + - networkIds (array): Networks for which information should be gathered. + - bands (array): Bands for which information should be gathered. Valid bands are 2.4, 5, and 6. + - minimumRfHealthScore (integer): Minimum RF Health score for a network to be retrieved. + - maximumRfHealthScore (integer): Maximum RF Health score for a network to be retrieved. + - minimumHighCciPercentage (integer): Minimum percentage of radios with high CCI for a network to be retrieved. + - maximumHighCciPercentage (integer): Maximum percentage of radios with high CCI for a network to be retrieved. + - minimumChannelChanges (integer): Minimum number of channel changes for a network to be retrieved. + - maximumChannelChanges (integer): Maximum number of channel changes for a network to be retrieved. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities", "crls"], - "operation": "getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls", + "tags": ["wireless", "configure", "radio", "rfHealth", "overview", "byNetwork", "byInterval"], + "operation": "getOrganizationWirelessRadioRfHealthOverviewByNetworkByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities/crls" + resource = f"/organizations/{organizationId}/wireless/radio/rfHealth/overview/byNetwork/byInterval" query_params = [ - "certificateAuthorityIds", + "t0", + "t1", + "timespan", + "interval", + "networkIds", + "bands", + "minimumRfHealthScore", + "maximumRfHealthScore", + "minimumHighCciPercentage", + "maximumHighCciPercentage", + "minimumChannelChanges", + "maximumChannelChanges", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "certificateAuthorityIds", + "networkIds", + "bands", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4364,36 +10117,52 @@ def getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls(self, organi 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"getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrls: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRadioRfHealthOverviewByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" ) return self._session.get(metadata, resource, params) - def getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas(self, organizationId: str, **kwargs): + def getOrganizationWirelessRadioRrmByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Query for all delta certificate revocation list (CRL) for the organization's RADSEC device Certificate Authority (CA) with the given id.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-radsec-certificates-authorities-crls-deltas + **List the AutoRF settings of an organization by network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-rrm-by-network - organizationId (string): Organization ID - - certificateAuthorityIds (array): Parameter to filter CAs by one or more CA IDs. All returned CAs will have an ID that is an exact match. + - 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 results by network. + - startingAfter (string): Retrieving items after this network ID + - endingBefore (string): Retrieving items before this network ID + - perPage (integer): Number of items per page + - sortOrder (string): The sort order of items """ kwargs.update(locals()) + if "sortOrder" in kwargs: + options = ["ascending", "descending"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["wireless", "configure", "devices", "radsec", "certificates", "authorities", "crls", "deltas"], - "operation": "getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas", + "tags": ["wireless", "configure", "radio", "rrm", "byNetwork"], + "operation": "getOrganizationWirelessRadioRrmByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/radsec/certificates/authorities/crls/deltas" + resource = f"/organizations/{organizationId}/wireless/radio/rrm/byNetwork" query_params = [ - "certificateAuthorityIds", + "networkIds", + "startingAfter", + "endingBefore", + "perPage", + "sortOrder", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "certificateAuthorityIds", + "networkIds", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4405,47 +10174,31 @@ def getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas(self, 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"getOrganizationWirelessDevicesRadsecCertificatesAuthoritiesCrlsDeltas: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRadioRrmByNetwork: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get(metadata, resource, params) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessDevicesSystemCpuLoadHistory( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def getOrganizationWirelessRadioStatusByNetwork(self, organizationId: str, **kwargs): """ - **Return the CPU Load history for a list of wireless devices in the organization.** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-system-cpu-load-history + **Show the status of this organization's radios, categorized by network and device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-status-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 - - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 1 day from today. - - t1 (string): The end of the timespan for the data. t1 can be a maximum of 1 day after t0. - - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 1 day. The default is 1 day. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 20. Default is 10. - - 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. - - networkIds (array): Optional parameter to filter the result set by the included set of network IDs - - serials (array): Optional parameter to filter device availabilities history by device serial numbers + - networkIds (array): Networks for which radio status should be returned. + - serials (array): Serials for which radio status should be returned. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "system", "cpu", "load", "history"], - "operation": "getOrganizationWirelessDevicesSystemCpuLoadHistory", + "tags": ["wireless", "configure", "radio", "status", "byNetwork"], + "operation": "getOrganizationWirelessRadioStatusByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/system/cpu/load/history" + resource = f"/organizations/{organizationId}/wireless/radio/status/byNetwork" query_params = [ - "t0", - "t1", - "timespan", - "perPage", - "startingAfter", - "endingBefore", "networkIds", "serials", ] @@ -4465,52 +10218,66 @@ def getOrganizationWirelessDevicesSystemCpuLoadHistory( 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"getOrganizationWirelessDevicesSystemCpuLoadHistory: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRadioStatusByNetwork: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationWirelessDevicesWirelessControllersByDevice( + def getOrganizationWirelessRfProfilesAssignmentsByDevice( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ - **List of Catalyst access points information** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-wireless-controllers-by-device + **List the RF profiles of an organization by device** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-rf-profiles-assignments-by-device - 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 access points by network ID. This filter uses multiple exact matches. - - serials (array): Optional parameter to filter access points by its cloud ID. This filter uses multiple exact matches. - - controllerSerials (array): Optional parameter to filter access points by its wireless LAN controller cloud ID. This filter uses multiple exact matches. - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 100. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. + - networkIds (array): Optional parameter to filter devices by network. + - productTypes (array): Optional parameter to filter devices by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. + - name (string): Optional parameter to filter RF profiles by device name. All returned devices will have a name that contains the search term or is an exact match. + - mac (string): Optional parameter to filter RF profiles by device MAC address. All returned devices will have a MAC address that contains the search term or is an exact match. + - serial (string): Optional parameter to filter RF profiles by device serial number. All returned devices will have a serial number that contains the search term or is an exact match. + - model (string): Optional parameter to filter RF profiles by device model. All returned devices will have a model that contains the search term or is an exact match. + - macs (array): Optional parameter to filter RF profiles by one or more device MAC addresses. All returned devices will have a MAC address that is an exact match. + - serials (array): Optional parameter to filter RF profiles by one or more device serial numbers. All returned devices will have a serial number that is an exact match. + - models (array): Optional parameter to filter RF profiles by one or more device models. All returned devices will have a model that is an exact match. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "devices", "wirelessControllers", "byDevice"], - "operation": "getOrganizationWirelessDevicesWirelessControllersByDevice", + "tags": ["wireless", "configure", "rfProfiles", "assignments", "byDevice"], + "operation": "getOrganizationWirelessRfProfilesAssignmentsByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/devices/wirelessControllers/byDevice" + resource = f"/organizations/{organizationId}/wireless/rfProfiles/assignments/byDevice" query_params = [ + "perPage", + "startingAfter", + "endingBefore", "networkIds", + "productTypes", + "name", + "mac", + "serial", + "model", + "macs", "serials", - "controllerSerials", - "perPage", - "startingAfter", - "endingBefore", + "models", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", + "productTypes", + "macs", "serials", - "controllerSerials", + "models", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4522,39 +10289,39 @@ def getOrganizationWirelessDevicesWirelessControllersByDevice( 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"getOrganizationWirelessDevicesWirelessControllersByDevice: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRfProfilesAssignmentsByDevice: 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): + def getOrganizationWirelessRoamingByNetworkByInterval(self, organizationId: str, networkIds: list, **kwargs): """ - **Return scanning API settings** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-location-scanning-by-network + **Get all wireless clients' roam events within the specified timespan grouped by network and time interval.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-roaming-by-network-by-interval - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 250. Default is 50. - - 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. - - networkIds (array): Optional parameter to filter scanning settings by network ID. + - networkIds (array): Filter results by network. + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 14 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 7 days. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 300, 600, 1800, 3600, 7200, 10800, 14400, 18000, 21600, 25200, 28800, 32400, 36000, 39600, 43200, 86400, 604800. The default is 7200. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "location", "scanning", "byNetwork"], - "operation": "getOrganizationWirelessLocationScanningByNetwork", + "tags": ["wireless", "monitor", "roaming", "byNetwork", "byInterval"], + "operation": "getOrganizationWirelessRoamingByNetworkByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/location/scanning/byNetwork" + resource = f"/organizations/{organizationId}/wireless/roaming/byNetwork/byInterval" query_params = [ - "perPage", - "startingAfter", - "endingBefore", "networkIds", + "t0", + "t1", + "timespan", + "interval", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} @@ -4571,44 +10338,49 @@ def getOrganizationWirelessLocationScanningByNetwork(self, organizationId: str, 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"getOrganizationWirelessLocationScanningByNetwork: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessRoamingByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.get(metadata, resource, params) - def getOrganizationWirelessLocationScanningReceivers(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Return scanning API receivers** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-location-scanning-receivers + **List the L2 isolation allow list MAC entry in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-firewall-isolation-allowlist-entries - 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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 250. Default is 50. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. - - networkIds (array): Optional parameter to filter scanning API receivers by network ID. + - networkIds (array): networkIds array to filter out results + - ssids (array): ssids number array to filter out results """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "location", "scanning", "receivers"], - "operation": "getOrganizationWirelessLocationScanningReceivers", + "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], + "operation": "getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers" + resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries" query_params = [ "perPage", "startingAfter", "endingBefore", "networkIds", + "ssids", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", + "ssids", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4620,41 +10392,39 @@ def getOrganizationWirelessLocationScanningReceivers(self, organizationId: str, 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"getOrganizationWirelessLocationScanningReceivers: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def createOrganizationWirelessLocationScanningReceiver( - self, organizationId: str, network: dict, url: str, version: str, radio: dict, sharedSecret: str, **kwargs + def createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry( + self, organizationId: str, client: dict, ssid: dict, network: dict, **kwargs ): """ - **Add new receiver for scanning API** - https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-location-scanning-receiver + **Create isolation allow list MAC entry for this organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-ssids-firewall-isolation-allowlist-entry - organizationId (string): Organization ID - - network (object): Add scanning API receiver for network - - url (string): Receiver Url - - version (string): Scanning API Version - - radio (object): Add scanning API Radio - - sharedSecret (string): Secret Value for Receiver + - client (object): The client of allowlist + - ssid (object): The SSID that allowlist belongs to + - network (object): The Network that allowlist belongs to + - description (string): The description of mac address """ - kwargs = locals() + kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "location", "scanning", "receivers"], - "operation": "createOrganizationWirelessLocationScanningReceiver", + "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], + "operation": "createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers" + resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries" body_params = [ + "description", + "client", + "ssid", "network", - "url", - "version", - "radio", - "sharedSecret", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -4663,37 +10433,54 @@ def createOrganizationWirelessLocationScanningReceiver( 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"createOrganizationWirelessLocationScanningReceiver: ignoring unrecognized kwargs: {invalid}" + f"createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry: ignoring unrecognized kwargs: {invalid}" ) return self._session.post(metadata, resource, payload) - def updateOrganizationWirelessLocationScanningReceiver(self, organizationId: str, receiverId: str, **kwargs): + def deleteOrganizationWirelessSsidsFirewallIsolationAllowlistEntry(self, organizationId: str, entryId: str): """ - **Change scanning API receiver settings** - https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-location-scanning-receiver + **Destroy isolation allow list MAC entry for this organization** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-ssids-firewall-isolation-allowlist-entry - organizationId (string): Organization ID - - receiverId (string): Receiver ID - - url (string): Receiver Url - - version (string): Scanning API Version - - radio (object): Add scanning API Radio + - entryId (string): Entry ID + """ + + metadata = { + "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], + "operation": "deleteOrganizationWirelessSsidsFirewallIsolationAllowlistEntry", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + entryId = urllib.parse.quote(str(entryId), safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries/{entryId}" + + return self._session.delete(metadata, resource) + + def updateOrganizationWirelessSsidsFirewallIsolationAllowlistEntry(self, organizationId: str, entryId: str, **kwargs): + """ + **Update isolation allow list MAC entry info** + https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-ssids-firewall-isolation-allowlist-entry + + - organizationId (string): Organization ID + - entryId (string): Entry ID + - description (string): The description of mac address + - client (object): The client of allowlist """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "location", "scanning", "receivers"], - "operation": "updateOrganizationWirelessLocationScanningReceiver", + "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], + "operation": "updateOrganizationWirelessSsidsFirewallIsolationAllowlistEntry", } organizationId = urllib.parse.quote(str(organizationId), safe="") - receiverId = urllib.parse.quote(str(receiverId), safe="") - resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers/{receiverId}" + entryId = urllib.parse.quote(str(entryId), safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries/{entryId}" body_params = [ - "url", - "version", - "radio", + "description", + "client", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -4702,58 +10489,41 @@ def updateOrganizationWirelessLocationScanningReceiver(self, organizationId: str 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"updateOrganizationWirelessLocationScanningReceiver: ignoring unrecognized kwargs: {invalid}" + f"updateOrganizationWirelessSsidsFirewallIsolationAllowlistEntry: ignoring unrecognized kwargs: {invalid}" ) return self._session.put(metadata, resource, payload) - def deleteOrganizationWirelessLocationScanningReceiver(self, organizationId: str, receiverId: str): - """ - **Delete a scanning API receiver** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-location-scanning-receiver - - - organizationId (string): Organization ID - - receiverId (string): Receiver ID - """ - - metadata = { - "tags": ["wireless", "configure", "location", "scanning", "receivers"], - "operation": "deleteOrganizationWirelessLocationScanningReceiver", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - receiverId = urllib.parse.quote(str(receiverId), safe="") - resource = f"/organizations/{organizationId}/wireless/location/scanning/receivers/{receiverId}" - - return self._session.delete(metadata, resource) - - def getOrganizationWirelessMqttSettings(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationWirelessSsidsOpenRoamingByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Return MQTT Settings for networks** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-mqtt-settings + **Returns an array of objects, each containing SSID OpenRoaming configs for the corresponding network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-open-roaming-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 - - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 250. Default is 50. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. - - networkIds (array): Optional parameter to filter mqtt settings by network ID. + - networkIds (array): Optional parameter to filter OpenRoaming configuration by Network Id. + - includeDisabledSsids (boolean): Optional parameter to include OpenRoaming configuration for disabled ssids. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "mqtt", "settings"], - "operation": "getOrganizationWirelessMqttSettings", + "tags": ["wireless", "configure", "ssids", "openRoaming", "byNetwork"], + "operation": "getOrganizationWirelessSsidsOpenRoamingByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/mqtt/settings" + resource = f"/organizations/{organizationId}/wireless/ssids/openRoaming/byNetwork" query_params = [ "perPage", "startingAfter", "endingBefore", "networkIds", + "includeDisabledSsids", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} @@ -4769,123 +10539,108 @@ def getOrganizationWirelessMqttSettings(self, organizationId: str, total_pages=1 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"getOrganizationWirelessMqttSettings: ignoring unrecognized kwargs: {invalid}") + self._session._logger.warning( + f"getOrganizationWirelessSsidsOpenRoamingByNetwork: ignoring unrecognized kwargs: {invalid}" + ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def updateOrganizationWirelessMqttSettings(self, organizationId: str, network: dict, mqtt: dict, **kwargs): + def getOrganizationWirelessSsidsPoliciesClientExclusionBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Add new broker config for wireless MQTT** - https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-mqtt-settings + **Returns an array of objects, each containing client exclusion enablement statuses for one SSID** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-policies-client-exclusion-by-ssid - organizationId (string): Organization ID - - network (object): Add MQTT Settings for network - - mqtt (object): MQTT Settings for network - - ble (object): MQTT BLE Settings for network - - wifi (object): MQTT Wi-Fi Settings for network + - 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 + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter by Network ID. + - includeDisabledSsids (boolean): Optional parameter to include disabled SSID's. + - ssidNumbers (array): Optional parameter to filter by SSID numbers. """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "mqtt", "settings"], - "operation": "updateOrganizationWirelessMqttSettings", + "tags": ["wireless", "configure", "ssids", "policies", "clientExclusion", "bySsid"], + "operation": "getOrganizationWirelessSsidsPoliciesClientExclusionBySsid", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/mqtt/settings" + resource = f"/organizations/{organizationId}/wireless/ssids/policies/clientExclusion/bySsid" - body_params = [ - "network", - "mqtt", - "ble", - "wifi", + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "includeDisabledSsids", + "ssidNumbers", ] - 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"updateOrganizationWirelessMqttSettings: ignoring unrecognized kwargs: {invalid}" - ) - - return self._session.put(metadata, resource, payload) - - def recalculateOrganizationWirelessRadioAutoRfChannels(self, organizationId: str, networkIds: list, **kwargs): - """ - **Recalculates automatically assigned channels for every AP within specified the specified network(s)** - https://developer.cisco.com/meraki/api-v1/#!recalculate-organization-wireless-radio-auto-rf-channels - - - organizationId (string): Organization ID - - networkIds (array): A list of network ids (limit: 15). - """ - - kwargs = locals() - - metadata = { - "tags": ["wireless", "configure", "radio", "autoRf", "channels"], - "operation": "recalculateOrganizationWirelessRadioAutoRfChannels", - } - organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/radio/autoRf/channels/recalculate" + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} - body_params = [ + array_params = [ "networkIds", + "ssidNumbers", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + 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 = [] + body_params + 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"recalculateOrganizationWirelessRadioAutoRfChannels: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessSsidsPoliciesClientExclusionBySsid: ignoring unrecognized kwargs: {invalid}" ) - return self._session.post(metadata, resource, payload) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessRadioRrmByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): - """ - **List the AutoRF settings of an organization by network** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-radio-rrm-by-network + def getOrganizationWirelessSsidsPoliciesClientExclusionStaticExclusionsBySsid( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns an array of objects, each containing a list of MAC's excluded from a given SSID** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-policies-client-exclusion-static-exclusions-by-ssid - 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 results by network. - - startingAfter (string): Retrieving items after this network ID - - endingBefore (string): Retrieving items before this network ID - - perPage (integer): Number of items per page - - sortOrder (string): The sort order of items + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 100000. Default is 1000. + - 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. + - networkIds (array): Optional parameter to filter Network ID. + - includeDisabledSsids (boolean): Optional parameter to include disabled SSID's. + - ssidNumbers (array): Optional parameter to filter by SSID numbers. """ kwargs.update(locals()) - if "sortOrder" in kwargs: - options = ["ascending", "descending"] - assert kwargs["sortOrder"] in options, ( - f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' - ) - metadata = { - "tags": ["wireless", "configure", "radio", "rrm", "byNetwork"], - "operation": "getOrganizationWirelessRadioRrmByNetwork", + "tags": ["wireless", "configure", "ssids", "policies", "clientExclusion", "static", "exclusions", "bySsid"], + "operation": "getOrganizationWirelessSsidsPoliciesClientExclusionStaticExclusionsBySsid", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/radio/rrm/byNetwork" + resource = f"/organizations/{organizationId}/wireless/ssids/policies/clientExclusion/static/exclusions/bySsid" query_params = [ - "networkIds", + "perPage", "startingAfter", "endingBefore", - "perPage", - "sortOrder", + "networkIds", + "includeDisabledSsids", + "ssidNumbers", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", + "ssidNumbers", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4897,66 +10652,61 @@ def getOrganizationWirelessRadioRrmByNetwork(self, organizationId: str, total_pa 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"getOrganizationWirelessRadioRrmByNetwork: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessSsidsPoliciesClientExclusionStaticExclusionsBySsid: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessRfProfilesAssignmentsByDevice( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def getOrganizationWirelessSsidsProfiles(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the RF profiles of an organization by device** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-rf-profiles-assignments-by-device + **Returns the SSID profiles for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-profiles - 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 + - name (string): (Optional) Filter results by name. Case insensitive substring match. + - sortBy (string): Column to sort results by. Default is `name`. + - sortOrder (string): Direction to sort results by. Default is `asc`. + - profileIds (array): (Optional) Filter results by a list of SSID profile IDs. - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. - - networkIds (array): Optional parameter to filter devices by network. - - productTypes (array): Optional parameter to filter devices by product type. Valid types are wireless, appliance, switch, systemsManager, camera, cellularGateway, sensor, wirelessController, campusGateway, and secureConnect. - - name (string): Optional parameter to filter RF profiles by device name. All returned devices will have a name that contains the search term or is an exact match. - - mac (string): Optional parameter to filter RF profiles by device MAC address. All returned devices will have a MAC address that contains the search term or is an exact match. - - serial (string): Optional parameter to filter RF profiles by device serial number. All returned devices will have a serial number that contains the search term or is an exact match. - - model (string): Optional parameter to filter RF profiles by device model. All returned devices will have a model that contains the search term or is an exact match. - - macs (array): Optional parameter to filter RF profiles by one or more device MAC addresses. All returned devices will have a MAC address that is an exact match. - - serials (array): Optional parameter to filter RF profiles by one or more device serial numbers. All returned devices will have a serial number that is an exact match. - - models (array): Optional parameter to filter RF profiles by one or more device models. All returned devices will have a model that is an exact match. """ kwargs.update(locals()) + if "sortBy" in kwargs: + options = ["name"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["wireless", "configure", "rfProfiles", "assignments", "byDevice"], - "operation": "getOrganizationWirelessRfProfilesAssignmentsByDevice", + "tags": ["wireless", "configure", "ssids", "profiles"], + "operation": "getOrganizationWirelessSsidsProfiles", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/rfProfiles/assignments/byDevice" + resource = f"/organizations/{organizationId}/wireless/ssids/profiles" query_params = [ + "name", + "sortBy", + "sortOrder", + "profileIds", "perPage", "startingAfter", "endingBefore", - "networkIds", - "productTypes", - "name", - "mac", - "serial", - "model", - "macs", - "serials", - "models", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "networkIds", - "productTypes", - "macs", - "serials", - "models", + "profileIds", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -4966,51 +10716,87 @@ def getOrganizationWirelessRfProfilesAssignmentsByDevice( 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"getOrganizationWirelessSsidsProfiles: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def createOrganizationWirelessSsidsProfile(self, organizationId: str, name: str, ssid: dict, **kwargs): + """ + **Create a new SSID profile in an organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-ssids-profile + + - organizationId (string): Organization ID + - name (string): Name of the SSID profile + - ssid (object): SSID configuration for the profile + - precedence (object): Precedence configuration for the SSID profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "ssids", "profiles"], + "operation": "createOrganizationWirelessSsidsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/profiles" + + body_params = [ + "name", + "precedence", + "ssid", + ] + 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"getOrganizationWirelessRfProfilesAssignmentsByDevice: ignoring unrecognized kwargs: {invalid}" + f"createOrganizationWirelessSsidsProfile: ignoring unrecognized kwargs: {invalid}" ) - return self._session.get_pages(metadata, resource, params, total_pages, direction) + return self._session.post(metadata, resource, payload) - def getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries( - self, organizationId: str, total_pages=1, direction="next", **kwargs - ): + def getOrganizationWirelessSsidsProfilesAssignments(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **List the L2 isolation allow list MAC entry in an organization** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-firewall-isolation-allowlist-entries + **List the SSID profile assignments in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-profiles-assignments - 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): The network IDs to include in the result set. + - ssidIds (array): The SSID IDs to include in the result set. + - profileIds (array): The SSID profile IDs to include in the result set. - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. - - networkIds (array): networkIds array to filter out results - - ssids (array): ssids number array to filter out results """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], - "operation": "getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries", + "tags": ["wireless", "configure", "ssids", "profiles", "assignments"], + "operation": "getOrganizationWirelessSsidsProfilesAssignments", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries" + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/assignments" query_params = [ + "networkIds", + "ssidIds", + "profileIds", "perPage", "startingAfter", "endingBefore", - "networkIds", - "ssids", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ "networkIds", - "ssids", + "ssidIds", + "profileIds", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -5022,37 +10808,33 @@ def getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries( 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"getOrganizationWirelessSsidsFirewallIsolationAllowlistEntries: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessSsidsProfilesAssignments: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry( - self, organizationId: str, client: dict, ssid: dict, network: dict, **kwargs - ): + def createOrganizationWirelessSsidsProfilesAssignment(self, organizationId: str, profile: dict, ssid: dict, **kwargs): """ - **Create isolation allow list MAC entry for this organization** - https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-ssids-firewall-isolation-allowlist-entry + **Assigns an SSID profile to an SSID in the organization** + https://developer.cisco.com/meraki/api-v1/#!create-organization-wireless-ssids-profiles-assignment - organizationId (string): Organization ID - - client (object): The client of allowlist - - ssid (object): The SSID that allowlist belongs to - - network (object): The Network that allowlist belongs to - - description (string): The description of mac address + - profile (object): SSID profile to assign + - ssid (object): SSID to assign the SSID profile to + - network (object): Network containing the SSID (required if SSID number is used) """ kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], - "operation": "createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry", + "tags": ["wireless", "configure", "ssids", "profiles", "assignments"], + "operation": "createOrganizationWirelessSsidsProfilesAssignment", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries" + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/assignments" body_params = [ - "description", - "client", + "profile", "ssid", "network", ] @@ -5063,102 +10845,161 @@ def createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry( 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"createOrganizationWirelessSsidsFirewallIsolationAllowlistEntry: ignoring unrecognized kwargs: {invalid}" + f"createOrganizationWirelessSsidsProfilesAssignment: ignoring unrecognized kwargs: {invalid}" ) return self._session.post(metadata, resource, payload) - def deleteOrganizationWirelessSsidsFirewallIsolationAllowlistEntry(self, organizationId: str, entryId: str): + def deleteOrganizationWirelessSsidsProfilesAssignments(self, organizationId: str, ssid: dict, **kwargs): """ - **Destroy isolation allow list MAC entry for this organization** - https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-ssids-firewall-isolation-allowlist-entry + **Unassigns the SSID profile assigned to an SSID** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-ssids-profiles-assignments - organizationId (string): Organization ID - - entryId (string): Entry ID + - ssid (object): SSID to delete the SSID profile assignment of + - network (object): Network containing the SSID (required if SSID number is used) """ + kwargs.update(locals()) + metadata = { - "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], - "operation": "deleteOrganizationWirelessSsidsFirewallIsolationAllowlistEntry", + "tags": ["wireless", "configure", "ssids", "profiles", "assignments"], + "operation": "deleteOrganizationWirelessSsidsProfilesAssignments", } organizationId = urllib.parse.quote(str(organizationId), safe="") - entryId = urllib.parse.quote(str(entryId), safe="") - resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries/{entryId}" + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/assignments" return self._session.delete(metadata, resource) - def updateOrganizationWirelessSsidsFirewallIsolationAllowlistEntry(self, organizationId: str, entryId: str, **kwargs): + def getOrganizationWirelessSsidsProfilesAssignmentsByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): """ - **Update isolation allow list MAC entry info** - https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-ssids-firewall-isolation-allowlist-entry + **List the SSID profile assignments in an organization, grouped by network** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-profiles-assignments-by-network - organizationId (string): Organization ID - - entryId (string): Entry ID - - description (string): The description of mac address - - client (object): The client of allowlist + - 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): The network IDs to include in the result set. + - profileIds (array): The SSID profile IDs to include in the result set. + - networkGroupIds (array): The network group IDs to include in the result set. + - includeAllNetworks (boolean): When set to true, include all networks in the organization, even those without any SSID profile assignments. Defaults to false. + - excludeProfileIds (array): The SSID profile IDs to exclude from the result set. + - sortBy (string): Optional parameter to specify the field used to sort results. (default: network) + - sortOrder (string): Optional parameter to specify the sort order. Default value is asc. + - search (string): Optional parameter to search on network name or network group name. + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. + - 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()) + if "sortBy" in kwargs: + options = ["group", "network"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["wireless", "configure", "ssids", "firewall", "isolation", "allowlist", "entries"], - "operation": "updateOrganizationWirelessSsidsFirewallIsolationAllowlistEntry", + "tags": ["wireless", "configure", "ssids", "profiles", "assignments", "byNetwork"], + "operation": "getOrganizationWirelessSsidsProfilesAssignmentsByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - entryId = urllib.parse.quote(str(entryId), safe="") - resource = f"/organizations/{organizationId}/wireless/ssids/firewall/isolation/allowlist/entries/{entryId}" + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/assignments/byNetwork" - body_params = [ - "description", - "client", + query_params = [ + "networkIds", + "profileIds", + "networkGroupIds", + "includeAllNetworks", + "excludeProfileIds", + "sortBy", + "sortOrder", + "search", + "perPage", + "startingAfter", + "endingBefore", ] - payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "profileIds", + "networkGroupIds", + "excludeProfileIds", + ] + 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 = [] + body_params + 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"updateOrganizationWirelessSsidsFirewallIsolationAllowlistEntry: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessSsidsProfilesAssignmentsByNetwork: ignoring unrecognized kwargs: {invalid}" ) - return self._session.put(metadata, resource, payload) + return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationWirelessSsidsOpenRoamingByNetwork(self, organizationId: str, total_pages=1, direction="next", **kwargs): + def getOrganizationWirelessSsidsProfilesOverviews(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Returns an array of objects, each containing SSID OpenRoaming configs for the corresponding network** - https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-open-roaming-by-network + **Returns the SSID profiles' overview information for an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-ssids-profiles-overviews - 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 + - name (string): (Optional) Filter results by name. Case insensitive substring match. + - sortBy (string): Column to sort results by. Default is `name`. + - sortOrder (string): Direction to sort results by. Default is `asc`. + - profileIds (array): (Optional) Filter results by a list of SSID profile IDs. - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 1000. - 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. - - networkIds (array): Optional parameter to filter OpenRoaming configuration by Network Id. - - includeDisabledSsids (boolean): Optional parameter to include OpenRoaming configuration for disabled ssids. """ kwargs.update(locals()) + if "sortBy" in kwargs: + options = ["name"] + assert kwargs["sortBy"] in options, ( + f'''"sortBy" cannot be "{kwargs["sortBy"]}", & must be set to one of: {options}''' + ) + if "sortOrder" in kwargs: + options = ["asc", "desc"] + assert kwargs["sortOrder"] in options, ( + f'''"sortOrder" cannot be "{kwargs["sortOrder"]}", & must be set to one of: {options}''' + ) + metadata = { - "tags": ["wireless", "configure", "ssids", "openRoaming", "byNetwork"], - "operation": "getOrganizationWirelessSsidsOpenRoamingByNetwork", + "tags": ["wireless", "configure", "ssids", "profiles", "overviews"], + "operation": "getOrganizationWirelessSsidsProfilesOverviews", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/wireless/ssids/openRoaming/byNetwork" + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/overviews" query_params = [ + "name", + "sortBy", + "sortOrder", + "profileIds", "perPage", "startingAfter", "endingBefore", - "networkIds", - "includeDisabledSsids", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} array_params = [ - "networkIds", + "profileIds", ] for k, v in kwargs.items(): if k.strip() in array_params: @@ -5170,11 +11011,67 @@ def getOrganizationWirelessSsidsOpenRoamingByNetwork(self, organizationId: str, 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"getOrganizationWirelessSsidsOpenRoamingByNetwork: ignoring unrecognized kwargs: {invalid}" + f"getOrganizationWirelessSsidsProfilesOverviews: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) + def updateOrganizationWirelessSsidsProfile(self, organizationId: str, id: str, **kwargs): + """ + **Update this SSID profile** + https://developer.cisco.com/meraki/api-v1/#!update-organization-wireless-ssids-profile + + - organizationId (string): Organization ID + - id (string): ID + - name (string): Name of the SSID profile + - ssid (object): SSID configuration for the profile + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wireless", "configure", "ssids", "profiles"], + "operation": "updateOrganizationWirelessSsidsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/{id}" + + body_params = [ + "name", + "ssid", + ] + 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"updateOrganizationWirelessSsidsProfile: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteOrganizationWirelessSsidsProfile(self, organizationId: str, id: str): + """ + **Delete an SSID profile** + https://developer.cisco.com/meraki/api-v1/#!delete-organization-wireless-ssids-profile + + - organizationId (string): Organization ID + - id (string): ID + """ + + metadata = { + "tags": ["wireless", "configure", "ssids", "profiles"], + "operation": "deleteOrganizationWirelessSsidsProfile", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + id = urllib.parse.quote(str(id), safe="") + resource = f"/organizations/{organizationId}/wireless/ssids/profiles/{id}" + + return self._session.delete(metadata, resource) + def getOrganizationWirelessSsidsStatusesByDevice(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **List status information of all BSSIDs in your organization** diff --git a/meraki/api/wirelessController.py b/meraki/api/wirelessController.py index 23510e4..3ba7fa1 100644 --- a/meraki/api/wirelessController.py +++ b/meraki/api/wirelessController.py @@ -177,6 +177,59 @@ def getOrganizationWirelessControllerConnections(self, organizationId: str, tota return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessControllerConnectionsUnassigned( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List of unassigned Catalyst access points and summary information** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-controller-connections-unassigned + + - 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 + - controllerSerials (array): Optional parameter to filter access points by wireless LAN controller cloud ID. This filter uses multiple exact matches. + - supported (boolean): Optional parameter to filter access points based on if they are supported for dashboard monitoring. Values can be true/false, if not provided then all unassigned APs will be returned + - 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. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wirelessController", "configure", "connections", "unassigned"], + "operation": "getOrganizationWirelessControllerConnectionsUnassigned", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wirelessController/connections/unassigned" + + query_params = [ + "controllerSerials", + "supported", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "controllerSerials", + ] + 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"getOrganizationWirelessControllerConnectionsUnassigned: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessControllerDevicesInterfacesL2ByDevice( self, organizationId: str, total_pages=1, direction="next", **kwargs ): @@ -861,3 +914,36 @@ def getOrganizationWirelessControllerOverviewByDevice( ) return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def generateOrganizationWirelessControllerRegulatoryDomainPackage(self, organizationId: str, **kwargs): + """ + **Generate the regulatory domain package** + https://developer.cisco.com/meraki/api-v1/#!generate-organization-wireless-controller-regulatory-domain-package + + - organizationId (string): Organization ID + - networkIds (array): A list of network IDs to filter by + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["wirelessController", "configure", "regulatoryDomain", "package"], + "operation": "generateOrganizationWirelessControllerRegulatoryDomainPackage", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wirelessController/regulatoryDomain/package/generate" + + body_params = [ + "networkIds", + ] + 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"generateOrganizationWirelessControllerRegulatoryDomainPackage: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) diff --git a/pyproject.toml b/pyproject.toml index e42fbec..97cfbbf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "meraki" -version = "4.1.0b2" +version = "4.1.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 147e569..dff971b 100644 --- a/uv.lock +++ b/uv.lock @@ -302,7 +302,7 @@ wheels = [ [[package]] name = "meraki" -version = "4.1.0b2" +version = "4.1.0b3" source = { editable = "." } dependencies = [ { name = "httpx" },