From 3e0f282498f7bb19d717a7063e5937244103c4db Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 14 Oct 2026 14:20:07 +0000 Subject: [PATCH] Auto-generated library v4.6.0b1 for API v1.75.0-beta.1. --- docs/generation-report.md | 6 ++ meraki/__init__.py | 2 +- meraki/_version.py | 2 +- meraki/aio/api/appliance.py | 158 ++++++++++++++++++++++++++++++ meraki/aio/api/campusGateway.py | 4 +- meraki/aio/api/devices.py | 62 ++++++++++++ meraki/aio/api/organizations.py | 4 + meraki/aio/api/wireless.py | 2 +- meraki/api/appliance.py | 158 ++++++++++++++++++++++++++++++ meraki/api/batch/appliance.py | 31 ++++++ meraki/api/batch/campusGateway.py | 4 +- meraki/api/batch/devices.py | 37 +++++++ meraki/api/batch/organizations.py | 4 + meraki/api/batch/wireless.py | 2 +- meraki/api/campusGateway.py | 4 +- meraki/api/devices.py | 62 ++++++++++++ meraki/api/organizations.py | 4 + meraki/api/wireless.py | 2 +- pyproject.toml | 2 +- uv.lock | 4 +- 20 files changed, 540 insertions(+), 14 deletions(-) diff --git a/docs/generation-report.md b/docs/generation-report.md index feb0f7e..3a3eac9 100644 --- a/docs/generation-report.md +++ b/docs/generation-report.md @@ -1,5 +1,11 @@ # Generation Report +## 2026-10-14 | Library v4.6.0b1 | API 1.75.0-beta.1 + + +No Python keyword parameter conflicts detected. + + ## 2026-10-07 | Library v4.6.0b0 | API 1.75.0-beta.0 diff --git a/meraki/__init__.py b/meraki/__init__.py index 2ecdcfc..9a78f30 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.0-beta.0" +__api_version__ = "1.75.0-beta.1" __all__ = [ "APIError", diff --git a/meraki/_version.py b/meraki/_version.py index bdf65f2..1a15616 100644 --- a/meraki/_version.py +++ b/meraki/_version.py @@ -1 +1 @@ -__version__ = "4.6.0b0" +__version__ = "4.6.0b1" diff --git a/meraki/aio/api/appliance.py b/meraki/aio/api/appliance.py index 013f1cb..2668903 100644 --- a/meraki/aio/api/appliance.py +++ b/meraki/aio/api/appliance.py @@ -1155,6 +1155,7 @@ def createNetworkApplianceInterfacesL3(self, networkId: str, ipv4: dict, **kwarg - networkId (string): Network ID - ipv4 (object): IPv4 configuration + - name (string): User-friendly name for the L3 interface - port (object): Port configuration - vrf (object): VRF assignment for the L3 interface """ @@ -1169,6 +1170,7 @@ def createNetworkApplianceInterfacesL3(self, networkId: str, ipv4: dict, **kwarg resource = f"/networks/{networkId}/appliance/interfaces/l3" body_params = [ + "name", "port", "ipv4", "vrf", @@ -1190,6 +1192,7 @@ def updateNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str, * - networkId (string): Network ID - interfaceId (string): Interface ID + - name (string): User-friendly name for the L3 interface - port (object): Port configuration. Set to null to remove the port association. - ipv4 (object): IPv4 configuration - vrf (object): VRF assignment for the L3 interface @@ -1206,6 +1209,7 @@ def updateNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str, * resource = f"/networks/{networkId}/appliance/interfaces/l3/{interfaceId}" body_params = [ + "name", "port", "ipv4", "vrf", @@ -1765,6 +1769,41 @@ def getNetworkApplianceSecurityEvents(self, networkId: str, total_pages=1, direc return self._session.get_pages(metadata, resource, params, total_pages, direction) + def updateNetworkApplianceSecurityHttpsInspection(self, networkId: str, enabled: bool, **kwargs): + """ + **Update HTTPS inspection configuration for a network.** + https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-security-https-inspection + + - networkId (string): Network ID + - enabled (boolean): Whether HTTPS inspection is enabled. + - allowLists (object): Allow lists for HTTPS inspection exclusions. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "security", "httpsInspection"], + "operation": "updateNetworkApplianceSecurityHttpsInspection", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/security/httpsInspection" + + body_params = [ + "enabled", + "allowLists", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"updateNetworkApplianceSecurityHttpsInspection: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + def getNetworkApplianceSecurityIntrusion(self, networkId: str): """ **Returns all supported intrusion settings for an MX network** @@ -4738,6 +4777,57 @@ def getOrganizationApplianceSecurityEvents(self, organizationId: str, total_page return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceSecurityHttpsInspectionByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List HTTPS inspection status and configuration for appliances in the organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-security-https-inspection-by-network + + - organizationId (string): Organization ID + - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages + - direction (string): direction to paginate, either "next" (default) or "prev" page + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 100. + - startingAfter (string): A token used by the server to indicate the start of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - endingBefore (string): A token used by the server to indicate the end of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - networkIds (array): A list of network IDs. The returned list will be filtered to only include these networks. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "security", "httpsInspection", "byNetwork"], + "operation": "getOrganizationApplianceSecurityHttpsInspectionByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/security/httpsInspection/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) + + if self._session._validate_kwargs: + all_params = query_params + array_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"getOrganizationApplianceSecurityHttpsInspectionByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def httpsiOrganizationApplianceSecurity(self, organizationId: str): """ **Retrieve the HTTPS Inspection state for all security appliances in an organization.** @@ -6223,6 +6313,74 @@ def updateOrganizationApplianceVpnSiteToSiteIpsecPeersSlas(self, organizationId: return self._session.put(metadata, resource, payload) + def getOrganizationApplianceVpnSiteToSiteVpnPerformanceByTunnelByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns Site-to-site VPN stats (loss, latency, jitter, MOS) for all VPN connections in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-site-to-site-vpn-performance-by-tunnel-by-interval + + - organizationId (string): Organization ID + - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages + - direction (string): direction to paginate, either "next" (default) or "prev" page + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 600, 3600, 7200, 14400, 21600, 43200, 86400. The default is 3600. Interval is calculated if time params are provided. + - perPage (integer): The number of entries per page returned. Acceptable range is 1000 - 10000. Default is 5000. + - startingAfter (string): A token used by the server to indicate the start of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - endingBefore (string): A token used by the server to indicate the end of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - networkIds (array): Filter results by network + - peerNetworkIds (array): Filter results by peer network + - interfaces (array): Filter results by uplink interface + - peerInterfaces (array): Filter results by peer uplink interface + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "vpn", "siteToSiteVpn", "performance", "byTunnel", "byInterval"], + "operation": "getOrganizationApplianceVpnSiteToSiteVpnPerformanceByTunnelByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vpn/siteToSiteVpn/performance/byTunnel/byInterval" + + query_params = [ + "t0", + "t1", + "timespan", + "interval", + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "peerNetworkIds", + "interfaces", + "peerInterfaces", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "peerNetworkIds", + "interfaces", + "peerInterfaces", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) + + if self._session._validate_kwargs: + all_params = query_params + array_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"getOrganizationApplianceVpnSiteToSiteVpnPerformanceByTunnelByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceVpnStats(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Show VPN history stats for networks in an organization** diff --git a/meraki/aio/api/campusGateway.py b/meraki/aio/api/campusGateway.py index a85a43c..2c95e66 100644 --- a/meraki/aio/api/campusGateway.py +++ b/meraki/aio/api/campusGateway.py @@ -1117,7 +1117,7 @@ def createOrganizationCampusGatewayMdnsServicesCustom(self, organizationId: str, https://developer.cisco.com/meraki/api-v1/#!create-organization-campus-gateway-mdns-services-custom - organizationId (string): Organization ID - - name (string): Display name of the custom mDNS service. + - name (string): Display name; unique ignoring case across the organization and its networks. - types (array): DNS-SD service types. Accepted shorthand is normalized by the API. """ @@ -1153,7 +1153,7 @@ def updateOrganizationCampusGatewayMdnsServicesCustom(self, organizationId: str, - organizationId (string): Organization ID - key (string): Key - - name (string): Updated display name of the custom mDNS service. + - name (string): Display name; unique ignoring case across the organization and its networks. - types (array): Replacement ordered list of DNS-SD service types. """ diff --git a/meraki/aio/api/devices.py b/meraki/aio/api/devices.py index 7ac3395..d37d0b7 100644 --- a/meraki/aio/api/devices.py +++ b/meraki/aio/api/devices.py @@ -1052,6 +1052,68 @@ def getDeviceLiveToolsReboot(self, serial: str, rebootId: str): return self._session.get(metadata, resource) + def createDeviceLiveToolsRouteDetail(self, serial: str, type: str, vrf: dict, destination: dict, nextHop: dict, **kwargs): + """ + **Enqueue a live tool job to fetch route details from a device.** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-route-detail + + - serial (string): Serial + - type (string): The type of the route provided. The only supported value for now is 'BGP'. + - vrf (object): The route VRF to inspect. + - destination (object): The destination of the route provided + - nextHop (object): The next-hop-IP of the route provided. + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = ["BGP"] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["devices", "liveTools", "route", "details"], + "operation": "createDeviceLiveToolsRouteDetail", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/route/details" + + body_params = [ + "type", + "vrf", + "destination", + "nextHop", + "callback", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning(f"createDeviceLiveToolsRouteDetail: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsRouteDetail(self, serial: str, jobId: str): + """ + **Return a route details live tool job for a device.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-route-detail + + - serial (string): Serial + - jobId (string): Job ID + """ + + metadata = { + "tags": ["devices", "liveTools", "route", "details"], + "operation": "getDeviceLiveToolsRouteDetail", + } + serial = urllib.parse.quote(str(serial), safe="") + jobId = urllib.parse.quote(str(jobId), safe="") + resource = f"/devices/{serial}/liveTools/route/details/{jobId}" + + return self._session.get(metadata, resource) + def createDeviceLiveToolsRoutingTable(self, serial: str, **kwargs): """ **Enqueue a job to perform a routing table request for the device** diff --git a/meraki/aio/api/organizations.py b/meraki/aio/api/organizations.py index d7d6f59..ac96eaf 100644 --- a/meraki/aio/api/organizations.py +++ b/meraki/aio/api/organizations.py @@ -12294,6 +12294,7 @@ def createOrganizationPoliciesGlobalFirewallRulesetsRule( - enabled (boolean): Whether the rule is enabled - priority (integer): Rule priority (lower numbers = higher priority) - description (string): Description of the firewall rule + - logging (object): Logging settings for the rule """ kwargs.update(locals()) @@ -12318,6 +12319,7 @@ def createOrganizationPoliciesGlobalFirewallRulesetsRule( "enabled", "priority", "description", + "logging", "sources", "destinations", ] @@ -12419,6 +12421,7 @@ def updateOrganizationPoliciesGlobalFirewallRulesetsRule(self, organizationId: s - enabled (boolean): Whether the rule is enabled - priority (integer): Rule priority (lower numbers = higher priority) - description (string): Description of the firewall rule + - logging (object): Logging settings for the rule - sources (object): Source traffic criteria. Each source or destination bloc is capped separately per rule at 100 total segment values. The count is segments_values_count: the sum of all values across every segment type in that bloc. Ports use a separate cap of 100. - destinations (object): Destination traffic criteria. Each source or destination bloc is capped separately per rule at 100 total segment values. The count is segments_values_count: the sum of all values across every segment type in that bloc. Ports use a separate cap of 100. """ @@ -12446,6 +12449,7 @@ def updateOrganizationPoliciesGlobalFirewallRulesetsRule(self, organizationId: s "enabled", "priority", "description", + "logging", "sources", "destinations", ] diff --git a/meraki/aio/api/wireless.py b/meraki/aio/api/wireless.py index f868f66..834044d 100644 --- a/meraki/aio/api/wireless.py +++ b/meraki/aio/api/wireless.py @@ -2942,7 +2942,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - radiusProxyEnabled (boolean): If true, Meraki devices will proxy RADIUS messages through the Meraki cloud to the configured RADIUS auth and accounting servers. - radiusTestingEnabled (boolean): If true, Meraki devices will periodically send Access-Request messages to configured RADIUS servers using identity 'meraki_8021x_test' to ensure that the RADIUS servers are reachable. - radiusCalledStationId (string): The template of the called station identifier to be used for RADIUS (ex. $NODE_MAC$:$VAP_NUM$). - - radiusAuthenticationNasId (string): The template of the NAS identifier to be used for RADIUS authentication (ex. $NODE_MAC$:$VAP_NUM$). + - radiusAuthenticationNasId (string): The NAS identifier to use for RADIUS authentication. With 802.11r enabled or adaptive, custom text is available only to organizations enabled for this feature; otherwise, use only $NODE_MAC$, $VAP_NUM$, and $VAP_NAME$. When this feature is enabled, the complete rendered NAS identifier must be 1–48 bytes. - radiusServerTimeout (integer): The amount of time for which a RADIUS client waits for a reply from the RADIUS server (must be between 1-10 seconds). - radiusServerAttemptsLimit (integer): The maximum number of transmit attempts after which a RADIUS server is failed over (must be between 1-5). - radiusFallbackEnabled (boolean): Whether or not higher priority RADIUS servers should be retried after 60 seconds. diff --git a/meraki/api/appliance.py b/meraki/api/appliance.py index 817160b..e207aad 100644 --- a/meraki/api/appliance.py +++ b/meraki/api/appliance.py @@ -1155,6 +1155,7 @@ def createNetworkApplianceInterfacesL3(self, networkId: str, ipv4: dict, **kwarg - networkId (string): Network ID - ipv4 (object): IPv4 configuration + - name (string): User-friendly name for the L3 interface - port (object): Port configuration - vrf (object): VRF assignment for the L3 interface """ @@ -1169,6 +1170,7 @@ def createNetworkApplianceInterfacesL3(self, networkId: str, ipv4: dict, **kwarg resource = f"/networks/{networkId}/appliance/interfaces/l3" body_params = [ + "name", "port", "ipv4", "vrf", @@ -1190,6 +1192,7 @@ def updateNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str, * - networkId (string): Network ID - interfaceId (string): Interface ID + - name (string): User-friendly name for the L3 interface - port (object): Port configuration. Set to null to remove the port association. - ipv4 (object): IPv4 configuration - vrf (object): VRF assignment for the L3 interface @@ -1206,6 +1209,7 @@ def updateNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str, * resource = f"/networks/{networkId}/appliance/interfaces/l3/{interfaceId}" body_params = [ + "name", "port", "ipv4", "vrf", @@ -1765,6 +1769,41 @@ def getNetworkApplianceSecurityEvents(self, networkId: str, total_pages=1, direc return self._session.get_pages(metadata, resource, params, total_pages, direction) + def updateNetworkApplianceSecurityHttpsInspection(self, networkId: str, enabled: bool, **kwargs): + """ + **Update HTTPS inspection configuration for a network.** + https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-security-https-inspection + + - networkId (string): Network ID + - enabled (boolean): Whether HTTPS inspection is enabled. + - allowLists (object): Allow lists for HTTPS inspection exclusions. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "security", "httpsInspection"], + "operation": "updateNetworkApplianceSecurityHttpsInspection", + } + networkId = urllib.parse.quote(str(networkId), safe="") + resource = f"/networks/{networkId}/appliance/security/httpsInspection" + + body_params = [ + "enabled", + "allowLists", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"updateNetworkApplianceSecurityHttpsInspection: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.put(metadata, resource, payload) + def getNetworkApplianceSecurityIntrusion(self, networkId: str): """ **Returns all supported intrusion settings for an MX network** @@ -4738,6 +4777,57 @@ def getOrganizationApplianceSecurityEvents(self, organizationId: str, total_page return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceSecurityHttpsInspectionByNetwork( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **List HTTPS inspection status and configuration for appliances in the organization.** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-security-https-inspection-by-network + + - organizationId (string): Organization ID + - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages + - direction (string): direction to paginate, either "next" (default) or "prev" page + - perPage (integer): The number of entries per page returned. Acceptable range is 3 - 1000. Default is 100. + - startingAfter (string): A token used by the server to indicate the start of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - endingBefore (string): A token used by the server to indicate the end of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - networkIds (array): A list of network IDs. The returned list will be filtered to only include these networks. + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "configure", "security", "httpsInspection", "byNetwork"], + "operation": "getOrganizationApplianceSecurityHttpsInspectionByNetwork", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/security/httpsInspection/byNetwork" + + query_params = [ + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) + + if self._session._validate_kwargs: + all_params = query_params + array_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"getOrganizationApplianceSecurityHttpsInspectionByNetwork: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def httpsiOrganizationApplianceSecurity(self, organizationId: str): """ **Retrieve the HTTPS Inspection state for all security appliances in an organization.** @@ -6223,6 +6313,74 @@ def updateOrganizationApplianceVpnSiteToSiteIpsecPeersSlas(self, organizationId: return self._session.put(metadata, resource, payload) + def getOrganizationApplianceVpnSiteToSiteVpnPerformanceByTunnelByInterval( + self, organizationId: str, total_pages=1, direction="next", **kwargs + ): + """ + **Returns Site-to-site VPN stats (loss, latency, jitter, MOS) for all VPN connections in an organization** + https://developer.cisco.com/meraki/api-v1/#!get-organization-appliance-vpn-site-to-site-vpn-performance-by-tunnel-by-interval + + - organizationId (string): Organization ID + - total_pages (integer or string): use with perPage to get total results up to total_pages*perPage; -1 or "all" for all pages + - direction (string): direction to paginate, either "next" (default) or "prev" page + - t0 (string): The beginning of the timespan for the data. The maximum lookback period is 31 days from today. + - t1 (string): The end of the timespan for the data. t1 can be a maximum of 7 days after t0. + - timespan (number): The timespan for which the information will be fetched. If specifying timespan, do not specify parameters t0 and t1. The value must be in seconds and be less than or equal to 7 days. The default is 1 day. If interval is provided, the timespan will be autocalculated. + - interval (integer): The time interval in seconds for returned data. The valid intervals are: 600, 3600, 7200, 14400, 21600, 43200, 86400. The default is 3600. Interval is calculated if time params are provided. + - perPage (integer): The number of entries per page returned. Acceptable range is 1000 - 10000. Default is 5000. + - startingAfter (string): A token used by the server to indicate the start of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - endingBefore (string): A token used by the server to indicate the end of the page. Often this is a timestamp or an ID but it is not limited to those. This parameter should not be defined by client applications. The link for the first, last, prev, or next page in the HTTP Link header should define it. + - networkIds (array): Filter results by network + - peerNetworkIds (array): Filter results by peer network + - interfaces (array): Filter results by uplink interface + - peerInterfaces (array): Filter results by peer uplink interface + """ + + kwargs.update(locals()) + + metadata = { + "tags": ["appliance", "monitor", "vpn", "siteToSiteVpn", "performance", "byTunnel", "byInterval"], + "operation": "getOrganizationApplianceVpnSiteToSiteVpnPerformanceByTunnelByInterval", + } + organizationId = urllib.parse.quote(str(organizationId), safe="") + resource = f"/organizations/{organizationId}/appliance/vpn/siteToSiteVpn/performance/byTunnel/byInterval" + + query_params = [ + "t0", + "t1", + "timespan", + "interval", + "perPage", + "startingAfter", + "endingBefore", + "networkIds", + "peerNetworkIds", + "interfaces", + "peerInterfaces", + ] + params = {k.strip(): v for k, v in kwargs.items() if k.strip() in query_params} + + array_params = [ + "networkIds", + "peerNetworkIds", + "interfaces", + "peerInterfaces", + ] + for k, v in kwargs.items(): + if k.strip() in array_params: + params[f"{k.strip()}[]"] = kwargs[f"{k}"] + params.pop(k.strip()) + + if self._session._validate_kwargs: + all_params = query_params + array_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning( + f"getOrganizationApplianceVpnSiteToSiteVpnPerformanceByTunnelByInterval: ignoring unrecognized kwargs: {invalid}" + ) + + return self._session.get_pages(metadata, resource, params, total_pages, direction) + def getOrganizationApplianceVpnStats(self, organizationId: str, total_pages=1, direction="next", **kwargs): """ **Show VPN history stats for networks in an organization** diff --git a/meraki/api/batch/appliance.py b/meraki/api/batch/appliance.py index 86aaf31..1d61e1f 100644 --- a/meraki/api/batch/appliance.py +++ b/meraki/api/batch/appliance.py @@ -306,6 +306,7 @@ def createNetworkApplianceInterfacesL3(self, networkId: str, ipv4: dict, **kwarg - networkId (string): Network ID - ipv4 (object): IPv4 configuration + - name (string): User-friendly name for the L3 interface - port (object): Port configuration - vrf (object): VRF assignment for the L3 interface """ @@ -316,6 +317,7 @@ def createNetworkApplianceInterfacesL3(self, networkId: str, ipv4: dict, **kwarg resource = f"/networks/{networkId}/appliance/interfaces/l3" body_params = [ + "name", "port", "ipv4", "vrf", @@ -335,6 +337,7 @@ def updateNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str, * - networkId (string): Network ID - interfaceId (string): Interface ID + - name (string): User-friendly name for the L3 interface - port (object): Port configuration. Set to null to remove the port association. - ipv4 (object): IPv4 configuration - vrf (object): VRF assignment for the L3 interface @@ -347,6 +350,7 @@ def updateNetworkApplianceInterfacesL3(self, networkId: str, interfaceId: str, * resource = f"/networks/{networkId}/appliance/interfaces/l3/{interfaceId}" body_params = [ + "name", "port", "ipv4", "vrf", @@ -687,6 +691,33 @@ def updateNetworkApplianceSdwanInternetPolicies(self, networkId: str, **kwargs): } return action + def updateNetworkApplianceSecurityHttpsInspection(self, networkId: str, enabled: bool, **kwargs): + """ + **Update HTTPS inspection configuration for a network.** + https://developer.cisco.com/meraki/api-v1/#!update-network-appliance-security-https-inspection + + - networkId (string): Network ID + - enabled (boolean): Whether HTTPS inspection is enabled. + - allowLists (object): Allow lists for HTTPS inspection exclusions. + """ + + kwargs.update(locals()) + + networkId = urllib.parse.quote(networkId, safe="") + resource = f"/networks/{networkId}/appliance/security/httpsInspection" + + body_params = [ + "enabled", + "allowLists", + ] + 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 updateNetworkApplianceSettings(self, networkId: str, **kwargs): """ **Update the appliance settings for a network** diff --git a/meraki/api/batch/campusGateway.py b/meraki/api/batch/campusGateway.py index 54ccee7..1c05041 100644 --- a/meraki/api/batch/campusGateway.py +++ b/meraki/api/batch/campusGateway.py @@ -216,7 +216,7 @@ def createOrganizationCampusGatewayMdnsServicesCustom(self, organizationId: str, https://developer.cisco.com/meraki/api-v1/#!create-organization-campus-gateway-mdns-services-custom - organizationId (string): Organization ID - - name (string): Display name of the custom mDNS service. + - name (string): Display name; unique ignoring case across the organization and its networks. - types (array): DNS-SD service types. Accepted shorthand is normalized by the API. """ @@ -244,7 +244,7 @@ def updateOrganizationCampusGatewayMdnsServicesCustom(self, organizationId: str, - organizationId (string): Organization ID - key (string): Key - - name (string): Updated display name of the custom mDNS service. + - name (string): Display name; unique ignoring case across the organization and its networks. - types (array): Replacement ordered list of DNS-SD service types. """ diff --git a/meraki/api/batch/devices.py b/meraki/api/batch/devices.py index 0911270..6337b7a 100644 --- a/meraki/api/batch/devices.py +++ b/meraki/api/batch/devices.py @@ -253,6 +253,43 @@ def createDeviceLiveToolsReboot(self, serial: str, **kwargs): } return action + def createDeviceLiveToolsRouteDetail(self, serial: str, type: str, vrf: dict, destination: dict, nextHop: dict, **kwargs): + """ + **Enqueue a live tool job to fetch route details from a device.** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-route-detail + + - serial (string): Serial + - type (string): The type of the route provided. The only supported value for now is 'BGP'. + - vrf (object): The route VRF to inspect. + - destination (object): The destination of the route provided + - nextHop (object): The next-hop-IP of the route provided. + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = ["BGP"] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + + serial = urllib.parse.quote(serial, safe="") + resource = f"/devices/{serial}/liveTools/route/details" + + body_params = [ + "type", + "vrf", + "destination", + "nextHop", + "callback", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + action = { + "resource": resource, + "operation": "details", + "body": payload, + } + return action + def createDeviceLiveToolsRoutingTableLookup(self, serial: str, **kwargs): """ **Enqueue a job to perform a routing table lookup request for a device. The routing table lookup request fetches a specific set of routes based on filters. Any combination of search filters can be applied. Only Cisco Secure Routers are supported.** diff --git a/meraki/api/batch/organizations.py b/meraki/api/batch/organizations.py index 959c550..c80259a 100644 --- a/meraki/api/batch/organizations.py +++ b/meraki/api/batch/organizations.py @@ -2794,6 +2794,7 @@ def createOrganizationPoliciesGlobalFirewallRulesetsRule( - enabled (boolean): Whether the rule is enabled - priority (integer): Rule priority (lower numbers = higher priority) - description (string): Description of the firewall rule + - logging (object): Logging settings for the rule """ kwargs.update(locals()) @@ -2814,6 +2815,7 @@ def createOrganizationPoliciesGlobalFirewallRulesetsRule( "enabled", "priority", "description", + "logging", "sources", "destinations", ] @@ -2857,6 +2859,7 @@ def updateOrganizationPoliciesGlobalFirewallRulesetsRule(self, organizationId: s - enabled (boolean): Whether the rule is enabled - priority (integer): Rule priority (lower numbers = higher priority) - description (string): Description of the firewall rule + - logging (object): Logging settings for the rule - sources (object): Source traffic criteria. Each source or destination bloc is capped separately per rule at 100 total segment values. The count is segments_values_count: the sum of all values across every segment type in that bloc. Ports use a separate cap of 100. - destinations (object): Destination traffic criteria. Each source or destination bloc is capped separately per rule at 100 total segment values. The count is segments_values_count: the sum of all values across every segment type in that bloc. Ports use a separate cap of 100. """ @@ -2880,6 +2883,7 @@ def updateOrganizationPoliciesGlobalFirewallRulesetsRule(self, organizationId: s "enabled", "priority", "description", + "logging", "sources", "destinations", ] diff --git a/meraki/api/batch/wireless.py b/meraki/api/batch/wireless.py index 8647e08..73faeef 100644 --- a/meraki/api/batch/wireless.py +++ b/meraki/api/batch/wireless.py @@ -1073,7 +1073,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - radiusProxyEnabled (boolean): If true, Meraki devices will proxy RADIUS messages through the Meraki cloud to the configured RADIUS auth and accounting servers. - radiusTestingEnabled (boolean): If true, Meraki devices will periodically send Access-Request messages to configured RADIUS servers using identity 'meraki_8021x_test' to ensure that the RADIUS servers are reachable. - radiusCalledStationId (string): The template of the called station identifier to be used for RADIUS (ex. $NODE_MAC$:$VAP_NUM$). - - radiusAuthenticationNasId (string): The template of the NAS identifier to be used for RADIUS authentication (ex. $NODE_MAC$:$VAP_NUM$). + - radiusAuthenticationNasId (string): The NAS identifier to use for RADIUS authentication. With 802.11r enabled or adaptive, custom text is available only to organizations enabled for this feature; otherwise, use only $NODE_MAC$, $VAP_NUM$, and $VAP_NAME$. When this feature is enabled, the complete rendered NAS identifier must be 1–48 bytes. - radiusServerTimeout (integer): The amount of time for which a RADIUS client waits for a reply from the RADIUS server (must be between 1-10 seconds). - radiusServerAttemptsLimit (integer): The maximum number of transmit attempts after which a RADIUS server is failed over (must be between 1-5). - radiusFallbackEnabled (boolean): Whether or not higher priority RADIUS servers should be retried after 60 seconds. diff --git a/meraki/api/campusGateway.py b/meraki/api/campusGateway.py index 3c78dad..97eff32 100644 --- a/meraki/api/campusGateway.py +++ b/meraki/api/campusGateway.py @@ -1117,7 +1117,7 @@ def createOrganizationCampusGatewayMdnsServicesCustom(self, organizationId: str, https://developer.cisco.com/meraki/api-v1/#!create-organization-campus-gateway-mdns-services-custom - organizationId (string): Organization ID - - name (string): Display name of the custom mDNS service. + - name (string): Display name; unique ignoring case across the organization and its networks. - types (array): DNS-SD service types. Accepted shorthand is normalized by the API. """ @@ -1153,7 +1153,7 @@ def updateOrganizationCampusGatewayMdnsServicesCustom(self, organizationId: str, - organizationId (string): Organization ID - key (string): Key - - name (string): Updated display name of the custom mDNS service. + - name (string): Display name; unique ignoring case across the organization and its networks. - types (array): Replacement ordered list of DNS-SD service types. """ diff --git a/meraki/api/devices.py b/meraki/api/devices.py index e8264ef..338827c 100644 --- a/meraki/api/devices.py +++ b/meraki/api/devices.py @@ -1052,6 +1052,68 @@ def getDeviceLiveToolsReboot(self, serial: str, rebootId: str): return self._session.get(metadata, resource) + def createDeviceLiveToolsRouteDetail(self, serial: str, type: str, vrf: dict, destination: dict, nextHop: dict, **kwargs): + """ + **Enqueue a live tool job to fetch route details from a device.** + https://developer.cisco.com/meraki/api-v1/#!create-device-live-tools-route-detail + + - serial (string): Serial + - type (string): The type of the route provided. The only supported value for now is 'BGP'. + - vrf (object): The route VRF to inspect. + - destination (object): The destination of the route provided + - nextHop (object): The next-hop-IP of the route provided. + - callback (object): Details for the callback. Please include either an httpServerId OR url and sharedSecret + """ + + kwargs.update(locals()) + + if "type" in kwargs: + options = ["BGP"] + assert kwargs["type"] in options, f'''"type" cannot be "{kwargs["type"]}", & must be set to one of: {options}''' + + metadata = { + "tags": ["devices", "liveTools", "route", "details"], + "operation": "createDeviceLiveToolsRouteDetail", + } + serial = urllib.parse.quote(str(serial), safe="") + resource = f"/devices/{serial}/liveTools/route/details" + + body_params = [ + "type", + "vrf", + "destination", + "nextHop", + "callback", + ] + payload = {k.strip(): v for k, v in kwargs.items() if k.strip() in body_params} + + if self._session._validate_kwargs: + all_params = [] + body_params + invalid = [k for k in kwargs if k.strip() not in all_params and k != "self"] + if invalid and self._session._logger: + self._session._logger.warning(f"createDeviceLiveToolsRouteDetail: ignoring unrecognized kwargs: {invalid}") + + return self._session.post(metadata, resource, payload) + + def getDeviceLiveToolsRouteDetail(self, serial: str, jobId: str): + """ + **Return a route details live tool job for a device.** + https://developer.cisco.com/meraki/api-v1/#!get-device-live-tools-route-detail + + - serial (string): Serial + - jobId (string): Job ID + """ + + metadata = { + "tags": ["devices", "liveTools", "route", "details"], + "operation": "getDeviceLiveToolsRouteDetail", + } + serial = urllib.parse.quote(str(serial), safe="") + jobId = urllib.parse.quote(str(jobId), safe="") + resource = f"/devices/{serial}/liveTools/route/details/{jobId}" + + return self._session.get(metadata, resource) + def createDeviceLiveToolsRoutingTable(self, serial: str, **kwargs): """ **Enqueue a job to perform a routing table request for the device** diff --git a/meraki/api/organizations.py b/meraki/api/organizations.py index f1b3f79..83052e0 100644 --- a/meraki/api/organizations.py +++ b/meraki/api/organizations.py @@ -12294,6 +12294,7 @@ def createOrganizationPoliciesGlobalFirewallRulesetsRule( - enabled (boolean): Whether the rule is enabled - priority (integer): Rule priority (lower numbers = higher priority) - description (string): Description of the firewall rule + - logging (object): Logging settings for the rule """ kwargs.update(locals()) @@ -12318,6 +12319,7 @@ def createOrganizationPoliciesGlobalFirewallRulesetsRule( "enabled", "priority", "description", + "logging", "sources", "destinations", ] @@ -12419,6 +12421,7 @@ def updateOrganizationPoliciesGlobalFirewallRulesetsRule(self, organizationId: s - enabled (boolean): Whether the rule is enabled - priority (integer): Rule priority (lower numbers = higher priority) - description (string): Description of the firewall rule + - logging (object): Logging settings for the rule - sources (object): Source traffic criteria. Each source or destination bloc is capped separately per rule at 100 total segment values. The count is segments_values_count: the sum of all values across every segment type in that bloc. Ports use a separate cap of 100. - destinations (object): Destination traffic criteria. Each source or destination bloc is capped separately per rule at 100 total segment values. The count is segments_values_count: the sum of all values across every segment type in that bloc. Ports use a separate cap of 100. """ @@ -12446,6 +12449,7 @@ def updateOrganizationPoliciesGlobalFirewallRulesetsRule(self, organizationId: s "enabled", "priority", "description", + "logging", "sources", "destinations", ] diff --git a/meraki/api/wireless.py b/meraki/api/wireless.py index 3244d3e..1d92cab 100644 --- a/meraki/api/wireless.py +++ b/meraki/api/wireless.py @@ -2942,7 +2942,7 @@ def updateNetworkWirelessSsid(self, networkId: str, number: str, **kwargs): - radiusProxyEnabled (boolean): If true, Meraki devices will proxy RADIUS messages through the Meraki cloud to the configured RADIUS auth and accounting servers. - radiusTestingEnabled (boolean): If true, Meraki devices will periodically send Access-Request messages to configured RADIUS servers using identity 'meraki_8021x_test' to ensure that the RADIUS servers are reachable. - radiusCalledStationId (string): The template of the called station identifier to be used for RADIUS (ex. $NODE_MAC$:$VAP_NUM$). - - radiusAuthenticationNasId (string): The template of the NAS identifier to be used for RADIUS authentication (ex. $NODE_MAC$:$VAP_NUM$). + - radiusAuthenticationNasId (string): The NAS identifier to use for RADIUS authentication. With 802.11r enabled or adaptive, custom text is available only to organizations enabled for this feature; otherwise, use only $NODE_MAC$, $VAP_NUM$, and $VAP_NAME$. When this feature is enabled, the complete rendered NAS identifier must be 1–48 bytes. - radiusServerTimeout (integer): The amount of time for which a RADIUS client waits for a reply from the RADIUS server (must be between 1-10 seconds). - radiusServerAttemptsLimit (integer): The maximum number of transmit attempts after which a RADIUS server is failed over (must be between 1-5). - radiusFallbackEnabled (boolean): Whether or not higher priority RADIUS servers should be retried after 60 seconds. diff --git a/pyproject.toml b/pyproject.toml index 60b4f96..625caa7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "meraki" -version = "4.6.0b0" +version = "4.6.0b1" description = "Cisco Meraki Dashboard API library" authors = [ {name = "Cisco Meraki", email = "api-feedback@meraki.net"} diff --git a/uv.lock b/uv.lock index 73d0141..70b4a68 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 5 requires-python = ">=3.11" [[package]] @@ -591,7 +591,7 @@ wheels = [ [[package]] name = "meraki" -version = "4.6.0b0" +version = "4.6.0b1" source = { editable = "." } dependencies = [ { name = "aiohttp" },