diff --git a/docs/generation-report.md b/docs/generation-report.md index a45ea1f..e6a0240 100644 --- a/docs/generation-report.md +++ b/docs/generation-report.md @@ -1,5 +1,11 @@ # Generation Report +## 2026-10-28 | Library v4.6.1b2 | API 1.75.1-beta.2 + + +No Python keyword parameter conflicts detected. + + ## 2026-10-21 | Library v4.6.1b1 | API 1.75.1-beta.1 diff --git a/meraki/__init__.py b/meraki/__init__.py index 7ff9eff..9b74397 100644 --- a/meraki/__init__.py +++ b/meraki/__init__.py @@ -57,7 +57,7 @@ from meraki.exceptions import APIError, APIKeyError, APIResponseError, AsyncAPIError from meraki.rest_session import RestSession -__api_version__ = "1.75.1-beta.1" +__api_version__ = "1.75.1-beta.2" __all__ = [ "APIError", diff --git a/meraki/_version.py b/meraki/_version.py index f1ef9fa..213654e 100644 --- a/meraki/_version.py +++ b/meraki/_version.py @@ -1 +1 @@ -__version__ = "4.6.1b1" +__version__ = "4.6.1b2" diff --git a/meraki/aio/api/appliance.py b/meraki/aio/api/appliance.py index baebba1..7cb3a28 100644 --- a/meraki/aio/api/appliance.py +++ b/meraki/aio/api/appliance.py @@ -3447,6 +3447,8 @@ def updateNetworkApplianceVpnSiteToSiteVpn(self, networkId: str, mode: str, **kw - networkId (string): Network ID - mode (string): The site-to-site VPN mode. Can be one of 'none', 'spoke' or 'hub' + - changesConfirmed (boolean): Whether to accept the confirmation warnings for these changes. Defaults to false. + - natTraversal (object): NAT traversal settings. Omit to leave the existing setting unchanged. - 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. @@ -3469,7 +3471,9 @@ def updateNetworkApplianceVpnSiteToSiteVpn(self, networkId: str, mode: str, **kw resource = f"/networks/{networkId}/appliance/vpn/siteToSiteVpn" body_params = [ + "changesConfirmed", "mode", + "natTraversal", "hubs", "subnets", "peerSgtCapable", @@ -6573,7 +6577,7 @@ def getOrganizationApplianceVpnStatuses(self, organizationId: str, total_pages=1 def getOrganizationApplianceVpnThirdPartyVPNPeers(self, organizationId: str): """ - **Return the third party VPN peers for an organization** + **Return the configured third-party VPN peers for an organization.** https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-third-party-v-p-n-peers - organizationId (string): Organization ID diff --git a/meraki/aio/api/campusGateway.py b/meraki/aio/api/campusGateway.py index 2c95e66..56179dd 100644 --- a/meraki/aio/api/campusGateway.py +++ b/meraki/aio/api/campusGateway.py @@ -115,6 +115,97 @@ def deleteNetworkCampusGatewayCluster(self, networkId: str, clusterId: str): return self._session.delete(metadata, resource) + def createNetworkCampusGatewayMdnsServicesCustom(self, networkId: str, name: str, types: list, **kwargs): + """ + **Create a network-scoped custom mDNS service definition.** + https://developer.cisco.com/meraki/api-v1/#!create-network-campus-gateway-mdns-services-custom + + - networkId (string): Network ID + - name (string): Display name of the custom mDNS service. + - types (array): DNS-SD service types. Accepted shorthand is normalized by the API. + """ + + kwargs = locals() + + metadata = { + "tags": ["campusGateway", "configure", "mdns", "services", "custom"], + "operation": "createNetworkCampusGatewayMdnsServicesCustom", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/campusGateway/mdns/services/custom" + + body_params = [ + "name", + "types", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"createNetworkCampusGatewayMdnsServicesCustom: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateNetworkCampusGatewayMdnsServicesCustom(self, networkId: str, key: str, **kwargs): + """ + **Update a network-scoped custom mDNS service definition.** + https://developer.cisco.com/meraki/api-v1/#!update-network-campus-gateway-mdns-services-custom + + - networkId (string): Network ID + - key (string): Key + - name (string): Updated display name of the custom mDNS service. + - types (array): Replacement ordered list of DNS-SD service types. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["campusGateway", "configure", "mdns", "services", "custom"], + "operation": "updateNetworkCampusGatewayMdnsServicesCustom", + } + networkId = urllib.parse.quote(str(networkId), safe="") + key = urllib.parse.quote(str(key), safe="") + resource = f"/networks/{networkId}/campusGateway/mdns/services/custom/{key}" + + body_params = [ + "name", + "types", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"updateNetworkCampusGatewayMdnsServicesCustom: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteNetworkCampusGatewayMdnsServicesCustom(self, networkId: str, key: str): + """ + **Delete a network-scoped custom mDNS service definition.** + https://developer.cisco.com/meraki/api-v1/#!delete-network-campus-gateway-mdns-services-custom + + - networkId (string): Network ID + - key (string): Key + """ + + metadata = { + "tags": ["campusGateway", "configure", "mdns", "services", "custom"], + "operation": "deleteNetworkCampusGatewayMdnsServicesCustom", + } + networkId = urllib.parse.quote(str(networkId), safe="") + key = urllib.parse.quote(str(key), safe="") + resource = f"/networks/{networkId}/campusGateway/mdns/services/custom/{key}" + + return self._session.delete(metadata, resource) + def getNetworkCampusGatewaySsidMdns(self, networkId: str, number: str): """ **List the currently configured mDNS settings for the SSID** diff --git a/meraki/aio/api/devices.py b/meraki/aio/api/devices.py index d37d0b7..8af5385 100644 --- a/meraki/aio/api/devices.py +++ b/meraki/aio/api/devices.py @@ -1120,7 +1120,7 @@ def createDeviceLiveToolsRoutingTable(self, serial: str, **kwargs): https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-routing-table - serial (string): Serial - - destination (object): Optional destination filter used to return routes containing the supplied destination. + - destination (object): Optional destination filter used to return routes with an exact destination prefix match. - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret """ diff --git a/meraki/aio/api/organizations.py b/meraki/aio/api/organizations.py index a351295..ec315ec 100644 --- a/meraki/aio/api/organizations.py +++ b/meraki/aio/api/organizations.py @@ -180,17 +180,28 @@ def createOrganizationActionBatch(self, organizationId: str, actions: list, **kw return self._session.post(metadata, resource, payload) - def getOrganizationActionBatches(self, organizationId: str, **kwargs): + def getOrganizationActionBatches(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Return the list of action batches in the organization** https://developer.cisco.com/meraki/api-v1/#!get-organization-action-batches - organizationId (string): Organization ID + - total_pages (integer or string): use with perPage to get 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'ascending'. - status (string): Filter batches by status. Valid types are pending, completed, and failed. """ 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 "status" in kwargs: options = ["completed", "failed", "pending"] assert kwargs["status"] in options, ( @@ -205,6 +216,10 @@ def getOrganizationActionBatches(self, organizationId: str, **kwargs): resource = f"/organizations/{organizationId}/actionBatches" query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", "status", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} @@ -215,7 +230,7 @@ def getOrganizationActionBatches(self, organizationId: str, **kwargs): if invalid and self._session._logger: self._session._logger.warning(f"getOrganizationActionBatches: ignoring unrecognized kwargs: {invalid}") - return self._session.get(metadata, resource, params) + return self._session.get_pages(metadata, resource, params, total_pages, direction) def getOrganizationActionBatch(self, organizationId: str, actionBatchId: str): """ @@ -8991,6 +9006,118 @@ def enableOrganizationIntegrationsXdrNetworks(self, organizationId: str, network return self._session.post(metadata, resource, payload) + def createOrganizationInventoryBulkClaim(self, organizationId: str, claimKey: str, **kwargs): + """ + **Create one durable claim job for the order identified by a single claimKey** + https://developer.cisco.com/meraki/api-v1/#!create-organization-inventory-bulk-claim + + - organizationId (string): Organization ID + - claimKey (string): Opaque order claim key. Whitespace is ignored and letters are normalized to uppercase before lookup. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "inventory", "bulkClaims"], + "operation": "createOrganizationInventoryBulkClaim", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/inventory/bulkClaims" + + body_params = [ + "claimKey", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning(f"createOrganizationInventoryBulkClaim: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationInventoryBulkClaims(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List bulk-claim jobs for the organization, optionally filtered by lifecycle status** + https://developer.cisco.com/meraki/api-v1/#!get-organization-inventory-bulk-claims + + - organizationId (string): Organization ID + - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages + - direction (string): direction to paginate, either "next" (default) or "prev" page + - statuses (array): Filter by one or more public lifecycle statuses. + - sortBy (string): Sort by status priority. Descending (the default) puts failed, partialSuccess, active jobs (running, validating, queued), then succeeded first. Ascending reverses these groups. Jobs in the same group sort by ID in the same direction. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'descending'. + """ + + 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}''' + ) + 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", "inventory", "bulkClaims"], + "operation": "getOrganizationInventoryBulkClaims", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/inventory/bulkClaims" + + query_params = [ + "statuses", + "sortBy", + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "statuses", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) + + if self._session._validate_kwargs: + all_params = query_params + array_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning(f"getOrganizationInventoryBulkClaims: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationInventoryBulkClaim(self, bulkClaimId: str, organizationId: str): + """ + **Read the durable lifecycle status, progress counts, and failures for a bulk-claim job** + https://developer.cisco.com/meraki/api-v1/#!get-organization-inventory-bulk-claim + + - bulkClaimId (string): The bulk-claim id + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "inventory", "bulkClaims"], + "operation": "getOrganizationInventoryBulkClaim", + } + bulkClaimId = urllib.parse.quote(str(bulkClaimId), safe="") + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/inventory/bulkClaims/{bulkClaimId}" + + return self._session.get(metadata, resource) + def claimIntoOrganizationInventory(self, organizationId: str, **kwargs): """ **Claim a list of devices, licenses, and/or orders into an organization inventory** @@ -9681,7 +9808,7 @@ def updateOrganizationLoginSecurity(self, organizationId: str, **kwargs): def getMcfOrganization(self, organizationId: str): """ - **Returns the MCN organization record associated with the Meraki Dashboard organization identified by `organizationId`** + **Returns the Multicloud Fabric organization record associated with the Meraki Dashboard organization identified by `organizationId`** https://developer.cisco.com/meraki/api-v1/#!get-mcf-organization - organizationId (string): Organization ID @@ -9705,7 +9832,7 @@ def getAccounts(self, organizationId: str, total_pages=1, direction="next", **kw - organizationId (string): Organization ID - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages - direction (string): direction to paginate, either "next" (default) or "prev" page - - integrationId (string): Multi-Cloud Networking (MCN)-assigned UUID of the integration whose discovered accounts are returned. If omitted, accounts from all integrations in the organization are returned. + - integrationId (string): Multicloud Fabric-assigned UUID of the integration whose discovered accounts are returned. If omitted, accounts from all integrations in the organization are returned. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. - endingBefore (string): Backward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -9757,7 +9884,7 @@ def getAccount(self, organizationId: str, accountId: str): def listAutovpnConnectors(self, organizationId: str): """ - **Lists the organization's MCN AutoVPN connectors.** + **Lists the organization's MCF AutoVPN connectors.** https://developer.cisco.com/meraki/api-v1/#!list-autovpn-connectors - organizationId (string): Organization ID @@ -9774,7 +9901,7 @@ def listAutovpnConnectors(self, organizationId: str): def syncAutovpnConnectors(self, organizationId: str): """ - **Starts asynchronous reconciliation of MCN AutoVPN connectors and available regions.** + **Starts asynchronous reconciliation of MCF AutoVPN connectors and available regions.** https://developer.cisco.com/meraki/api-v1/#!sync-autovpn-connectors - organizationId (string): Organization ID @@ -9873,7 +10000,7 @@ def onboardAutovpnSites(self, organizationId: str, **kwargs): def offboardAutovpnSpoke(self, organizationId: str, networkId: str): """ - **Detaches a Meraki AutoVPN spoke from its MCN regions.** + **Detaches a Meraki AutoVPN spoke from its MCF regions.** https://developer.cisco.com/meraki/api-v1/#!offboard-autovpn-spoke - organizationId (string): Organization ID @@ -9911,12 +10038,12 @@ def getAutovpnSpokeHubBudget(self, organizationId: str, networkId: str): def replaceAutovpnSpokeRegions(self, organizationId: str, networkId: str, regionIds: list, **kwargs): """ - **Replaces the complete desired MCN region set for a Meraki AutoVPN spoke.** + **Replaces the complete desired MCF region set for a Meraki AutoVPN spoke.** https://developer.cisco.com/meraki/api-v1/#!replace-autovpn-spoke-regions - organizationId (string): Organization ID - networkId (string): Network ID - - regionIds (array): Complete desired set of MCN region identifiers. + - regionIds (array): Complete desired set of MCF region identifiers. """ kwargs = locals() @@ -9978,9 +10105,9 @@ def getBgpSessionStatus(self, organizationId: str, **kwargs): `window / resolution + 1` samples, up to 4,096. For resolutions greater than 12 minutes, `window + resolution` cannot exceed 34 days, 3 hours, and 12 minutes. - - vpcId (string): MCN-assigned UUID of one AWS, Azure, or GCP VPC to return. Mutually + - vpcId (string): Multicloud Fabric-assigned UUID of one AWS, Azure, or GCP VPC to return. Mutually exclusive with `siteId` and deprecated `networkId`. - - siteId (string): MCN-assigned UUID of one Meraki Site to return. Mutually exclusive + - siteId (string): Multicloud Fabric-assigned UUID of one Meraki Site to return. Mutually exclusive with `vpcId` and deprecated `networkId`. """ @@ -10013,7 +10140,7 @@ def getBgpSessionStatus(self, organizationId: str, **kwargs): def getOrganizationConfig(self, organizationId: str): """ - **Returns the Multi-Cloud Networking (MCN) configuration for the Meraki Dashboard organization identified by `organizationId`, including Site-to-Cloud state and provider-specific integration setup information.** + **Returns available configuration and terms for a valid Meraki Dashboard organization ID, including before its associated Multicloud Fabric organization exists** https://developer.cisco.com/meraki/api-v1/#!get-organization-config - organizationId (string): Organization ID @@ -10092,16 +10219,16 @@ def listEventLogs(self, organizationId: str, total_pages=1, direction="next", ** headlines. Repeat the parameter to OR headlines. The headline is not a closed vocabulary, and an empty value matches no rows exposed through event facets. - - integrationId (array): Restricts results to exact MCN cloud-integration UUIDs; repeat to OR values. - - accountId (array): Restricts results to exact MCN cloud-account UUIDs; repeat to OR values. - - vpcId (array): Restricts results to exact MCN VPC UUIDs; repeat to OR values. When VPC + - integrationId (array): Restricts results to exact Multicloud Fabric cloud-integration UUIDs; repeat to OR values. + - accountId (array): Restricts results to exact Multicloud Fabric cloud-account UUIDs; repeat to OR values. + - vpcId (array): Restricts results to exact Multicloud Fabric VPC UUIDs; repeat to OR values. When VPC IDs are supplied without Site or deprecated Network IDs, only AWS, Azure, and GCP network events match. - - siteId (array): Restricts results to exact MCN Site UUIDs; repeat to OR values. When Site + - siteId (array): Restricts results to exact Multicloud Fabric Site UUIDs; repeat to OR values. When Site IDs are supplied without VPC or deprecated Network IDs, only Meraki network events match. - - subnetId (array): Restricts results to exact MCN subnet UUIDs; repeat to OR values. - - regionId (array): Restricts results to exact MCN region UUIDs; repeat to OR values. + - subnetId (array): Restricts results to exact Multicloud Fabric subnet UUIDs; repeat to OR values. + - regionId (array): Restricts results to exact Multicloud Fabric region UUIDs; repeat to OR values. - regionName (array): Restricts results to exact, case-sensitive provider region names; repeat to OR values. - userId (array): Restricts results to exact opaque identity-provider subject IDs; repeat to OR values. @@ -10243,16 +10370,16 @@ def getEventLogFacets(self, organizationId: str, **kwargs): headlines. Repeat the parameter to OR headlines. The headline is not a closed vocabulary, and an empty value matches no rows exposed through event facets. - - integrationId (array): Restricts results to exact MCN cloud-integration UUIDs; repeat to OR values. - - accountId (array): Restricts results to exact MCN cloud-account UUIDs; repeat to OR values. - - vpcId (array): Restricts results to exact MCN VPC UUIDs; repeat to OR values. When VPC + - integrationId (array): Restricts results to exact Multicloud Fabric cloud-integration UUIDs; repeat to OR values. + - accountId (array): Restricts results to exact Multicloud Fabric cloud-account UUIDs; repeat to OR values. + - vpcId (array): Restricts results to exact Multicloud Fabric VPC UUIDs; repeat to OR values. When VPC IDs are supplied without Site or deprecated Network IDs, only AWS, Azure, and GCP network events match. - - siteId (array): Restricts results to exact MCN Site UUIDs; repeat to OR values. When Site + - siteId (array): Restricts results to exact Multicloud Fabric Site UUIDs; repeat to OR values. When Site IDs are supplied without VPC or deprecated Network IDs, only Meraki network events match. - - subnetId (array): Restricts results to exact MCN subnet UUIDs; repeat to OR values. - - regionId (array): Restricts results to exact MCN region UUIDs; repeat to OR values. + - subnetId (array): Restricts results to exact Multicloud Fabric subnet UUIDs; repeat to OR values. + - regionId (array): Restricts results to exact Multicloud Fabric region UUIDs; repeat to OR values. - regionName (array): Restricts results to exact, case-sensitive provider region names; repeat to OR values. - userId (array): Restricts results to exact opaque identity-provider subject IDs; repeat to OR values. @@ -10389,16 +10516,16 @@ def getEventLogHistogram(self, organizationId: str, **kwargs): headlines. Repeat the parameter to OR headlines. The headline is not a closed vocabulary, and an empty value matches no rows exposed through event facets. - - integrationId (array): Restricts results to exact MCN cloud-integration UUIDs; repeat to OR values. - - accountId (array): Restricts results to exact MCN cloud-account UUIDs; repeat to OR values. - - vpcId (array): Restricts results to exact MCN VPC UUIDs; repeat to OR values. When VPC + - integrationId (array): Restricts results to exact Multicloud Fabric cloud-integration UUIDs; repeat to OR values. + - accountId (array): Restricts results to exact Multicloud Fabric cloud-account UUIDs; repeat to OR values. + - vpcId (array): Restricts results to exact Multicloud Fabric VPC UUIDs; repeat to OR values. When VPC IDs are supplied without Site or deprecated Network IDs, only AWS, Azure, and GCP network events match. - - siteId (array): Restricts results to exact MCN Site UUIDs; repeat to OR values. When Site + - siteId (array): Restricts results to exact Multicloud Fabric Site UUIDs; repeat to OR values. When Site IDs are supplied without VPC or deprecated Network IDs, only Meraki network events match. - - subnetId (array): Restricts results to exact MCN subnet UUIDs; repeat to OR values. - - regionId (array): Restricts results to exact MCN region UUIDs; repeat to OR values. + - subnetId (array): Restricts results to exact Multicloud Fabric subnet UUIDs; repeat to OR values. + - regionId (array): Restricts results to exact Multicloud Fabric region UUIDs; repeat to OR values. - regionName (array): Restricts results to exact, case-sensitive provider region names; repeat to OR values. - userId (array): Restricts results to exact opaque identity-provider subject IDs; repeat to OR values. @@ -10476,7 +10603,7 @@ def getEventLogHistogram(self, organizationId: str, **kwargs): def getIntegrations(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Returns cloud integrations for the specified Meraki Dashboard organization. `provider` restricts the response to AWS, Microsoft Azure, or Google Cloud integrations; an unfiltered response can also include the MCN-managed Meraki integration used for Site discovery** + **Returns cloud integrations for the specified Meraki Dashboard organization. `provider` restricts the response to AWS, Microsoft Azure, or Google Cloud integrations; an unfiltered response can also include the Multicloud Fabric-managed Meraki integration used for Site discovery** https://developer.cisco.com/meraki/api-v1/#!get-integrations - organizationId (string): Organization ID @@ -10489,7 +10616,7 @@ def getIntegrations(self, organizationId: str, total_pages=1, direction="next", - `gcp` — Google Cloud integrations. If omitted, integrations from all providers are returned, including - the MCN-managed `meraki` integration when Site discovery is enabled. + the Multicloud Fabric-managed `meraki` integration when Site discovery is enabled. `meraki` is not accepted as a filter value. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -10533,14 +10660,17 @@ def createIntegration(self, organizationId: str, provider: str, accessRights: li - `azure` — Microsoft Azure; requires `azure` service-principal credentials. - `gcp` — Google Cloud; requires `gcp` service-account credentials. - Public creation does not accept `meraki`; MCN manages that integration + Public creation does not accept `meraki`; Multicloud Fabric manages that integration for Site discovery. Credential objects for providers other than the selected value are ignored. - - accessRights (array): One or more requested provider capability bundles for the integration. MCN validates and stores these values, but they are not operation-time authorization switches. + - accessRights (array): One or more requested provider capability bundles for the integration. Multicloud Fabric validates and stores these values, but they are not operation-time authorization switches. - `discover` — Requests permissions used to inventory accounts or projects, networks, subnets, routing, and related metadata. - `create_onboarding_resources` — Requests permissions used to create supported provider-side gateway and VPN resources during onboarding. - `update_vpc` — Requests permissions associated with modifying supported cloud-network resources. + - acknowledgedAccountIds (array): Provider-native IDs presented when the customer acknowledged account scope: Azure subscription IDs for `azure`, or Google Cloud project IDs for `gcp`. When supplied, creation requires the current accessible account ID set to equal this set. Comparison ignores leading and trailing whitespace in both sets and ignores letter case for Azure subscription IDs. Google Cloud project IDs remain case-sensitive. IDs are deduplicated after these comparison rules are applied. Order and display-name changes do not affect comparison. A difference returns `409` with the current scope for review and renewed acknowledgement. The returned scope preserves the IDs from the preview. + + Omission or `null` preserves creation without an acknowledged-scope check. An empty array acknowledges a scope with no accessible accounts and still requires a fresh comparison. IDs must contain a non-whitespace character. This field is ignored for `aws`. - aws (object): AWS assumed-role details. Required when `provider` is `aws`; otherwise this object is not used. - gcp (object): Google Cloud service-account credentials and optional parent scope. Required when `provider` is `gcp`; otherwise this object is not used. - azure (object): Microsoft Azure service-principal credentials. Required when `provider` is `azure`; otherwise this object is not used. @@ -10556,6 +10686,7 @@ def createIntegration(self, organizationId: str, provider: str, accessRights: li resource = f"/organizations/{organizationId}/mcf/integrations" body_params = [ + "acknowledgedAccountIds", "provider", "accessRights", "aws", @@ -10784,25 +10915,26 @@ def discoverIntegration(self, organizationId: str, integrationId: str): def listRegions(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Returns cloud-provider region records correlated with MCN vPOP capacity** + **Returns cloud-provider regions with eligible Multicloud Fabric capacity** https://developer.cisco.com/meraki/api-v1/#!list-regions - organizationId (string): Organization ID - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages - direction (string): direction to paginate, either "next" (default) or "prev" page - - provider (string): Filters by the cloud-provider namespace of the region and its MCN vPOP capacity. Known returned values are: + - provider (string): Filters by the cloud-provider namespace of the region and its Multicloud Fabric capacity. Known returned values are: - `aws` — Amazon Web Services region capacity. - `azure` — Microsoft Azure region capacity. - `gcp` — Google Cloud region capacity. If omitted, all provider namespaces are returned. Matching is exact; an unrecognized value returns no matches rather than selecting a connected integration provider. - - type (string): Filters regions by eligible MCN connection capacity. + - type (string): Filters regions by eligible Multicloud Fabric connection capacity. - - `autovpn` — The region has an eligible AutoVPN vPOP address. - - `ipsec` — The region has an eligible IPsec vPOP address. + - `autovpn` — The region has eligible AutoVPN capacity. + - `ipsec` — The region has eligible IPsec capacity. This value selects a connection type and does not identify the cloud-integration provider. If omitted, regions are not restricted by connection type. + - supported (boolean): When `true`, returns only cloud-provider regions supported by Multicloud Fabric. When `false` or omitted, regions are not filtered by Multicloud Fabric support. - active (boolean): When `true`, returns only regions associated with at least one successfully onboarded VPC for the organization; when `false` or omitted, it adds no filter. This condition is evaluated independently of the `type` filter. If supplied, this parameter takes precedence over the deprecated `hasOnboardedVpcs` and `hasOnboardedNetworks` aliases, including when its value is `false`. If omitted, the aliases remain available for compatibility. - hasOnboardedNetworks (boolean): Deprecated: Use `active`. When `true`, returns only regions associated with at least one successfully onboarded VPC for the organization; when `false`, it adds no filter. This alias is applied only when both `active` and `hasOnboardedVpcs` are omitted. - hasOnboardedVpcs (boolean): Deprecated: Use `active`. When `true`, returns only regions associated with at least one successfully onboarded VPC for the organization; when `false` or omitted, it adds no filter. This condition is evaluated independently of the `type` filter. This alias is applied only when `active` is omitted and takes precedence over `hasOnboardedNetworks`, including when its value is `false`. @@ -10827,6 +10959,7 @@ def listRegions(self, organizationId: str, total_pages=1, direction="next", **kw query_params = [ "provider", "type", + "supported", "active", "hasOnboardedNetworks", "hasOnboardedVpcs", @@ -10872,7 +11005,7 @@ def listRemovedResources(self, organizationId: str, total_pages=1, direction="ne - `teardown_in_progress` — Confirmation was accepted and cleanup is running. - `teardown_failed` — Cleanup or finalization failed. - `removed` — Removal was finalized. - - integrationId (string): MCN-assigned UUID of the cloud integration whose resources are returned. + - integrationId (string): Multicloud Fabric-assigned UUID of the cloud integration whose resources are returned. - provider (string): Restricts results by provider attribution. - `aws` — Amazon Web Services resources. @@ -10882,7 +11015,7 @@ def listRemovedResources(self, organizationId: str, total_pages=1, direction="ne Matching is exact. Any other value is used as a provider name and returns no matches unless records carry that value. - - accountId (string): MCN-assigned cloud-account UUID. Returns the account and matching + - accountId (string): Multicloud Fabric-assigned cloud-account UUID. Returns the account and matching descendant networks and subnets, subject to other filters. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -10940,7 +11073,7 @@ def confirmRemovedResourcesBulk(self, organizationId: str, **kwargs): https://developer.cisco.com/meraki/api-v1/#!confirm-removed-resources-bulk - organizationId (string): Organization ID - - resourceIds (object): Explicit MCN UUIDs keyed by `account`, `network`, or `subnet`. Duplicate + - resourceIds (object): Explicit Multicloud Fabric UUIDs keyed by `account`, `network`, or `subnet`. Duplicate type/UUID pairs are processed once. The request can contain at most 100 IDs across all keys. After duplicates are removed, request-size validation also counts the missing child networks of selected accounts; child @@ -11021,15 +11154,15 @@ def confirmRemovedResource(self, organizationId: str, resourceType: str, resourc def listSites(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Returns Meraki and Manual IPsec records represented as MCN Sites for site-to-cloud connectivity in the specified organization** + **Returns Meraki and Manual IPsec records represented as Multicloud Fabric Sites for site-to-cloud connectivity in the specified organization** https://developer.cisco.com/meraki/api-v1/#!list-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 - onboarded (boolean): When `true`, return only Sites currently marked as onboarded. When `false`, return only Sites not currently marked as onboarded, including a Manual IPsec Site whose lifecycle record does not yet exist. Omit to include both. - - accountId (string): MCN-assigned UUID of the MCN-managed Meraki account whose Sites are returned. Because Manual IPsec Sites are accountless, supplying this filter excludes them. - - integrationId (string): MCN-assigned UUID of the MCN-managed Meraki integration whose Sites are returned. Because Manual IPsec Sites have no integration, supplying this filter excludes them. + - accountId (string): Multicloud Fabric-assigned UUID of the Multicloud Fabric-managed Meraki account whose Sites are returned. Because Manual IPsec Sites are accountless, supplying this filter excludes them. + - integrationId (string): Multicloud Fabric-assigned UUID of the Multicloud Fabric-managed Meraki integration whose Sites are returned. Because Manual IPsec Sites have no integration, supplying this filter excludes them. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. - endingBefore (string): Backward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -11064,13 +11197,14 @@ def listSites(self, organizationId: str, total_pages=1, direction="next", **kwar def listSiteSubnets(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Returns subnet records stored under Meraki networks represented as MCN Sites in the specified organization** + **Returns subnet records stored under Meraki networks represented as Multicloud Fabric Sites in the specified organization** https://developer.cisco.com/meraki/api-v1/#!list-site-subnets - organizationId (string): Organization ID - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages - direction (string): direction to paginate, either "next" (default) or "prev" page - - siteId (string): MCN-assigned UUID of the parent Site whose subnets are returned. + - siteId (string): Multicloud Fabric-assigned UUID of the parent Site whose subnets are returned. + - includeDeleted (boolean): When true, include removed Site subnets along with active subnets. Defaults to false. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. - endingBefore (string): Backward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -11087,6 +11221,7 @@ def listSiteSubnets(self, organizationId: str, total_pages=1, direction="next", query_params = [ "siteId", + "includeDeleted", "perPage", "startingAfter", "endingBefore", @@ -11103,7 +11238,7 @@ def listSiteSubnets(self, organizationId: str, total_pages=1, direction="next", def getSiteSubnet(self, organizationId: str, subnetId: str): """ - **Returns one organization-owned subnet from a Meraki network represented as an MCN Site, including tag associations stored by MCN** + **Returns one organization-owned subnet from a Meraki network represented as a Multicloud Fabric Site, including tag associations stored by Multicloud Fabric** https://developer.cisco.com/meraki/api-v1/#!get-site-subnet - organizationId (string): Organization ID @@ -11122,7 +11257,7 @@ def getSiteSubnet(self, organizationId: str, subnetId: str): def getSite(self, organizationId: str, siteId: str): """ - **Returns one organization-owned Meraki or Manual IPsec record represented as an MCN Site** + **Returns one organization-owned Meraki or Manual IPsec record represented as a Multicloud Fabric Site** https://developer.cisco.com/meraki/api-v1/#!get-site - organizationId (string): Organization ID @@ -11139,6 +11274,120 @@ def getSite(self, organizationId: str, siteId: str): return self._session.get(metadata, resource) + def getIntentUsage(self, organizationId: str, intentId: str, windowSeconds: int, resolutionSeconds: int, **kwargs): + """ + **Returns traffic usage for the requested Zero Trust Routing intent over a trailing time window** + https://developer.cisco.com/meraki/api-v1/#!get-intent-usage + + - organizationId (string): Organization ID + - intentId (string): Intent ID + - windowSeconds (integer): Length of the trailing traffic window in seconds. Must be positive, + divisible by `resolutionSeconds`, and produce no more than 4096 buckets. + - resolutionSeconds (integer): Width of each traffic time bucket in seconds. Must be positive and divide + `windowSeconds` evenly, be a multiple of 60 seconds, and produce no more + than 4096 buckets. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "mcf", "stats", "intents"], + "operation": "getIntentUsage", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + intentId = urllib.parse.quote(str(intentId), safe="") + resource = f"/organizations/{organizationId}/mcf/stats/intents/{intentId}" + + query_params = [ + "windowSeconds", + "resolutionSeconds", + ] + 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"getIntentUsage: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getSiteUsage(self, organizationId: str, siteId: str, windowSeconds: int, resolutionSeconds: int, **kwargs): + """ + **Returns traffic usage for the requested Site over a trailing time window** + https://developer.cisco.com/meraki/api-v1/#!get-site-usage + + - organizationId (string): Organization ID + - siteId (string): Site ID + - windowSeconds (integer): Length of the trailing traffic window in seconds. Must be positive, + divisible by `resolutionSeconds`, and produce no more than 4096 buckets. + - resolutionSeconds (integer): Width of each traffic time bucket in seconds. Must be positive and divide + `windowSeconds` evenly, be a multiple of 60 seconds, and produce no more + than 4096 buckets. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "mcf", "stats", "sites"], + "operation": "getSiteUsage", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + siteId = urllib.parse.quote(str(siteId), safe="") + resource = f"/organizations/{organizationId}/mcf/stats/sites/{siteId}" + + query_params = [ + "windowSeconds", + "resolutionSeconds", + ] + 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"getSiteUsage: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getVpcUsage(self, organizationId: str, vpcId: str, windowSeconds: int, resolutionSeconds: int, **kwargs): + """ + **Returns traffic usage for the requested VPC over a trailing time window** + https://developer.cisco.com/meraki/api-v1/#!get-vpc-usage + + - organizationId (string): Organization ID + - vpcId (string): Vpc ID + - windowSeconds (integer): Length of the trailing traffic window in seconds. Must be positive, + divisible by `resolutionSeconds`, and produce no more than 4096 buckets. + - resolutionSeconds (integer): Width of each traffic time bucket in seconds. Must be positive and divide + `windowSeconds` evenly, be a multiple of 60 seconds, and produce no more + than 4096 buckets. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "mcf", "stats", "vpcs"], + "operation": "getVpcUsage", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + vpcId = urllib.parse.quote(str(vpcId), safe="") + resource = f"/organizations/{organizationId}/mcf/stats/vpcs/{vpcId}" + + query_params = [ + "windowSeconds", + "resolutionSeconds", + ] + 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"getVpcUsage: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + def getSummary(self, organizationId: str): """ **Returns organization connection, VPC, Site, and region counts derived from Zero Trust Routing and tunnel health.** @@ -11181,9 +11430,9 @@ def listTags(self, organizationId: str, total_pages=1, direction="next", **kwarg With `type=vpc`, only VPC associations are considered; with `type=subnet`, only subnet associations are considered. This filter cannot be combined with `type=site`. - - subnetId (string): MCN-assigned subnet UUID filter. Valid only with `type=subnet`. - - vpcId (string): MCN-assigned VPC UUID filter. Valid only with `type=vpc`. - - siteId (string): MCN-assigned Site UUID filter. Valid only with `type=site`. + - subnetId (string): Multicloud Fabric-assigned subnet UUID filter. Valid only with `type=subnet`. + - vpcId (string): Multicloud Fabric-assigned VPC UUID filter. Valid only with `type=vpc`. + - siteId (string): Multicloud Fabric-assigned Site UUID filter. Valid only with `type=site`. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. - endingBefore (string): Backward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -11272,7 +11521,7 @@ def createTag(self, organizationId: str, key: str, value: str, type: str, **kwar def getTag(self, organizationId: str, tagId: str): """ - **Returns one canonical provider-origin tag identity by its MCN-assigned + **Returns one canonical provider-origin tag identity by its Multicloud Fabric-assigned UUID** https://developer.cisco.com/meraki/api-v1/#!get-tag @@ -11326,9 +11575,9 @@ def getTunnelStatus(self, organizationId: str, **kwargs): `window / resolution + 1` samples, up to 4,096. For resolutions greater than 12 minutes, `window + resolution` cannot exceed 34 days, 3 hours, and 12 minutes. - - vpcId (string): MCN-assigned UUID of one AWS, Azure, or GCP VPC to return. Mutually + - vpcId (string): Multicloud Fabric-assigned UUID of one AWS, Azure, or GCP VPC to return. Mutually exclusive with `siteId` and deprecated `networkId`. - - siteId (string): MCN-assigned UUID of one Meraki Site to return. Mutually exclusive + - siteId (string): Multicloud Fabric-assigned UUID of one Meraki Site to return. Mutually exclusive with `vpcId` and deprecated `networkId`. """ @@ -11455,8 +11704,8 @@ def listVpcs(self, organizationId: str, total_pages=1, direction="next", **kwarg - `aws` — Amazon Web Services VPCs. - `azure` — Microsoft Azure virtual networks (VNets). - `gcp` — Google Cloud VPC networks. - - accountId (string): MCN-assigned UUID of the discovered cloud account whose VPCs are returned. - - integrationId (string): MCN-assigned UUID of the cloud integration whose discovered VPCs are returned. + - accountId (string): Multicloud Fabric-assigned UUID of the discovered cloud account whose VPCs are returned. + - integrationId (string): Multicloud Fabric-assigned UUID of the cloud integration whose discovered VPCs are returned. - isDefault (boolean): When `true`, return only provider-designated default VPCs. When `false`, return only VPCs that are not provider-designated defaults. Omit to include both. - tagKey (string): Exact, case-sensitive provider tag key. Supply together with `tagValue`; omitting either member of the pair returns a validation error. - tagValue (string): Exact, case-sensitive provider tag value. Supply together with `tagKey`; omitting either member of the pair returns a validation error. @@ -11572,13 +11821,13 @@ def listVpcSubnets(self, organizationId: str, total_pages=1, direction="next", * - organizationId (string): Organization ID - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages - direction (string): direction to paginate, either "next" (default) or "prev" page - - vpcId (string): MCN-assigned UUID of the parent VPC whose subnets are returned. + - vpcId (string): Multicloud Fabric-assigned UUID of the parent VPC whose subnets are returned. - provider (string): Return only subnets discovered from VPCs of the specified provider: - `aws` — Amazon Web Services VPC subnets. - `azure` — Microsoft Azure VNet subnets. - `gcp` — Google Cloud VPC subnets. - - accountId (string): MCN-assigned UUID of the discovered cloud account whose VPC subnets are returned. + - accountId (string): Multicloud Fabric-assigned UUID of the discovered cloud account whose VPC subnets are returned. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. - endingBefore (string): Backward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -11770,6 +12019,67 @@ def getZtrIntent(self, organizationId: str, ztrIntentId: str): return self._session.get(metadata, resource) + def updateZtrIntent( + self, + organizationId: str, + ztrIntentId: str, + name: str, + enabled: bool, + rule: str, + endpointsA: list, + endpointsB: list, + **kwargs, + ): + """ + **Replaces an organization-scoped intent's mutable fields** + https://developer.cisco.com/meraki/api-v1/#!update-ztr-intent + + - organizationId (string): Organization ID + - ztrIntentId (string): Ztr intent ID + - name (string): Non-empty display name of the intent. + - enabled (boolean): Required enabled state. `true` includes the intent in routing; + `false` excludes it and routing changes request cleanup. + - rule (string): Required routing rule. + + - `ALLOW` — Allows selected endpoint prefixes. + - `DENY` — Currently produces the same routing output as `ALLOW`. + - endpointsA (array): Non-empty replacement of side A; at most one tag selector. Ordering does not affect routing. + - endpointsB (array): Non-empty replacement of side B; at most one tag selector. Ordering does not affect routing. + - description (string): Intent explanation; omission or null clears it, while an empty string is stored as given. + """ + + kwargs.update(locals()) + + if "rule" in kwargs: + options = ["ALLOW", "DENY"] + assert kwargs["rule"] in options, f'''"rule" cannot be "{kwargs["rule"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["organizations", "configure", "mcf", "ztrIntents"], + "operation": "updateZtrIntent", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + ztrIntentId = urllib.parse.quote(str(ztrIntentId), safe="") + resource = f"/organizations/{organizationId}/mcf/ztrIntents/{ztrIntentId}" + + body_params = [ + "name", + "description", + "enabled", + "rule", + "endpointsA", + "endpointsB", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning(f"updateZtrIntent: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def deleteZtrIntent(self, organizationId: str, ztrIntentId: str): """ **Transitions the organization-scoped intent to `PENDING_DELETE` and then diff --git a/meraki/aio/api/spaces.py b/meraki/aio/api/spaces.py index eb6f2c7..d80b5d2 100644 --- a/meraki/aio/api/spaces.py +++ b/meraki/aio/api/spaces.py @@ -107,7 +107,7 @@ def updateNetworkSpacesSitesBuilding(self, networkId: str, buildingId: str, **kw def deleteNetworkSpacesSitesBuilding(self, networkId: str, buildingId: str): """ - **Delete a building** + **Delete a building and all floors assigned to it.** https://developer.cisco.com/meraki/api-v1/#!delete-network-spaces-sites-building - networkId (string): Network ID diff --git a/meraki/aio/api/wireless.py b/meraki/aio/api/wireless.py index b7ef21f..3db16a4 100644 --- a/meraki/aio/api/wireless.py +++ b/meraki/aio/api/wireless.py @@ -650,7 +650,7 @@ def updateNetworkWirelessAirMarshalRule(self, networkId: str, ruleId: str, **kwa def deleteNetworkWirelessAirMarshalRule(self, networkId: str, ruleId: str): """ - **Delete an Air Marshal rule.** + **Delete an Air Marshal rule** https://developer.cisco.com/meraki/api-v1/#!delete-network-wireless-air-marshal-rule - networkId (string): Network ID @@ -842,6 +842,7 @@ def updateNetworkWirelessBluetoothSettings(self, networkId: str, **kwargs): - 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. + - sensorConnect (object): Sensor Connect related settings. """ kwargs.update(locals()) @@ -867,6 +868,7 @@ def updateNetworkWirelessBluetoothSettings(self, networkId: str, **kwargs): "major", "minor", "transmit", + "sensorConnect", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2932,6 +2934,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - wpaEncryptionMode (string): The types of WPA encryption. ('WPA1 only', 'WPA1 and WPA2', 'WPA2 only', 'WPA3 Transition Mode', 'WPA3 only' or 'WPA3 192-bit Security') - dot11w (object): The current setting for Protected Management Frames (802.11w). - dot11r (object): The current setting for 802.11r + - dot11k (object): The current setting for 802.11k - splashPage (string): The type of splash page for the SSID ('None', 'Click-through splash page', 'Billing', 'Password-protected with Meraki RADIUS', 'Password-protected with custom RADIUS', 'Password-protected with Active Directory', 'Password-protected with LDAP', 'SMS authentication', 'Systems Manager Sentry', 'Facebook Wi-Fi', 'Google OAuth', 'Microsoft Entra ID', 'Sponsored guest' or 'Cisco ISE').This attribute is not supported for template children. - splashGuestSponsorDomains (array): Array of valid sponsor email domains for sponsored guest splash type. - oauth (object): The OAuth settings of this SSID. Only valid if splashPage is 'Google OAuth'. @@ -3085,6 +3088,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): "wpaEncryptionMode", "dot11w", "dot11r", + "dot11k", "splashPage", "splashGuestSponsorDomains", "oauth", @@ -5885,12 +5889,12 @@ def getOrganizationAssuranceWirelessExperienceMostImpactedXMs(self, organization return self._session.get(metadata, resource, params) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ **Summarize wireless connection counts by network** - https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-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 @@ -5910,11 +5914,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork( kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "experience", "successfulConnects", "byNetwork"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork", + "tags": ["wireless", "monitor", "experience", "successfulConnections", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork" query_params = [ "networkIds", @@ -5946,17 +5950,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork( invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByBand( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connections-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 @@ -5976,11 +5980,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand( kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "byBand"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "byBand"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByBand", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byBand" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byBand" query_params = [ "networkIds", @@ -6012,17 +6016,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand( invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByBand: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClient( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClient( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-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 @@ -6042,11 +6046,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClien kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "byClient"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClient", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "byClient"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClient", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byClient" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byClient" query_params = [ "networkIds", @@ -6078,17 +6082,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClien invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClient: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientOs( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClientOs( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-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 @@ -6108,11 +6112,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClien kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "byClientOs"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientOs", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "byClientOs"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClientOs", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byClientOs" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byClientOs" query_params = [ "networkIds", @@ -6144,17 +6148,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClien invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClientOs: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientType( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClientType( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connections-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 @@ -6174,11 +6178,13 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClien kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "byClientType"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientType", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "byClientType"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClientType", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byClientType" + resource = ( + f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byClientType" + ) query_params = [ "networkIds", @@ -6210,17 +6216,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClien invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClientType: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevice( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByDevice( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-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 @@ -6240,11 +6246,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevic kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "byDevice"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevice", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "byDevice"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byDevice" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byDevice" query_params = [ "networkIds", @@ -6276,17 +6282,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevic invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByDevice: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInterval( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByInterval( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connections-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 @@ -6307,11 +6313,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInter kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "experience", "successfulConnects", "byNetwork", "byInterval"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInterval", + "tags": ["wireless", "monitor", "experience", "successfulConnections", "byNetwork", "byInterval"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byInterval" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byInterval" query_params = [ "networkIds", @@ -6344,17 +6350,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInter invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServer( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByServer( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connections-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 @@ -6374,11 +6380,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServe kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "byServer"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServer", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "byServer"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByServer", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byServer" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byServer" query_params = [ "networkIds", @@ -6410,17 +6416,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServe invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByServer: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkBySsid( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connections-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 @@ -6440,11 +6446,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid( kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "bySsid"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "bySsid"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkBySsid", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/bySsid" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/bySsid" query_params = [ "networkIds", @@ -6476,17 +6482,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid( invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwork( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsInsightsByNetwork( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connections-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 @@ -6520,11 +6526,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwor ) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "insights", "byNetwork"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwork", + "tags": ["wireless", "configure", "experience", "successfulConnections", "insights", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsInsightsByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/insights/byNetwork" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/insights/byNetwork" query_params = [ "networkIds", @@ -6559,7 +6565,7 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwor invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsInsightsByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) @@ -8133,6 +8139,63 @@ def getOrganizationWirelessDevicesAccelerometerStatuses( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessDevicesAntennasExternalByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List last-known external antenna detections by device and radio for outdoor CW9163E and CW9177E access points** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-antennas-external-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 exact-match network IDs. Values match with OR; different filters combine with AND. An omitted or empty array does not restrict results. Applied before pagination and counts; inaccessible devices and networks are excluded. Use repeated bracket keys, for example networkIds[]=N_1234. Maximum 100 items. + - serials (array): Optional exact-match device serials. Values match with OR; different filters combine with AND. An omitted or empty array does not restrict results. Applied before pagination and counts; inaccessible devices and networks are excluded. Use repeated bracket keys, for example serials[]=Q2XX-XXXX-XXXX. Maximum 100 items. + - models (array): Optional exact-match Dashboard model identifiers (CW9163E, CW9177E). Values match with OR; different filters combine with AND. An omitted or empty array does not restrict results. Applied before pagination and counts; inaccessible devices and networks are excluded. Use repeated bracket keys, for example models[]=CW9163E. Maximum 100 items. + - 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", "devices", "antennas", "external", "byDevice"], + "operation": "getOrganizationWirelessDevicesAntennasExternalByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/antennas/external/byDevice" + + query_params = [ + "networkIds", + "serials", + "models", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "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"getOrganizationWirelessDevicesAntennasExternalByDevice: 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 ): diff --git a/meraki/api/appliance.py b/meraki/api/appliance.py index 82fdcb4..497a141 100644 --- a/meraki/api/appliance.py +++ b/meraki/api/appliance.py @@ -3447,6 +3447,8 @@ def updateNetworkApplianceVpnSiteToSiteVpn(self, networkId: str, mode: str, **kw - networkId (string): Network ID - mode (string): The site-to-site VPN mode. Can be one of 'none', 'spoke' or 'hub' + - changesConfirmed (boolean): Whether to accept the confirmation warnings for these changes. Defaults to false. + - natTraversal (object): NAT traversal settings. Omit to leave the existing setting unchanged. - 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. @@ -3469,7 +3471,9 @@ def updateNetworkApplianceVpnSiteToSiteVpn(self, networkId: str, mode: str, **kw resource = f"/networks/{networkId}/appliance/vpn/siteToSiteVpn" body_params = [ + "changesConfirmed", "mode", + "natTraversal", "hubs", "subnets", "peerSgtCapable", @@ -6573,7 +6577,7 @@ def getOrganizationApplianceVpnStatuses(self, organizationId: str, total_pages=1 def getOrganizationApplianceVpnThirdPartyVPNPeers(self, organizationId: str): """ - **Return the third party VPN peers for an organization** + **Return the configured third-party VPN peers for an organization.** https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-third-party-v-p-n-peers - organizationId (string): Organization ID diff --git a/meraki/api/batch/appliance.py b/meraki/api/batch/appliance.py index c34c311..300554d 100644 --- a/meraki/api/batch/appliance.py +++ b/meraki/api/batch/appliance.py @@ -1585,6 +1585,8 @@ def updateNetworkApplianceVpnSiteToSiteVpn(self, networkId: str, mode: str, **kw - networkId (string): Network ID - mode (string): The site-to-site VPN mode. Can be one of 'none', 'spoke' or 'hub' + - changesConfirmed (boolean): Whether to accept the confirmation warnings for these changes. Defaults to false. + - natTraversal (object): NAT traversal settings. Omit to leave the existing setting unchanged. - 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. @@ -1603,7 +1605,9 @@ def updateNetworkApplianceVpnSiteToSiteVpn(self, networkId: str, mode: str, **kw resource = f"/networks/{networkId}/appliance/vpn/siteToSiteVpn" body_params = [ + "changesConfirmed", "mode", + "natTraversal", "hubs", "subnets", "peerSgtCapable", diff --git a/meraki/api/batch/campusGateway.py b/meraki/api/batch/campusGateway.py index 1c05041..989c10e 100644 --- a/meraki/api/batch/campusGateway.py +++ b/meraki/api/batch/campusGateway.py @@ -102,6 +102,81 @@ def deleteNetworkCampusGatewayCluster(self, networkId: str, clusterId: str): } return action + def createNetworkCampusGatewayMdnsServicesCustom(self, networkId: str, name: str, types: list, **kwargs): + """ + **Create a network-scoped custom mDNS service definition.** + https://developer.cisco.com/meraki/api-v1/#!create-network-campus-gateway-mdns-services-custom + + - networkId (string): Network ID + - name (string): Display name of the custom mDNS service. + - types (array): DNS-SD service types. Accepted shorthand is normalized by the API. + """ + + kwargs = locals() + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/campusGateway/mdns/services/custom" + + body_params = [ + "name", + "types", + ] + 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 updateNetworkCampusGatewayMdnsServicesCustom(self, networkId: str, key: str, **kwargs): + """ + **Update a network-scoped custom mDNS service definition.** + https://developer.cisco.com/meraki/api-v1/#!update-network-campus-gateway-mdns-services-custom + + - networkId (string): Network ID + - key (string): Key + - name (string): Updated display name of the custom mDNS service. + - types (array): Replacement ordered list of DNS-SD service types. + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + key = urllib.parse.quote(key, safe="") + resource = f"/networks/{networkId}/campusGateway/mdns/services/custom/{key}" + + body_params = [ + "name", + "types", + ] + 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 deleteNetworkCampusGatewayMdnsServicesCustom(self, networkId: str, key: str): + """ + **Delete a network-scoped custom mDNS service definition.** + https://developer.cisco.com/meraki/api-v1/#!delete-network-campus-gateway-mdns-services-custom + + - networkId (string): Network ID + - key (string): Key + """ + + networkId = urllib.parse.quote(networkId, safe="") + key = urllib.parse.quote(key, safe="") + resource = f"/networks/{networkId}/campusGateway/mdns/services/custom/{key}" + + 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** diff --git a/meraki/api/batch/organizations.py b/meraki/api/batch/organizations.py index 528f197..f9c1be2 100644 --- a/meraki/api/batch/organizations.py +++ b/meraki/api/batch/organizations.py @@ -2074,7 +2074,7 @@ def updateOrganizationLoginSecurity(self, organizationId: str, **kwargs): def syncAutovpnConnectors(self, organizationId: str): """ - **Starts asynchronous reconciliation of MCN AutoVPN connectors and available regions.** + **Starts asynchronous reconciliation of MCF AutoVPN connectors and available regions.** https://developer.cisco.com/meraki/api-v1/#!sync-autovpn-connectors - organizationId (string): Organization ID @@ -2133,7 +2133,7 @@ def onboardAutovpnSites(self, organizationId: str, **kwargs): def offboardAutovpnSpoke(self, organizationId: str, networkId: str): """ - **Detaches a Meraki AutoVPN spoke from its MCN regions.** + **Detaches a Meraki AutoVPN spoke from its MCF regions.** https://developer.cisco.com/meraki/api-v1/#!offboard-autovpn-spoke - organizationId (string): Organization ID @@ -2152,12 +2152,12 @@ def offboardAutovpnSpoke(self, organizationId: str, networkId: str): def replaceAutovpnSpokeRegions(self, organizationId: str, networkId: str, regionIds: list, **kwargs): """ - **Replaces the complete desired MCN region set for a Meraki AutoVPN spoke.** + **Replaces the complete desired MCF region set for a Meraki AutoVPN spoke.** https://developer.cisco.com/meraki/api-v1/#!replace-autovpn-spoke-regions - organizationId (string): Organization ID - networkId (string): Network ID - - regionIds (array): Complete desired set of MCN region identifiers. + - regionIds (array): Complete desired set of MCF region identifiers. """ kwargs = locals() @@ -2179,7 +2179,7 @@ def replaceAutovpnSpokeRegions(self, organizationId: str, networkId: str, region def createIntegration(self, organizationId: str, provider: str, accessRights: list, **kwargs): """ - **Creates an AWS, Microsoft Azure, or Google Cloud integration for the specified Meraki Dashboard organization and starts initial cloud-resource discovery. The `provider` value selects the matching credential object; credential objects for other providers are ignored. The `201` response confirms that the integration was created and discovery was accepted for separate processing, not that discovery completed.** + **Creates an AWS, Microsoft Azure, or Google Cloud integration for the specified Meraki Dashboard organization and starts initial cloud-resource discovery. The `provider` value selects the matching credential object; credential objects for other providers are ignored. For Azure or Google Cloud, a supplied `acknowledgedAccountIds` array requires a fresh comparison against the currently accessible account ID set before creation. A changed set returns `409` with the current account scope, and the integration is not created. Omission or `null` preserves creation without this comparison. The `201` response confirms that the integration was created and discovery was accepted for separate processing, not that discovery completed.** https://developer.cisco.com/meraki/api-v1/#!create-integration - organizationId (string): Organization ID @@ -2189,14 +2189,17 @@ def createIntegration(self, organizationId: str, provider: str, accessRights: li - `azure` — Microsoft Azure; requires `azure` service-principal credentials. - `gcp` — Google Cloud; requires `gcp` service-account credentials. - Public creation does not accept `meraki`; MCN manages that integration + Public creation does not accept `meraki`; Multicloud Fabric manages that integration for Site discovery. Credential objects for providers other than the selected value are ignored. - - accessRights (array): One or more requested provider capability bundles for the integration. MCN validates and stores these values, but they are not operation-time authorization switches. + - accessRights (array): One or more requested provider capability bundles for the integration. Multicloud Fabric validates and stores these values, but they are not operation-time authorization switches. - `discover` — Requests permissions used to inventory accounts or projects, networks, subnets, routing, and related metadata. - `create_onboarding_resources` — Requests permissions used to create supported provider-side gateway and VPN resources during onboarding. - `update_vpc` — Requests permissions associated with modifying supported cloud-network resources. + - acknowledgedAccountIds (array): Provider-native IDs presented when the customer acknowledged account scope: Azure subscription IDs for `azure`, or Google Cloud project IDs for `gcp`. When supplied, creation requires the current accessible account ID set to equal this set. Comparison ignores leading and trailing whitespace in both sets and ignores letter case for Azure subscription IDs. Google Cloud project IDs remain case-sensitive. IDs are deduplicated after these comparison rules are applied. Order and display-name changes do not affect comparison. A difference returns `409` with the current scope for review and renewed acknowledgement. The returned scope preserves the IDs from the preview. + + Omission or `null` preserves creation without an acknowledged-scope check. An empty array acknowledges a scope with no accessible accounts and still requires a fresh comparison. IDs must contain a non-whitespace character. This field is ignored for `aws`. - aws (object): AWS assumed-role details. Required when `provider` is `aws`; otherwise this object is not used. - gcp (object): Google Cloud service-account credentials and optional parent scope. Required when `provider` is `gcp`; otherwise this object is not used. - azure (object): Microsoft Azure service-principal credentials. Required when `provider` is `azure`; otherwise this object is not used. @@ -2208,6 +2211,7 @@ def createIntegration(self, organizationId: str, provider: str, accessRights: li resource = f"/organizations/{organizationId}/mcf/integrations" body_params = [ + "acknowledgedAccountIds", "provider", "accessRights", "aws", @@ -2224,7 +2228,7 @@ def createIntegration(self, organizationId: str, provider: str, accessRights: li def previewAzureAccounts(self, organizationId: str, tenantId: str, clientId: str, clientSecret: str, **kwargs): """ - **Validates proposed Microsoft Azure service-principal credentials and returns the Azure subscriptions accessible to them. The preview does not create an integration or modify existing MCN account and network state.** + **Validates proposed Microsoft Azure service-principal credentials and returns the Azure subscriptions accessible to them. The preview does not create an integration or modify existing Multicloud Fabric account and network state.** https://developer.cisco.com/meraki/api-v1/#!preview-azure-accounts - organizationId (string): Organization ID @@ -2253,7 +2257,7 @@ def previewAzureAccounts(self, organizationId: str, tenantId: str, clientId: str def previewGcpAccounts(self, organizationId: str, keyJson: str, **kwargs): """ - **Validates proposed Google Cloud service-account credentials and returns the Google Cloud projects accessible to them. The optional parent scope expands the preview to projects beneath one organization or folder; the preview does not create an integration or modify existing MCN account and network state.** + **Validates proposed Google Cloud service-account credentials and returns the Google Cloud projects accessible to them. The optional parent scope expands the preview to projects beneath one organization or folder; the preview does not create an integration or modify existing Multicloud Fabric account and network state.** https://developer.cisco.com/meraki/api-v1/#!preview-gcp-accounts - organizationId (string): Organization ID @@ -2401,7 +2405,7 @@ def confirmRemovedResourcesBulk(self, organizationId: str, **kwargs): https://developer.cisco.com/meraki/api-v1/#!confirm-removed-resources-bulk - organizationId (string): Organization ID - - resourceIds (object): Explicit MCN UUIDs keyed by `account`, `network`, or `subnet`. Duplicate + - resourceIds (object): Explicit Multicloud Fabric UUIDs keyed by `account`, `network`, or `subnet`. Duplicate type/UUID pairs are processed once. The request can contain at most 100 IDs across all keys. After duplicates are removed, request-size validation also counts the missing child networks of selected accounts; child @@ -2517,7 +2521,7 @@ def createTag(self, organizationId: str, key: str, value: str, type: str, **kwar def offboardVpcs(self, organizationId: str, vpcs: list, **kwargs): """ - **Validates 1–50 distinct organization-owned VPC IDs and attempts to offboard each VPC. The entire request is rejected before batch creation when its shape or identifiers are invalid, a VPC is missing, or any requested VPC belongs to an active onboarding or offboarding batch. An existing VPC with no onboarding record is instead returned as a response-only rejection; it is not added to the batch tracker and does not prevent other VPCs from being processed. A successful item means MCN either completed immediate cleanup for a failed onboarding with no recorded provider resources or started asynchronous teardown. The batch reports terminal outcomes only for accepted VPCs; onboarding state history reports asynchronous teardown.** + **Validates 1–50 distinct organization-owned VPC IDs and attempts to offboard each VPC. The entire request is rejected before batch creation when its shape or identifiers are invalid, a VPC is missing, or any requested VPC belongs to an active onboarding or offboarding batch. An existing VPC with no onboarding record is instead returned as a response-only rejection; it is not added to the batch tracker and does not prevent other VPCs from being processed. A successful item means Multicloud Fabric either completed immediate cleanup for a failed onboarding with no recorded provider resources or started asynchronous teardown. The batch reports terminal outcomes only for accepted VPCs; onboarding state history reports asynchronous teardown.** https://developer.cisco.com/meraki/api-v1/#!offboard-vpcs - organizationId (string): Organization ID @@ -2622,6 +2626,68 @@ def createZtrIntent(self, organizationId: str, name: str, endpointsA: list, endp } return action + def updateZtrIntent( + self, + organizationId: str, + ztrIntentId: str, + name: str, + enabled: bool, + rule: str, + endpointsA: list, + endpointsB: list, + **kwargs, + ): + """ + **Replaces an organization-scoped intent's mutable fields. Routing changes + set enabled intents to `PENDING` or disabled intents to `DISABLED` and + request asynchronous reconciliation, including routing cleanup on disable. + Metadata-only edits preserve lifecycle status. Unchanged selections, + reordered endpoints, and equivalent VPC/Site aliases do not trigger + reconciliation. Acceptance does not confirm reconciliation has begun or + routing cleanup is complete; track status with get or list. Intents in + `PENDING_DELETE` or `DELETED_FAILED` cannot be updated.** + https://developer.cisco.com/meraki/api-v1/#!update-ztr-intent + + - organizationId (string): Organization ID + - ztrIntentId (string): Ztr intent ID + - name (string): Non-empty display name of the intent. + - enabled (boolean): Required enabled state. `true` includes the intent in routing; + `false` excludes it and routing changes request cleanup. + - rule (string): Required routing rule. + + - `ALLOW` — Allows selected endpoint prefixes. + - `DENY` — Currently produces the same routing output as `ALLOW`. + - endpointsA (array): Non-empty replacement of side A; at most one tag selector. Ordering does not affect routing. + - endpointsB (array): Non-empty replacement of side B; at most one tag selector. Ordering does not affect routing. + - description (string): Intent explanation; omission or null clears it, while an empty string is stored as given. + """ + + kwargs.update(locals()) + + if "rule" in kwargs: + options = ["ALLOW", "DENY"] + assert kwargs["rule"] in options, f'''"rule" cannot be "{kwargs["rule"]}", & must be set to one of: {options}''' + + organizationId = urllib.parse.quote(organizationId, safe="") + ztrIntentId = urllib.parse.quote(ztrIntentId, safe="") + resource = f"/organizations/{organizationId}/mcf/ztrIntents/{ztrIntentId}" + + body_params = [ + "name", + "description", + "enabled", + "rule", + "endpointsA", + "endpointsB", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "batch", + "body": payload, + } + return action + def deleteZtrIntent(self, organizationId: str, ztrIntentId: str): """ **Transitions the organization-scoped intent to `PENDING_DELETE` and then @@ -3720,33 +3786,6 @@ def deleteOrganizationSaseIntegration(self, organizationId: str, integrationId: } return action - def bulkOrganizationSaseSitesRegionsUpdate(self, organizationId: str, sites: list, region: dict, **kwargs): - """ - **Create a provisioning pipeline that bulk updates multiple already attached Secure Access sites to one selected region.** - https://developer.cisco.com/meraki/api-v1/#!bulk-organization-sase-sites-regions-update - - - organizationId (string): Organization ID - - sites (array): Non-empty list of Secure Access sites to bulk update. One to 20 sites can be updated in a single request. - - region (object): Destination region applied uniformly to all listed Secure Access sites. - """ - - kwargs = locals() - - organizationId = urllib.parse.quote(organizationId, safe="") - resource = f"/organizations/{organizationId}/sase/sites/regions/bulkUpdate" - - body_params = [ - "sites", - "region", - ] - 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 updateOrganizationSaseSite(self, organizationId: str, siteId: str, **kwargs): """ **Update the configuration for a site. Currently, only supports updating default route enablement.** diff --git a/meraki/api/batch/spaces.py b/meraki/api/batch/spaces.py index 4869ed2..7126184 100644 --- a/meraki/api/batch/spaces.py +++ b/meraki/api/batch/spaces.py @@ -88,7 +88,7 @@ def updateNetworkSpacesSitesBuilding(self, networkId: str, buildingId: str, **kw def deleteNetworkSpacesSitesBuilding(self, networkId: str, buildingId: str): """ - **Delete a building** + **Delete a building and all floors assigned to it.** https://developer.cisco.com/meraki/api-v1/#!delete-network-spaces-sites-building - networkId (string): Network ID diff --git a/meraki/api/batch/wireless.py b/meraki/api/batch/wireless.py index 2753755..88dd7be 100644 --- a/meraki/api/batch/wireless.py +++ b/meraki/api/batch/wireless.py @@ -201,7 +201,7 @@ def updateDeviceWirelessRadioSettings(self, serial: str, **kwargs): def createNetworkWirelessAirMarshalRule(self, networkId: str, type: str, match: dict, **kwargs): """ - **Creates a new rule** + **Creates a new rule. In an action batch, mutations execute in the submitted order and commit atomically; a failure rolls back every mutation and configuration update in that batch. Completed or failed batches cannot be executed again. Air Marshal settings updates may be included in the same batch. The created rule ID is returned in the action batch createdResources list. A later action in the same batch cannot reference that generated ID.** https://developer.cisco.com/meraki/api-v1/#!create-network-wireless-air-marshal-rule - networkId (string): Network ID @@ -232,7 +232,7 @@ def createNetworkWirelessAirMarshalRule(self, networkId: str, type: str, match: def updateNetworkWirelessAirMarshalRule(self, networkId: str, ruleId: str, **kwargs): """ - **Update a rule** + **Update a rule. In an action batch, mutations execute in the submitted order and commit atomically; a failure rolls back every mutation and configuration update in that batch. Completed or failed batches cannot be executed again. Air Marshal settings updates may be included in the same batch.** https://developer.cisco.com/meraki/api-v1/#!update-network-wireless-air-marshal-rule - networkId (string): Network ID @@ -265,7 +265,7 @@ def updateNetworkWirelessAirMarshalRule(self, networkId: str, ruleId: str, **kwa def deleteNetworkWirelessAirMarshalRule(self, networkId: str, ruleId: str): """ - **Delete an Air Marshal rule.** + **Delete an Air Marshal rule. In an action batch, mutations execute in the submitted order and commit atomically; a failure rolls back every mutation and configuration update in that batch. Completed or failed batches cannot be executed again. Air Marshal settings updates may be included in the same batch.** https://developer.cisco.com/meraki/api-v1/#!delete-network-wireless-air-marshal-rule - networkId (string): Network ID @@ -1063,6 +1063,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - wpaEncryptionMode (string): The types of WPA encryption. ('WPA1 only', 'WPA1 and WPA2', 'WPA2 only', 'WPA3 Transition Mode', 'WPA3 only' or 'WPA3 192-bit Security') - dot11w (object): The current setting for Protected Management Frames (802.11w). - dot11r (object): The current setting for 802.11r + - dot11k (object): The current setting for 802.11k - splashPage (string): The type of splash page for the SSID ('None', 'Click-through splash page', 'Billing', 'Password-protected with Meraki RADIUS', 'Password-protected with custom RADIUS', 'Password-protected with Active Directory', 'Password-protected with LDAP', 'SMS authentication', 'Systems Manager Sentry', 'Facebook Wi-Fi', 'Google OAuth', 'Microsoft Entra ID', 'Sponsored guest' or 'Cisco ISE').This attribute is not supported for template children. - splashGuestSponsorDomains (array): Array of valid sponsor email domains for sponsored guest splash type. - oauth (object): The OAuth settings of this SSID. Only valid if splashPage is 'Google OAuth'. @@ -1212,6 +1213,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): "wpaEncryptionMode", "dot11w", "dot11r", + "dot11k", "splashPage", "splashGuestSponsorDomains", "oauth", diff --git a/meraki/api/campusGateway.py b/meraki/api/campusGateway.py index 97eff32..31eae25 100644 --- a/meraki/api/campusGateway.py +++ b/meraki/api/campusGateway.py @@ -115,6 +115,97 @@ def deleteNetworkCampusGatewayCluster(self, networkId: str, clusterId: str): return self._session.delete(metadata, resource) + def createNetworkCampusGatewayMdnsServicesCustom(self, networkId: str, name: str, types: list, **kwargs): + """ + **Create a network-scoped custom mDNS service definition.** + https://developer.cisco.com/meraki/api-v1/#!create-network-campus-gateway-mdns-services-custom + + - networkId (string): Network ID + - name (string): Display name of the custom mDNS service. + - types (array): DNS-SD service types. Accepted shorthand is normalized by the API. + """ + + kwargs = locals() + + metadata = { + "tags": ["campusGateway", "configure", "mdns", "services", "custom"], + "operation": "createNetworkCampusGatewayMdnsServicesCustom", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/campusGateway/mdns/services/custom" + + body_params = [ + "name", + "types", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"createNetworkCampusGatewayMdnsServicesCustom: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.post(metadata, resource, payload) + + def updateNetworkCampusGatewayMdnsServicesCustom(self, networkId: str, key: str, **kwargs): + """ + **Update a network-scoped custom mDNS service definition.** + https://developer.cisco.com/meraki/api-v1/#!update-network-campus-gateway-mdns-services-custom + + - networkId (string): Network ID + - key (string): Key + - name (string): Updated display name of the custom mDNS service. + - types (array): Replacement ordered list of DNS-SD service types. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["campusGateway", "configure", "mdns", "services", "custom"], + "operation": "updateNetworkCampusGatewayMdnsServicesCustom", + } + networkId = urllib.parse.quote(str(networkId), safe="") + key = urllib.parse.quote(str(key), safe="") + resource = f"/networks/{networkId}/campusGateway/mdns/services/custom/{key}" + + body_params = [ + "name", + "types", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"updateNetworkCampusGatewayMdnsServicesCustom: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + + def deleteNetworkCampusGatewayMdnsServicesCustom(self, networkId: str, key: str): + """ + **Delete a network-scoped custom mDNS service definition.** + https://developer.cisco.com/meraki/api-v1/#!delete-network-campus-gateway-mdns-services-custom + + - networkId (string): Network ID + - key (string): Key + """ + + metadata = { + "tags": ["campusGateway", "configure", "mdns", "services", "custom"], + "operation": "deleteNetworkCampusGatewayMdnsServicesCustom", + } + networkId = urllib.parse.quote(str(networkId), safe="") + key = urllib.parse.quote(str(key), safe="") + resource = f"/networks/{networkId}/campusGateway/mdns/services/custom/{key}" + + return self._session.delete(metadata, resource) + def getNetworkCampusGatewaySsidMdns(self, networkId: str, number: str): """ **List the currently configured mDNS settings for the SSID** diff --git a/meraki/api/devices.py b/meraki/api/devices.py index 338827c..45ce4b5 100644 --- a/meraki/api/devices.py +++ b/meraki/api/devices.py @@ -1120,7 +1120,7 @@ def createDeviceLiveToolsRoutingTable(self, serial: str, **kwargs): https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-routing-table - serial (string): Serial - - destination (object): Optional destination filter used to return routes containing the supplied destination. + - destination (object): Optional destination filter used to return routes with an exact destination prefix match. - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret """ diff --git a/meraki/api/organizations.py b/meraki/api/organizations.py index 4ac487c..502dc7d 100644 --- a/meraki/api/organizations.py +++ b/meraki/api/organizations.py @@ -180,17 +180,28 @@ def createOrganizationActionBatch(self, organizationId: str, actions: list, **kw return self._session.post(metadata, resource, payload) - def getOrganizationActionBatches(self, organizationId: str, **kwargs): + def getOrganizationActionBatches(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Return the list of action batches in the organization** https://developer.cisco.com/meraki/api-v1/#!get-organization-action-batches - organizationId (string): Organization ID + - total_pages (integer or string): use with perPage to get 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'ascending'. - status (string): Filter batches by status. Valid types are pending, completed, and failed. """ 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 "status" in kwargs: options = ["completed", "failed", "pending"] assert kwargs["status"] in options, ( @@ -205,6 +216,10 @@ def getOrganizationActionBatches(self, organizationId: str, **kwargs): resource = f"/organizations/{organizationId}/actionBatches" query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", "status", ] params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} @@ -215,7 +230,7 @@ def getOrganizationActionBatches(self, organizationId: str, **kwargs): if invalid and self._session._logger: self._session._logger.warning(f"getOrganizationActionBatches: ignoring unrecognized kwargs: {invalid}") - return self._session.get(metadata, resource, params) + return self._session.get_pages(metadata, resource, params, total_pages, direction) def getOrganizationActionBatch(self, organizationId: str, actionBatchId: str): """ @@ -8991,6 +9006,118 @@ def enableOrganizationIntegrationsXdrNetworks(self, organizationId: str, network return self._session.post(metadata, resource, payload) + def createOrganizationInventoryBulkClaim(self, organizationId: str, claimKey: str, **kwargs): + """ + **Create one durable claim job for the order identified by a single claimKey** + https://developer.cisco.com/meraki/api-v1/#!create-organization-inventory-bulk-claim + + - organizationId (string): Organization ID + - claimKey (string): Opaque order claim key. Whitespace is ignored and letters are normalized to uppercase before lookup. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "inventory", "bulkClaims"], + "operation": "createOrganizationInventoryBulkClaim", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/inventory/bulkClaims" + + body_params = [ + "claimKey", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning(f"createOrganizationInventoryBulkClaim: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getOrganizationInventoryBulkClaims(self, organizationId: str, total_pages=1, direction="next", **kwargs): + """ + **List bulk-claim jobs for the organization, optionally filtered by lifecycle status** + https://developer.cisco.com/meraki/api-v1/#!get-organization-inventory-bulk-claims + + - organizationId (string): Organization ID + - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages + - direction (string): direction to paginate, either "next" (default) or "prev" page + - statuses (array): Filter by one or more public lifecycle statuses. + - sortBy (string): Sort by status priority. Descending (the default) puts failed, partialSuccess, active jobs (running, validating, queued), then succeeded first. Ascending reverses these groups. Jobs in the same group sort by ID in the same direction. + - 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. + - sortOrder (string): Sorted order of entries. Order options are 'ascending' and 'descending'. Default is 'descending'. + """ + + 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}''' + ) + 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", "inventory", "bulkClaims"], + "operation": "getOrganizationInventoryBulkClaims", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/inventory/bulkClaims" + + query_params = [ + "statuses", + "sortBy", + "perPage", + "startingAfter", + "endingBefore", + "sortOrder", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "statuses", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) + + if self._session._validate_kwargs: + all_params = query_params + array_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning(f"getOrganizationInventoryBulkClaims: ignoring unrecognized kwargs: {invalid}") + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + + def getOrganizationInventoryBulkClaim(self, bulkClaimId: str, organizationId: str): + """ + **Read the durable lifecycle status, progress counts, and failures for a bulk-claim job** + https://developer.cisco.com/meraki/api-v1/#!get-organization-inventory-bulk-claim + + - bulkClaimId (string): The bulk-claim id + - organizationId (string): Organization ID + """ + + metadata = { + "tags": ["organizations", "configure", "inventory", "bulkClaims"], + "operation": "getOrganizationInventoryBulkClaim", + } + bulkClaimId = urllib.parse.quote(str(bulkClaimId), safe="") + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/inventory/bulkClaims/{bulkClaimId}" + + return self._session.get(metadata, resource) + def claimIntoOrganizationInventory(self, organizationId: str, **kwargs): """ **Claim a list of devices, licenses, and/or orders into an organization inventory** @@ -9681,7 +9808,7 @@ def updateOrganizationLoginSecurity(self, organizationId: str, **kwargs): def getMcfOrganization(self, organizationId: str): """ - **Returns the MCN organization record associated with the Meraki Dashboard organization identified by `organizationId`** + **Returns the Multicloud Fabric organization record associated with the Meraki Dashboard organization identified by `organizationId`** https://developer.cisco.com/meraki/api-v1/#!get-mcf-organization - organizationId (string): Organization ID @@ -9705,7 +9832,7 @@ def getAccounts(self, organizationId: str, total_pages=1, direction="next", **kw - organizationId (string): Organization ID - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages - direction (string): direction to paginate, either "next" (default) or "prev" page - - integrationId (string): Multi-Cloud Networking (MCN)-assigned UUID of the integration whose discovered accounts are returned. If omitted, accounts from all integrations in the organization are returned. + - integrationId (string): Multicloud Fabric-assigned UUID of the integration whose discovered accounts are returned. If omitted, accounts from all integrations in the organization are returned. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. - endingBefore (string): Backward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -9757,7 +9884,7 @@ def getAccount(self, organizationId: str, accountId: str): def listAutovpnConnectors(self, organizationId: str): """ - **Lists the organization's MCN AutoVPN connectors.** + **Lists the organization's MCF AutoVPN connectors.** https://developer.cisco.com/meraki/api-v1/#!list-autovpn-connectors - organizationId (string): Organization ID @@ -9774,7 +9901,7 @@ def listAutovpnConnectors(self, organizationId: str): def syncAutovpnConnectors(self, organizationId: str): """ - **Starts asynchronous reconciliation of MCN AutoVPN connectors and available regions.** + **Starts asynchronous reconciliation of MCF AutoVPN connectors and available regions.** https://developer.cisco.com/meraki/api-v1/#!sync-autovpn-connectors - organizationId (string): Organization ID @@ -9873,7 +10000,7 @@ def onboardAutovpnSites(self, organizationId: str, **kwargs): def offboardAutovpnSpoke(self, organizationId: str, networkId: str): """ - **Detaches a Meraki AutoVPN spoke from its MCN regions.** + **Detaches a Meraki AutoVPN spoke from its MCF regions.** https://developer.cisco.com/meraki/api-v1/#!offboard-autovpn-spoke - organizationId (string): Organization ID @@ -9911,12 +10038,12 @@ def getAutovpnSpokeHubBudget(self, organizationId: str, networkId: str): def replaceAutovpnSpokeRegions(self, organizationId: str, networkId: str, regionIds: list, **kwargs): """ - **Replaces the complete desired MCN region set for a Meraki AutoVPN spoke.** + **Replaces the complete desired MCF region set for a Meraki AutoVPN spoke.** https://developer.cisco.com/meraki/api-v1/#!replace-autovpn-spoke-regions - organizationId (string): Organization ID - networkId (string): Network ID - - regionIds (array): Complete desired set of MCN region identifiers. + - regionIds (array): Complete desired set of MCF region identifiers. """ kwargs = locals() @@ -9978,9 +10105,9 @@ def getBgpSessionStatus(self, organizationId: str, **kwargs): `window / resolution + 1` samples, up to 4,096. For resolutions greater than 12 minutes, `window + resolution` cannot exceed 34 days, 3 hours, and 12 minutes. - - vpcId (string): MCN-assigned UUID of one AWS, Azure, or GCP VPC to return. Mutually + - vpcId (string): Multicloud Fabric-assigned UUID of one AWS, Azure, or GCP VPC to return. Mutually exclusive with `siteId` and deprecated `networkId`. - - siteId (string): MCN-assigned UUID of one Meraki Site to return. Mutually exclusive + - siteId (string): Multicloud Fabric-assigned UUID of one Meraki Site to return. Mutually exclusive with `vpcId` and deprecated `networkId`. """ @@ -10013,7 +10140,7 @@ def getBgpSessionStatus(self, organizationId: str, **kwargs): def getOrganizationConfig(self, organizationId: str): """ - **Returns the Multi-Cloud Networking (MCN) configuration for the Meraki Dashboard organization identified by `organizationId`, including Site-to-Cloud state and provider-specific integration setup information.** + **Returns available configuration and terms for a valid Meraki Dashboard organization ID, including before its associated Multicloud Fabric organization exists** https://developer.cisco.com/meraki/api-v1/#!get-organization-config - organizationId (string): Organization ID @@ -10092,16 +10219,16 @@ def listEventLogs(self, organizationId: str, total_pages=1, direction="next", ** headlines. Repeat the parameter to OR headlines. The headline is not a closed vocabulary, and an empty value matches no rows exposed through event facets. - - integrationId (array): Restricts results to exact MCN cloud-integration UUIDs; repeat to OR values. - - accountId (array): Restricts results to exact MCN cloud-account UUIDs; repeat to OR values. - - vpcId (array): Restricts results to exact MCN VPC UUIDs; repeat to OR values. When VPC + - integrationId (array): Restricts results to exact Multicloud Fabric cloud-integration UUIDs; repeat to OR values. + - accountId (array): Restricts results to exact Multicloud Fabric cloud-account UUIDs; repeat to OR values. + - vpcId (array): Restricts results to exact Multicloud Fabric VPC UUIDs; repeat to OR values. When VPC IDs are supplied without Site or deprecated Network IDs, only AWS, Azure, and GCP network events match. - - siteId (array): Restricts results to exact MCN Site UUIDs; repeat to OR values. When Site + - siteId (array): Restricts results to exact Multicloud Fabric Site UUIDs; repeat to OR values. When Site IDs are supplied without VPC or deprecated Network IDs, only Meraki network events match. - - subnetId (array): Restricts results to exact MCN subnet UUIDs; repeat to OR values. - - regionId (array): Restricts results to exact MCN region UUIDs; repeat to OR values. + - subnetId (array): Restricts results to exact Multicloud Fabric subnet UUIDs; repeat to OR values. + - regionId (array): Restricts results to exact Multicloud Fabric region UUIDs; repeat to OR values. - regionName (array): Restricts results to exact, case-sensitive provider region names; repeat to OR values. - userId (array): Restricts results to exact opaque identity-provider subject IDs; repeat to OR values. @@ -10243,16 +10370,16 @@ def getEventLogFacets(self, organizationId: str, **kwargs): headlines. Repeat the parameter to OR headlines. The headline is not a closed vocabulary, and an empty value matches no rows exposed through event facets. - - integrationId (array): Restricts results to exact MCN cloud-integration UUIDs; repeat to OR values. - - accountId (array): Restricts results to exact MCN cloud-account UUIDs; repeat to OR values. - - vpcId (array): Restricts results to exact MCN VPC UUIDs; repeat to OR values. When VPC + - integrationId (array): Restricts results to exact Multicloud Fabric cloud-integration UUIDs; repeat to OR values. + - accountId (array): Restricts results to exact Multicloud Fabric cloud-account UUIDs; repeat to OR values. + - vpcId (array): Restricts results to exact Multicloud Fabric VPC UUIDs; repeat to OR values. When VPC IDs are supplied without Site or deprecated Network IDs, only AWS, Azure, and GCP network events match. - - siteId (array): Restricts results to exact MCN Site UUIDs; repeat to OR values. When Site + - siteId (array): Restricts results to exact Multicloud Fabric Site UUIDs; repeat to OR values. When Site IDs are supplied without VPC or deprecated Network IDs, only Meraki network events match. - - subnetId (array): Restricts results to exact MCN subnet UUIDs; repeat to OR values. - - regionId (array): Restricts results to exact MCN region UUIDs; repeat to OR values. + - subnetId (array): Restricts results to exact Multicloud Fabric subnet UUIDs; repeat to OR values. + - regionId (array): Restricts results to exact Multicloud Fabric region UUIDs; repeat to OR values. - regionName (array): Restricts results to exact, case-sensitive provider region names; repeat to OR values. - userId (array): Restricts results to exact opaque identity-provider subject IDs; repeat to OR values. @@ -10389,16 +10516,16 @@ def getEventLogHistogram(self, organizationId: str, **kwargs): headlines. Repeat the parameter to OR headlines. The headline is not a closed vocabulary, and an empty value matches no rows exposed through event facets. - - integrationId (array): Restricts results to exact MCN cloud-integration UUIDs; repeat to OR values. - - accountId (array): Restricts results to exact MCN cloud-account UUIDs; repeat to OR values. - - vpcId (array): Restricts results to exact MCN VPC UUIDs; repeat to OR values. When VPC + - integrationId (array): Restricts results to exact Multicloud Fabric cloud-integration UUIDs; repeat to OR values. + - accountId (array): Restricts results to exact Multicloud Fabric cloud-account UUIDs; repeat to OR values. + - vpcId (array): Restricts results to exact Multicloud Fabric VPC UUIDs; repeat to OR values. When VPC IDs are supplied without Site or deprecated Network IDs, only AWS, Azure, and GCP network events match. - - siteId (array): Restricts results to exact MCN Site UUIDs; repeat to OR values. When Site + - siteId (array): Restricts results to exact Multicloud Fabric Site UUIDs; repeat to OR values. When Site IDs are supplied without VPC or deprecated Network IDs, only Meraki network events match. - - subnetId (array): Restricts results to exact MCN subnet UUIDs; repeat to OR values. - - regionId (array): Restricts results to exact MCN region UUIDs; repeat to OR values. + - subnetId (array): Restricts results to exact Multicloud Fabric subnet UUIDs; repeat to OR values. + - regionId (array): Restricts results to exact Multicloud Fabric region UUIDs; repeat to OR values. - regionName (array): Restricts results to exact, case-sensitive provider region names; repeat to OR values. - userId (array): Restricts results to exact opaque identity-provider subject IDs; repeat to OR values. @@ -10476,7 +10603,7 @@ def getEventLogHistogram(self, organizationId: str, **kwargs): def getIntegrations(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Returns cloud integrations for the specified Meraki Dashboard organization. `provider` restricts the response to AWS, Microsoft Azure, or Google Cloud integrations; an unfiltered response can also include the MCN-managed Meraki integration used for Site discovery** + **Returns cloud integrations for the specified Meraki Dashboard organization. `provider` restricts the response to AWS, Microsoft Azure, or Google Cloud integrations; an unfiltered response can also include the Multicloud Fabric-managed Meraki integration used for Site discovery** https://developer.cisco.com/meraki/api-v1/#!get-integrations - organizationId (string): Organization ID @@ -10489,7 +10616,7 @@ def getIntegrations(self, organizationId: str, total_pages=1, direction="next", - `gcp` — Google Cloud integrations. If omitted, integrations from all providers are returned, including - the MCN-managed `meraki` integration when Site discovery is enabled. + the Multicloud Fabric-managed `meraki` integration when Site discovery is enabled. `meraki` is not accepted as a filter value. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -10533,14 +10660,17 @@ def createIntegration(self, organizationId: str, provider: str, accessRights: li - `azure` — Microsoft Azure; requires `azure` service-principal credentials. - `gcp` — Google Cloud; requires `gcp` service-account credentials. - Public creation does not accept `meraki`; MCN manages that integration + Public creation does not accept `meraki`; Multicloud Fabric manages that integration for Site discovery. Credential objects for providers other than the selected value are ignored. - - accessRights (array): One or more requested provider capability bundles for the integration. MCN validates and stores these values, but they are not operation-time authorization switches. + - accessRights (array): One or more requested provider capability bundles for the integration. Multicloud Fabric validates and stores these values, but they are not operation-time authorization switches. - `discover` — Requests permissions used to inventory accounts or projects, networks, subnets, routing, and related metadata. - `create_onboarding_resources` — Requests permissions used to create supported provider-side gateway and VPN resources during onboarding. - `update_vpc` — Requests permissions associated with modifying supported cloud-network resources. + - acknowledgedAccountIds (array): Provider-native IDs presented when the customer acknowledged account scope: Azure subscription IDs for `azure`, or Google Cloud project IDs for `gcp`. When supplied, creation requires the current accessible account ID set to equal this set. Comparison ignores leading and trailing whitespace in both sets and ignores letter case for Azure subscription IDs. Google Cloud project IDs remain case-sensitive. IDs are deduplicated after these comparison rules are applied. Order and display-name changes do not affect comparison. A difference returns `409` with the current scope for review and renewed acknowledgement. The returned scope preserves the IDs from the preview. + + Omission or `null` preserves creation without an acknowledged-scope check. An empty array acknowledges a scope with no accessible accounts and still requires a fresh comparison. IDs must contain a non-whitespace character. This field is ignored for `aws`. - aws (object): AWS assumed-role details. Required when `provider` is `aws`; otherwise this object is not used. - gcp (object): Google Cloud service-account credentials and optional parent scope. Required when `provider` is `gcp`; otherwise this object is not used. - azure (object): Microsoft Azure service-principal credentials. Required when `provider` is `azure`; otherwise this object is not used. @@ -10556,6 +10686,7 @@ def createIntegration(self, organizationId: str, provider: str, accessRights: li resource = f"/organizations/{organizationId}/mcf/integrations" body_params = [ + "acknowledgedAccountIds", "provider", "accessRights", "aws", @@ -10784,25 +10915,26 @@ def discoverIntegration(self, organizationId: str, integrationId: str): def listRegions(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Returns cloud-provider region records correlated with MCN vPOP capacity** + **Returns cloud-provider regions with eligible Multicloud Fabric capacity** https://developer.cisco.com/meraki/api-v1/#!list-regions - organizationId (string): Organization ID - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages - direction (string): direction to paginate, either "next" (default) or "prev" page - - provider (string): Filters by the cloud-provider namespace of the region and its MCN vPOP capacity. Known returned values are: + - provider (string): Filters by the cloud-provider namespace of the region and its Multicloud Fabric capacity. Known returned values are: - `aws` — Amazon Web Services region capacity. - `azure` — Microsoft Azure region capacity. - `gcp` — Google Cloud region capacity. If omitted, all provider namespaces are returned. Matching is exact; an unrecognized value returns no matches rather than selecting a connected integration provider. - - type (string): Filters regions by eligible MCN connection capacity. + - type (string): Filters regions by eligible Multicloud Fabric connection capacity. - - `autovpn` — The region has an eligible AutoVPN vPOP address. - - `ipsec` — The region has an eligible IPsec vPOP address. + - `autovpn` — The region has eligible AutoVPN capacity. + - `ipsec` — The region has eligible IPsec capacity. This value selects a connection type and does not identify the cloud-integration provider. If omitted, regions are not restricted by connection type. + - supported (boolean): When `true`, returns only cloud-provider regions supported by Multicloud Fabric. When `false` or omitted, regions are not filtered by Multicloud Fabric support. - active (boolean): When `true`, returns only regions associated with at least one successfully onboarded VPC for the organization; when `false` or omitted, it adds no filter. This condition is evaluated independently of the `type` filter. If supplied, this parameter takes precedence over the deprecated `hasOnboardedVpcs` and `hasOnboardedNetworks` aliases, including when its value is `false`. If omitted, the aliases remain available for compatibility. - hasOnboardedNetworks (boolean): Deprecated: Use `active`. When `true`, returns only regions associated with at least one successfully onboarded VPC for the organization; when `false`, it adds no filter. This alias is applied only when both `active` and `hasOnboardedVpcs` are omitted. - hasOnboardedVpcs (boolean): Deprecated: Use `active`. When `true`, returns only regions associated with at least one successfully onboarded VPC for the organization; when `false` or omitted, it adds no filter. This condition is evaluated independently of the `type` filter. This alias is applied only when `active` is omitted and takes precedence over `hasOnboardedNetworks`, including when its value is `false`. @@ -10827,6 +10959,7 @@ def listRegions(self, organizationId: str, total_pages=1, direction="next", **kw query_params = [ "provider", "type", + "supported", "active", "hasOnboardedNetworks", "hasOnboardedVpcs", @@ -10872,7 +11005,7 @@ def listRemovedResources(self, organizationId: str, total_pages=1, direction="ne - `teardown_in_progress` — Confirmation was accepted and cleanup is running. - `teardown_failed` — Cleanup or finalization failed. - `removed` — Removal was finalized. - - integrationId (string): MCN-assigned UUID of the cloud integration whose resources are returned. + - integrationId (string): Multicloud Fabric-assigned UUID of the cloud integration whose resources are returned. - provider (string): Restricts results by provider attribution. - `aws` — Amazon Web Services resources. @@ -10882,7 +11015,7 @@ def listRemovedResources(self, organizationId: str, total_pages=1, direction="ne Matching is exact. Any other value is used as a provider name and returns no matches unless records carry that value. - - accountId (string): MCN-assigned cloud-account UUID. Returns the account and matching + - accountId (string): Multicloud Fabric-assigned cloud-account UUID. Returns the account and matching descendant networks and subnets, subject to other filters. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -10940,7 +11073,7 @@ def confirmRemovedResourcesBulk(self, organizationId: str, **kwargs): https://developer.cisco.com/meraki/api-v1/#!confirm-removed-resources-bulk - organizationId (string): Organization ID - - resourceIds (object): Explicit MCN UUIDs keyed by `account`, `network`, or `subnet`. Duplicate + - resourceIds (object): Explicit Multicloud Fabric UUIDs keyed by `account`, `network`, or `subnet`. Duplicate type/UUID pairs are processed once. The request can contain at most 100 IDs across all keys. After duplicates are removed, request-size validation also counts the missing child networks of selected accounts; child @@ -11021,15 +11154,15 @@ def confirmRemovedResource(self, organizationId: str, resourceType: str, resourc def listSites(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Returns Meraki and Manual IPsec records represented as MCN Sites for site-to-cloud connectivity in the specified organization** + **Returns Meraki and Manual IPsec records represented as Multicloud Fabric Sites for site-to-cloud connectivity in the specified organization** https://developer.cisco.com/meraki/api-v1/#!list-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 - onboarded (boolean): When `true`, return only Sites currently marked as onboarded. When `false`, return only Sites not currently marked as onboarded, including a Manual IPsec Site whose lifecycle record does not yet exist. Omit to include both. - - accountId (string): MCN-assigned UUID of the MCN-managed Meraki account whose Sites are returned. Because Manual IPsec Sites are accountless, supplying this filter excludes them. - - integrationId (string): MCN-assigned UUID of the MCN-managed Meraki integration whose Sites are returned. Because Manual IPsec Sites have no integration, supplying this filter excludes them. + - accountId (string): Multicloud Fabric-assigned UUID of the Multicloud Fabric-managed Meraki account whose Sites are returned. Because Manual IPsec Sites are accountless, supplying this filter excludes them. + - integrationId (string): Multicloud Fabric-assigned UUID of the Multicloud Fabric-managed Meraki integration whose Sites are returned. Because Manual IPsec Sites have no integration, supplying this filter excludes them. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. - endingBefore (string): Backward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -11064,13 +11197,14 @@ def listSites(self, organizationId: str, total_pages=1, direction="next", **kwar def listSiteSubnets(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ - **Returns subnet records stored under Meraki networks represented as MCN Sites in the specified organization** + **Returns subnet records stored under Meraki networks represented as Multicloud Fabric Sites in the specified organization** https://developer.cisco.com/meraki/api-v1/#!list-site-subnets - organizationId (string): Organization ID - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages - direction (string): direction to paginate, either "next" (default) or "prev" page - - siteId (string): MCN-assigned UUID of the parent Site whose subnets are returned. + - siteId (string): Multicloud Fabric-assigned UUID of the parent Site whose subnets are returned. + - includeDeleted (boolean): When true, include removed Site subnets along with active subnets. Defaults to false. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. - endingBefore (string): Backward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -11087,6 +11221,7 @@ def listSiteSubnets(self, organizationId: str, total_pages=1, direction="next", query_params = [ "siteId", + "includeDeleted", "perPage", "startingAfter", "endingBefore", @@ -11103,7 +11238,7 @@ def listSiteSubnets(self, organizationId: str, total_pages=1, direction="next", def getSiteSubnet(self, organizationId: str, subnetId: str): """ - **Returns one organization-owned subnet from a Meraki network represented as an MCN Site, including tag associations stored by MCN** + **Returns one organization-owned subnet from a Meraki network represented as a Multicloud Fabric Site, including tag associations stored by Multicloud Fabric** https://developer.cisco.com/meraki/api-v1/#!get-site-subnet - organizationId (string): Organization ID @@ -11122,7 +11257,7 @@ def getSiteSubnet(self, organizationId: str, subnetId: str): def getSite(self, organizationId: str, siteId: str): """ - **Returns one organization-owned Meraki or Manual IPsec record represented as an MCN Site** + **Returns one organization-owned Meraki or Manual IPsec record represented as a Multicloud Fabric Site** https://developer.cisco.com/meraki/api-v1/#!get-site - organizationId (string): Organization ID @@ -11139,6 +11274,120 @@ def getSite(self, organizationId: str, siteId: str): return self._session.get(metadata, resource) + def getIntentUsage(self, organizationId: str, intentId: str, windowSeconds: int, resolutionSeconds: int, **kwargs): + """ + **Returns traffic usage for the requested Zero Trust Routing intent over a trailing time window** + https://developer.cisco.com/meraki/api-v1/#!get-intent-usage + + - organizationId (string): Organization ID + - intentId (string): Intent ID + - windowSeconds (integer): Length of the trailing traffic window in seconds. Must be positive, + divisible by `resolutionSeconds`, and produce no more than 4096 buckets. + - resolutionSeconds (integer): Width of each traffic time bucket in seconds. Must be positive and divide + `windowSeconds` evenly, be a multiple of 60 seconds, and produce no more + than 4096 buckets. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "mcf", "stats", "intents"], + "operation": "getIntentUsage", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + intentId = urllib.parse.quote(str(intentId), safe="") + resource = f"/organizations/{organizationId}/mcf/stats/intents/{intentId}" + + query_params = [ + "windowSeconds", + "resolutionSeconds", + ] + 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"getIntentUsage: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getSiteUsage(self, organizationId: str, siteId: str, windowSeconds: int, resolutionSeconds: int, **kwargs): + """ + **Returns traffic usage for the requested Site over a trailing time window** + https://developer.cisco.com/meraki/api-v1/#!get-site-usage + + - organizationId (string): Organization ID + - siteId (string): Site ID + - windowSeconds (integer): Length of the trailing traffic window in seconds. Must be positive, + divisible by `resolutionSeconds`, and produce no more than 4096 buckets. + - resolutionSeconds (integer): Width of each traffic time bucket in seconds. Must be positive and divide + `windowSeconds` evenly, be a multiple of 60 seconds, and produce no more + than 4096 buckets. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "mcf", "stats", "sites"], + "operation": "getSiteUsage", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + siteId = urllib.parse.quote(str(siteId), safe="") + resource = f"/organizations/{organizationId}/mcf/stats/sites/{siteId}" + + query_params = [ + "windowSeconds", + "resolutionSeconds", + ] + 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"getSiteUsage: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + + def getVpcUsage(self, organizationId: str, vpcId: str, windowSeconds: int, resolutionSeconds: int, **kwargs): + """ + **Returns traffic usage for the requested VPC over a trailing time window** + https://developer.cisco.com/meraki/api-v1/#!get-vpc-usage + + - organizationId (string): Organization ID + - vpcId (string): Vpc ID + - windowSeconds (integer): Length of the trailing traffic window in seconds. Must be positive, + divisible by `resolutionSeconds`, and produce no more than 4096 buckets. + - resolutionSeconds (integer): Width of each traffic time bucket in seconds. Must be positive and divide + `windowSeconds` evenly, be a multiple of 60 seconds, and produce no more + than 4096 buckets. + """ + + kwargs = locals() + + metadata = { + "tags": ["organizations", "configure", "mcf", "stats", "vpcs"], + "operation": "getVpcUsage", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + vpcId = urllib.parse.quote(str(vpcId), safe="") + resource = f"/organizations/{organizationId}/mcf/stats/vpcs/{vpcId}" + + query_params = [ + "windowSeconds", + "resolutionSeconds", + ] + 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"getVpcUsage: ignoring unrecognized kwargs: {invalid}") + + return self._session.get(metadata, resource, params) + def getSummary(self, organizationId: str): """ **Returns organization connection, VPC, Site, and region counts derived from Zero Trust Routing and tunnel health.** @@ -11181,9 +11430,9 @@ def listTags(self, organizationId: str, total_pages=1, direction="next", **kwarg With `type=vpc`, only VPC associations are considered; with `type=subnet`, only subnet associations are considered. This filter cannot be combined with `type=site`. - - subnetId (string): MCN-assigned subnet UUID filter. Valid only with `type=subnet`. - - vpcId (string): MCN-assigned VPC UUID filter. Valid only with `type=vpc`. - - siteId (string): MCN-assigned Site UUID filter. Valid only with `type=site`. + - subnetId (string): Multicloud Fabric-assigned subnet UUID filter. Valid only with `type=subnet`. + - vpcId (string): Multicloud Fabric-assigned VPC UUID filter. Valid only with `type=vpc`. + - siteId (string): Multicloud Fabric-assigned Site UUID filter. Valid only with `type=site`. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. - endingBefore (string): Backward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -11272,7 +11521,7 @@ def createTag(self, organizationId: str, key: str, value: str, type: str, **kwar def getTag(self, organizationId: str, tagId: str): """ - **Returns one canonical provider-origin tag identity by its MCN-assigned + **Returns one canonical provider-origin tag identity by its Multicloud Fabric-assigned UUID** https://developer.cisco.com/meraki/api-v1/#!get-tag @@ -11326,9 +11575,9 @@ def getTunnelStatus(self, organizationId: str, **kwargs): `window / resolution + 1` samples, up to 4,096. For resolutions greater than 12 minutes, `window + resolution` cannot exceed 34 days, 3 hours, and 12 minutes. - - vpcId (string): MCN-assigned UUID of one AWS, Azure, or GCP VPC to return. Mutually + - vpcId (string): Multicloud Fabric-assigned UUID of one AWS, Azure, or GCP VPC to return. Mutually exclusive with `siteId` and deprecated `networkId`. - - siteId (string): MCN-assigned UUID of one Meraki Site to return. Mutually exclusive + - siteId (string): Multicloud Fabric-assigned UUID of one Meraki Site to return. Mutually exclusive with `vpcId` and deprecated `networkId`. """ @@ -11455,8 +11704,8 @@ def listVpcs(self, organizationId: str, total_pages=1, direction="next", **kwarg - `aws` — Amazon Web Services VPCs. - `azure` — Microsoft Azure virtual networks (VNets). - `gcp` — Google Cloud VPC networks. - - accountId (string): MCN-assigned UUID of the discovered cloud account whose VPCs are returned. - - integrationId (string): MCN-assigned UUID of the cloud integration whose discovered VPCs are returned. + - accountId (string): Multicloud Fabric-assigned UUID of the discovered cloud account whose VPCs are returned. + - integrationId (string): Multicloud Fabric-assigned UUID of the cloud integration whose discovered VPCs are returned. - isDefault (boolean): When `true`, return only provider-designated default VPCs. When `false`, return only VPCs that are not provider-designated defaults. Omit to include both. - tagKey (string): Exact, case-sensitive provider tag key. Supply together with `tagValue`; omitting either member of the pair returns a validation error. - tagValue (string): Exact, case-sensitive provider tag value. Supply together with `tagKey`; omitting either member of the pair returns a validation error. @@ -11572,13 +11821,13 @@ def listVpcSubnets(self, organizationId: str, total_pages=1, direction="next", * - organizationId (string): Organization ID - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages - direction (string): direction to paginate, either "next" (default) or "prev" page - - vpcId (string): MCN-assigned UUID of the parent VPC whose subnets are returned. + - vpcId (string): Multicloud Fabric-assigned UUID of the parent VPC whose subnets are returned. - provider (string): Return only subnets discovered from VPCs of the specified provider: - `aws` — Amazon Web Services VPC subnets. - `azure` — Microsoft Azure VNet subnets. - `gcp` — Google Cloud VPC subnets. - - accountId (string): MCN-assigned UUID of the discovered cloud account whose VPC subnets are returned. + - accountId (string): Multicloud Fabric-assigned UUID of the discovered cloud account whose VPC subnets are returned. - perPage (integer): Requested maximum number of matching resources to return. The default and maximum, and whether this parameter is applied, are defined by the operation. A response can contain fewer resources than requested. - startingAfter (string): Forward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. - endingBefore (string): Backward page boundary accepted by an operation. Its source, format, and interpretation are defined by that operation; do not reuse it across operations unless their documentation permits it. Cursor validation and interaction with other pagination parameters are operation-specific. @@ -11770,6 +12019,67 @@ def getZtrIntent(self, organizationId: str, ztrIntentId: str): return self._session.get(metadata, resource) + def updateZtrIntent( + self, + organizationId: str, + ztrIntentId: str, + name: str, + enabled: bool, + rule: str, + endpointsA: list, + endpointsB: list, + **kwargs, + ): + """ + **Replaces an organization-scoped intent's mutable fields** + https://developer.cisco.com/meraki/api-v1/#!update-ztr-intent + + - organizationId (string): Organization ID + - ztrIntentId (string): Ztr intent ID + - name (string): Non-empty display name of the intent. + - enabled (boolean): Required enabled state. `true` includes the intent in routing; + `false` excludes it and routing changes request cleanup. + - rule (string): Required routing rule. + + - `ALLOW` — Allows selected endpoint prefixes. + - `DENY` — Currently produces the same routing output as `ALLOW`. + - endpointsA (array): Non-empty replacement of side A; at most one tag selector. Ordering does not affect routing. + - endpointsB (array): Non-empty replacement of side B; at most one tag selector. Ordering does not affect routing. + - description (string): Intent explanation; omission or null clears it, while an empty string is stored as given. + """ + + kwargs.update(locals()) + + if "rule" in kwargs: + options = ["ALLOW", "DENY"] + assert kwargs["rule"] in options, f'''"rule" cannot be "{kwargs["rule"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["organizations", "configure", "mcf", "ztrIntents"], + "operation": "updateZtrIntent", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + ztrIntentId = urllib.parse.quote(str(ztrIntentId), safe="") + resource = f"/organizations/{organizationId}/mcf/ztrIntents/{ztrIntentId}" + + body_params = [ + "name", + "description", + "enabled", + "rule", + "endpointsA", + "endpointsB", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning(f"updateZtrIntent: ignoring unrecognized kwargs: {invalid}") + + return self._session.put(metadata, resource, payload) + def deleteZtrIntent(self, organizationId: str, ztrIntentId: str): """ **Transitions the organization-scoped intent to `PENDING_DELETE` and then diff --git a/meraki/api/spaces.py b/meraki/api/spaces.py index 351cc76..76e9bd3 100644 --- a/meraki/api/spaces.py +++ b/meraki/api/spaces.py @@ -107,7 +107,7 @@ def updateNetworkSpacesSitesBuilding(self, networkId: str, buildingId: str, **kw def deleteNetworkSpacesSitesBuilding(self, networkId: str, buildingId: str): """ - **Delete a building** + **Delete a building and all floors assigned to it.** https://developer.cisco.com/meraki/api-v1/#!delete-network-spaces-sites-building - networkId (string): Network ID diff --git a/meraki/api/wireless.py b/meraki/api/wireless.py index 678cc93..e55f8a7 100644 --- a/meraki/api/wireless.py +++ b/meraki/api/wireless.py @@ -650,7 +650,7 @@ def updateNetworkWirelessAirMarshalRule(self, networkId: str, ruleId: str, **kwa def deleteNetworkWirelessAirMarshalRule(self, networkId: str, ruleId: str): """ - **Delete an Air Marshal rule.** + **Delete an Air Marshal rule** https://developer.cisco.com/meraki/api-v1/#!delete-network-wireless-air-marshal-rule - networkId (string): Network ID @@ -842,6 +842,7 @@ def updateNetworkWirelessBluetoothSettings(self, networkId: str, **kwargs): - 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. + - sensorConnect (object): Sensor Connect related settings. """ kwargs.update(locals()) @@ -867,6 +868,7 @@ def updateNetworkWirelessBluetoothSettings(self, networkId: str, **kwargs): "major", "minor", "transmit", + "sensorConnect", ] payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} @@ -2932,6 +2934,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - wpaEncryptionMode (string): The types of WPA encryption. ('WPA1 only', 'WPA1 and WPA2', 'WPA2 only', 'WPA3 Transition Mode', 'WPA3 only' or 'WPA3 192-bit Security') - dot11w (object): The current setting for Protected Management Frames (802.11w). - dot11r (object): The current setting for 802.11r + - dot11k (object): The current setting for 802.11k - splashPage (string): The type of splash page for the SSID ('None', 'Click-through splash page', 'Billing', 'Password-protected with Meraki RADIUS', 'Password-protected with custom RADIUS', 'Password-protected with Active Directory', 'Password-protected with LDAP', 'SMS authentication', 'Systems Manager Sentry', 'Facebook Wi-Fi', 'Google OAuth', 'Microsoft Entra ID', 'Sponsored guest' or 'Cisco ISE').This attribute is not supported for template children. - splashGuestSponsorDomains (array): Array of valid sponsor email domains for sponsored guest splash type. - oauth (object): The OAuth settings of this SSID. Only valid if splashPage is 'Google OAuth'. @@ -3085,6 +3088,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): "wpaEncryptionMode", "dot11w", "dot11r", + "dot11k", "splashPage", "splashGuestSponsorDomains", "oauth", @@ -5885,12 +5889,12 @@ def getOrganizationAssuranceWirelessExperienceMostImpactedXMs(self, organization return self._session.get(metadata, resource, params) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetwork( self, organizationId: str, total_pages=1, direction="next", **kwargs ): """ **Summarize wireless connection counts by network** - https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connects-by-network + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-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 @@ -5910,11 +5914,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork( kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "experience", "successfulConnects", "byNetwork"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork", + "tags": ["wireless", "monitor", "experience", "successfulConnections", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork" query_params = [ "networkIds", @@ -5946,17 +5950,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetwork( invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByBand( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connections-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 @@ -5976,11 +5980,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand( kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "byBand"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "byBand"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByBand", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byBand" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byBand" query_params = [ "networkIds", @@ -6012,17 +6016,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByBand( invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByBand: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClient( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClient( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-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 @@ -6042,11 +6046,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClien kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "byClient"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClient", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "byClient"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClient", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byClient" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byClient" query_params = [ "networkIds", @@ -6078,17 +6082,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClien invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClient: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientOs( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClientOs( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-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 @@ -6108,11 +6112,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClien kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "byClientOs"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientOs", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "byClientOs"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClientOs", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byClientOs" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byClientOs" query_params = [ "networkIds", @@ -6144,17 +6148,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClien invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClientOs: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientType( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClientType( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connections-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 @@ -6174,11 +6178,13 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClien kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "byClientType"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClientType", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "byClientType"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClientType", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byClientType" + resource = ( + f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byClientType" + ) query_params = [ "networkIds", @@ -6210,17 +6216,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByClien invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByClientType: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevice( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByDevice( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-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 @@ -6240,11 +6246,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevic kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "byDevice"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevice", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "byDevice"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByDevice", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byDevice" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byDevice" query_params = [ "networkIds", @@ -6276,17 +6282,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByDevic invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByDevice: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInterval( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByInterval( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connections-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 @@ -6307,11 +6313,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInter kwargs.update(locals()) metadata = { - "tags": ["wireless", "monitor", "experience", "successfulConnects", "byNetwork", "byInterval"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInterval", + "tags": ["wireless", "monitor", "experience", "successfulConnections", "byNetwork", "byInterval"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByInterval", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byInterval" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byInterval" query_params = [ "networkIds", @@ -6344,17 +6350,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByInter invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByInterval: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServer( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByServer( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connections-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 @@ -6374,11 +6380,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServe kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "byServer"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServer", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "byServer"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByServer", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/byServer" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/byServer" query_params = [ "networkIds", @@ -6410,17 +6416,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkByServe invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkByServer: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkBySsid( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connections-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 @@ -6440,11 +6446,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid( kwargs.update(locals()) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "byNetwork", "bySsid"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid", + "tags": ["wireless", "configure", "experience", "successfulConnections", "byNetwork", "bySsid"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkBySsid", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/byNetwork/bySsid" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/byNetwork/bySsid" query_params = [ "networkIds", @@ -6476,17 +6482,17 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsByNetworkBySsid( invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsByNetworkBySsid: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) - def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwork( + def getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsInsightsByNetwork( 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 + https://developer.cisco.com/meraki/api-v1/#!get-organization-assurance-wireless-experience-successful-connections-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 @@ -6520,11 +6526,11 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwor ) metadata = { - "tags": ["wireless", "configure", "experience", "successfulConnects", "insights", "byNetwork"], - "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwork", + "tags": ["wireless", "configure", "experience", "successfulConnections", "insights", "byNetwork"], + "operation": "getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsInsightsByNetwork", } organizationId = urllib.parse.quote(str(organizationId), safe="") - resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnects/insights/byNetwork" + resource = f"/organizations/{organizationId}/assurance/wireless/experience/successfulConnections/insights/byNetwork" query_params = [ "networkIds", @@ -6559,7 +6565,7 @@ def getOrganizationAssuranceWirelessExperienceSuccessfulConnectsInsightsByNetwor invalid = [k for 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}" + f"getOrganizationAssuranceWirelessExperienceSuccessfulConnectionsInsightsByNetwork: ignoring unrecognized kwargs: {invalid}" ) return self._session.get_pages(metadata, resource, params, total_pages, direction) @@ -8133,6 +8139,63 @@ def getOrganizationWirelessDevicesAccelerometerStatuses( return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationWirelessDevicesAntennasExternalByDevice( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List last-known external antenna detections by device and radio for outdoor CW9163E and CW9177E access points** + https://developer.cisco.com/meraki/api-v1/#!get-organization-wireless-devices-antennas-external-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 exact-match network IDs. Values match with OR; different filters combine with AND. An omitted or empty array does not restrict results. Applied before pagination and counts; inaccessible devices and networks are excluded. Use repeated bracket keys, for example networkIds[]=N_1234. Maximum 100 items. + - serials (array): Optional exact-match device serials. Values match with OR; different filters combine with AND. An omitted or empty array does not restrict results. Applied before pagination and counts; inaccessible devices and networks are excluded. Use repeated bracket keys, for example serials[]=Q2XX-XXXX-XXXX. Maximum 100 items. + - models (array): Optional exact-match Dashboard model identifiers (CW9163E, CW9177E). Values match with OR; different filters combine with AND. An omitted or empty array does not restrict results. Applied before pagination and counts; inaccessible devices and networks are excluded. Use repeated bracket keys, for example models[]=CW9163E. Maximum 100 items. + - 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", "devices", "antennas", "external", "byDevice"], + "operation": "getOrganizationWirelessDevicesAntennasExternalByDevice", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/wireless/devices/antennas/external/byDevice" + + query_params = [ + "networkIds", + "serials", + "models", + "perPage", + "startingAfter", + "endingBefore", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "serials", + "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"getOrganizationWirelessDevicesAntennasExternalByDevice: 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 ): diff --git a/pyproject.toml b/pyproject.toml index acf38d7..4ad0e45 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "meraki" -version = "4.6.1b1" +version = "4.6.1b2" description = "Cisco Meraki Dashboard API library" authors = [ {name = "Cisco Meraki", email = "api-feedback@meraki.net"} diff --git a/uv.lock b/uv.lock index a9c542e..14dd6f9 100644 --- a/uv.lock +++ b/uv.lock @@ -591,7 +591,7 @@ wheels = [ [[package]] name = "meraki" -version = "4.6.1b1" +version = "4.6.1b2" source = { editable = "." } dependencies = [ { name = "aiohttp" },