diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/addonput.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/addonput.py index 4d40878f2e3..72c9a935338 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/addonput.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/addonput.py @@ -4,7 +4,6 @@ # -------------------------------------------------------------------------------------------- import json from azext_aks_preview.azuremonitormetrics.constants import AKS_CLUSTER_API -from azure.cli.core.profiles import ResourceType from azure.cli.core.azclierror import ( UnknownError, CLIError @@ -14,13 +13,16 @@ def addon_put(cmd, cluster_subscription, cluster_resource_group_name, cluster_name): from azure.cli.core.util import send_raw_request armendpoint = cmd.cli_ctx.cloud.endpoints.resource_manager - feature_check_url = f"{armendpoint}/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/Microsoft.ContainerService/managedClusters/{cluster_name}?api-version={AKS_CLUSTER_API}" + feature_check_url = ( + f"{armendpoint}/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/" + f"Microsoft.ContainerService/managedClusters/{cluster_name}?api-version={AKS_CLUSTER_API}" + ) try: headers = ['User-Agent=azuremonitormetrics.addon_get'] r = send_raw_request(cmd.cli_ctx, "GET", feature_check_url, body={}, headers=headers) except CLIError as e: - raise UnknownError(e) + raise UnknownError(e) # pylint: disable=raise-missing-from json_response = json.loads(r.text) if "azureMonitorProfile" in json_response["properties"]: if "metrics" in json_response["properties"]["azureMonitorProfile"]: @@ -33,4 +35,4 @@ def addon_put(cmd, cluster_subscription, cluster_resource_group_name, cluster_na r = send_raw_request(cmd.cli_ctx, "PUT", feature_check_url, body=body, headers=headers) except CLIError as e: - raise UnknownError(e) + raise UnknownError(e) # pylint: disable=raise-missing-from diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/amg/link.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/amg/link.py index af5f5ba64b1..bc05c60d22c 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/amg/link.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/amg/link.py @@ -21,37 +21,39 @@ def link_grafana_instance(cmd, raw_parameters, azure_monitor_workspace_resource_ if grafana_resource_id is None or grafana_resource_id == "": return GrafanaLink.NOPARAMPROVIDED grafana_resource_id = sanitize_resource_id(grafana_resource_id) - grafanaURI = "{0}{1}?api-version={2}".format( - cmd.cli_ctx.cloud.endpoints.resource_manager, - grafana_resource_id, - GRAFANA_API - ) + grafanaURI = f"{cmd.cli_ctx.cloud.endpoints.resource_manager}{grafana_resource_id}?api-version={GRAFANA_API}" headers = ['User-Agent=azuremonitormetrics.link_grafana_instance'] grafanaArmResponse = send_raw_request(cmd.cli_ctx, "GET", grafanaURI, body={}, headers=headers) servicePrincipalId = grafanaArmResponse.json()["identity"]["principalId"] except CLIError as e: - raise CLIError(e) + raise CLIError(e) # pylint: disable=raise-missing-from # Add Role Assignment try: MonitoringDataReader = "b0d8363b-8ddd-447d-831f-62ca05bff136" - roleDefinitionURI = "{0}{1}/providers/Microsoft.Authorization/roleAssignments/{2}?api-version={3}".format( - cmd.cli_ctx.cloud.endpoints.resource_manager, - azure_monitor_workspace_resource_id, - uuid.uuid4(), - GRAFANA_ROLE_ASSIGNMENT_API + roleDefinitionURI = ( + f"{cmd.cli_ctx.cloud.endpoints.resource_manager}{azure_monitor_workspace_resource_id}/providers/" + f"Microsoft.Authorization/roleAssignments/{uuid.uuid4()}?api-version={GRAFANA_ROLE_ASSIGNMENT_API}" + ) + roleDefinitionId = ( + f"{azure_monitor_workspace_resource_id}/providers/" + f"Microsoft.Authorization/roleDefinitions/{MonitoringDataReader}" ) - roleDefinitionId = "{0}/providers/Microsoft.Authorization/roleDefinitions/{1}".format( - azure_monitor_workspace_resource_id, - MonitoringDataReader + association_body = json.dumps( + { + "properties": { + "roleDefinitionId": roleDefinitionId, + "principalId": servicePrincipalId, + } + } ) - association_body = json.dumps({"properties": {"roleDefinitionId": roleDefinitionId, "principalId": servicePrincipalId}}) headers = ['User-Agent=azuremonitormetrics.add_role_assignment'] send_raw_request(cmd.cli_ctx, "PUT", roleDefinitionURI, body=association_body, headers=headers) except CLIError as e: if e.response.status_code != 409: - erroString = "Role Assingment failed. Please manually assign the `Monitoring Data Reader` role to the Azure Monitor Workspace ({0}) for the Azure Managed Grafana System Assigned Managed Identity ({1})".format( - azure_monitor_workspace_resource_id, - servicePrincipalId + erroString = ( + "Role Assingment failed. Please manually assign the `Monitoring Data Reader` role to " + f"the Azure Monitor Workspace ({azure_monitor_workspace_resource_id}) for the Azure Managed Grafana " + f"System Assigned Managed Identity ({servicePrincipalId})" ) print(erroString) # Setting up AMW Integration @@ -66,15 +68,15 @@ def link_grafana_instance(cmd, raw_parameters, azure_monitor_workspace_resource_ if amwIntegrations and azure_monitor_workspace_resource_id in json.dumps(amwIntegrations).lower(): return GrafanaLink.ALREADYPRESENT try: - grafanaURI = "{0}{1}?api-version={2}".format( - cmd.cli_ctx.cloud.endpoints.resource_manager, - grafana_resource_id, - GRAFANA_API + grafanaURI = f"{cmd.cli_ctx.cloud.endpoints.resource_manager}{grafana_resource_id}?api-version={GRAFANA_API}" + targetGrafanaArmPayload["properties"]["grafanaIntegrations"][ + "azureMonitorWorkspaceIntegrations" + ].append( + {"azureMonitorWorkspaceResourceId": azure_monitor_workspace_resource_id} ) - targetGrafanaArmPayload["properties"]["grafanaIntegrations"]["azureMonitorWorkspaceIntegrations"].append({"azureMonitorWorkspaceResourceId": azure_monitor_workspace_resource_id}) targetGrafanaArmPayload = json.dumps(targetGrafanaArmPayload) headers = ['User-Agent=azuremonitormetrics.setup_amw_grafana_integration', 'Content-Type=application/json'] send_raw_request(cmd.cli_ctx, "PUT", grafanaURI, body=targetGrafanaArmPayload, headers=headers) except CLIError as e: - raise CLIError(e) + raise CLIError(e) # pylint: disable=raise-missing-from return GrafanaLink.SUCCESS diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/amw/create.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/amw/create.py index f861f037def..57e473ab64d 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/amw/create.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/amw/create.py @@ -4,18 +4,22 @@ # -------------------------------------------------------------------------------------------- import json -from azext_aks_preview.azuremonitormetrics.constants import MAC_API from azure.cli.command_modules.acs._client_factory import get_resource_groups_client, get_resources_client from azure.core.exceptions import HttpResponseError -from knack.util import CLIError +from azext_aks_preview.azuremonitormetrics.constants import MAC_API from azext_aks_preview.azuremonitormetrics.amw.defaults import get_default_mac_name_and_region +from knack.util import CLIError + def create_default_mac(cmd, cluster_subscription, cluster_region): from azure.cli.core.util import send_raw_request default_mac_name, default_mac_region = get_default_mac_name_and_region(cmd, cluster_region) - default_resource_group_name = "DefaultResourceGroup-{0}".format(default_mac_region) - azure_monitor_workspace_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/microsoft.monitor/accounts/{2}".format(cluster_subscription, default_resource_group_name, default_mac_name) + default_resource_group_name = f"DefaultResourceGroup-{default_mac_region}" + azure_monitor_workspace_resource_id = ( + f"/subscriptions/{cluster_subscription}/resourceGroups/{default_resource_group_name}/providers/" + f"microsoft.monitor/accounts/{default_mac_name}" + ) # Check if default resource group exists or not, if it does not then create it resource_groups = get_resource_groups_client(cmd.cli_ctx, cluster_subscription) resources = get_resources_client(cmd.cli_ctx, cluster_subscription) diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/amw/defaults.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/amw/defaults.py index 5628ebb21f4..93675af571a 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/amw/defaults.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/amw/defaults.py @@ -4,7 +4,9 @@ # -------------------------------------------------------------------------------------------- import json from azext_aks_preview.azuremonitormetrics.deaults import get_default_region -from azext_aks_preview.azuremonitormetrics.responseparsers.amwlocationresponseparser import parseResourceProviderResponseForLocations +from azext_aks_preview.azuremonitormetrics.responseparsers.amwlocationresponseparser import ( + parseResourceProviderResponseForLocations, +) from azext_aks_preview.azuremonitormetrics.constants import RP_LOCATION_API from knack.util import CLIError diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/amw/helper.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/amw/helper.py index 41f8045679e..a860483b064 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/amw/helper.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/amw/helper.py @@ -2,14 +2,11 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- -import json from azext_aks_preview.azuremonitormetrics.amw.create import create_default_mac from azext_aks_preview.azuremonitormetrics.constants import MAC_API from azext_aks_preview.azuremonitormetrics.helper import sanitize_resource_id -from azure.cli.core.azclierror import ClientRequestError from azure.core.exceptions import HttpResponseError from azure.cli.command_modules.acs._client_factory import get_resources_client -from knack.util import CLIError def get_amw_region(cmd, azure_monitor_workspace_resource_id): @@ -27,7 +24,11 @@ def get_amw_region(cmd, azure_monitor_workspace_resource_id): def get_azure_monitor_workspace_resource(cmd, cluster_subscription, cluster_region, raw_parameters): azure_monitor_workspace_resource_id = raw_parameters.get("azure_monitor_workspace_resource_id") if not azure_monitor_workspace_resource_id: - azure_monitor_workspace_resource_id, azure_monitor_workspace_location = create_default_mac(cmd, cluster_subscription, cluster_region) + azure_monitor_workspace_resource_id, azure_monitor_workspace_location = create_default_mac( + cmd, + cluster_subscription, + cluster_region + ) else: azure_monitor_workspace_resource_id = sanitize_resource_id(azure_monitor_workspace_resource_id) azure_monitor_workspace_location = get_amw_region(cmd, azure_monitor_workspace_resource_id) diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/constants.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/constants.py index ca5e49a7d8a..cf2d999f8cd 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/constants.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/constants.py @@ -2,9 +2,9 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- -from azure.core import CaseInsensitiveEnumMeta from enum import Enum -from six import with_metaclass + +from azure.core import CaseInsensitiveEnumMeta AKS_CLUSTER_API = "2023-01-01" MAC_API = "2023-04-03" @@ -70,7 +70,7 @@ } -class GrafanaLink(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class GrafanaLink(str, Enum, metaclass=CaseInsensitiveEnumMeta): """ Status of Grafana link to the Prometheus Addon """ @@ -80,7 +80,7 @@ class GrafanaLink(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): NOPARAMPROVIDED = "NOPARAMPROVIDED" -class DC_TYPE(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): +class DC_TYPE(str, Enum, metaclass=CaseInsensitiveEnumMeta): """ Types of DC* objects """ diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/dce_api.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/dce_api.py index 8d43bedd552..0b1b09ff35a 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/dce_api.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/dce_api.py @@ -5,14 +5,16 @@ import json from azext_aks_preview.azuremonitormetrics.constants import DC_API from azext_aks_preview.azuremonitormetrics.dc.defaults import get_default_dce_name -from azext_aks_preview.azuremonitormetrics.constants import DC_API from knack.util import CLIError def create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_region): from azure.cli.core.util import send_raw_request dce_name = get_default_dce_name(cmd, mac_region, cluster_name) - dce_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Insights/dataCollectionEndpoints/{2}".format(cluster_subscription, cluster_resource_group_name, dce_name) + dce_resource_id = ( + f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/" + f"Microsoft.Insights/dataCollectionEndpoints/{dce_name}" + ) try: armendpoint = cmd.cli_ctx.cloud.endpoints.resource_manager dce_url = f"{armendpoint}{dce_resource_id}?api-version={DC_API}" diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/dcr_api.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/dcr_api.py index 9dae595df8e..e4d2e9c824e 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/dcr_api.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/dcr_api.py @@ -13,31 +13,60 @@ def get_default_dcr_name(cmd, mac_region, cluster_name): - region = get_default_region(cmd) - if mac_region in MapToClosestMACRegion: - region = MapToClosestMACRegion[mac_region] + region = MapToClosestMACRegion.get(mac_region, get_default_region(cmd)) default_dcr_name = "MSProm-" + region + "-" + cluster_name return sanitize_name(default_dcr_name, DC_TYPE.DCR, 64) -# pylint: disable=too-many-locals,too-many-branches,too-many-statements,line-too-long -def create_dcr(cmd, mac_region, azure_monitor_workspace_resource_id, cluster_subscription, cluster_resource_group_name, cluster_name, dce_resource_id): +# pylint: disable=too-many-locals,too-many-branches,too-many-statements +def create_dcr( + cmd, + mac_region, + azure_monitor_workspace_resource_id, + cluster_subscription, + cluster_resource_group_name, + cluster_name, + dce_resource_id +): from azure.cli.core.util import send_raw_request dcr_name = get_default_dcr_name(cmd, mac_region, cluster_name) - dcr_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Insights/dataCollectionRules/{2}".format( - cluster_subscription, - cluster_resource_group_name, - dcr_name + dcr_resource_id = ( + f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/" + f"Microsoft.Insights/dataCollectionRules/{dcr_name}" + ) + dcr_creation_body = json.dumps( + { + "location": mac_region, + "kind": "Linux", + "properties": { + "dataCollectionEndpointId": dce_resource_id, + "dataSources": { + "prometheusForwarder": [ + { + "name": "PrometheusDataSource", + "streams": ["Microsoft-PrometheusMetrics"], + "labelIncludeFilter": {}, + } + ] + }, + "dataFlows": [ + { + "destinations": ["MonitoringAccount1"], + "streams": ["Microsoft-PrometheusMetrics"], + } + ], + "description": "DCR description", + "destinations": { + "monitoringAccounts": [ + { + "accountResourceId": azure_monitor_workspace_resource_id, + "name": "MonitoringAccount1", + } + ] + }, + }, + } ) - dcr_creation_body = json.dumps({"location": mac_region, - "kind": "Linux", - "properties": { - "dataCollectionEndpointId": dce_resource_id, - "dataSources": {"prometheusForwarder": [{"name": "PrometheusDataSource", "streams": ["Microsoft-PrometheusMetrics"], "labelIncludeFilter": {}}]}, - "dataFlows": [{"destinations": ["MonitoringAccount1"], "streams": ["Microsoft-PrometheusMetrics"]}], - "description": "DCR description", - "destinations": { - "monitoringAccounts": [{"accountResourceId": azure_monitor_workspace_resource_id, "name": "MonitoringAccount1"}]}}}) armendpoint = cmd.cli_ctx.cloud.endpoints.resource_manager dcr_url = f"{armendpoint}{dcr_resource_id}?api-version={DC_API}" try: diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/dcra_api.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/dcra_api.py index 1a5dd8a071b..c04f1c73d47 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/dcra_api.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/dcra_api.py @@ -10,25 +10,30 @@ def create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, dcr_resource_id): from azure.cli.core.util import send_raw_request - cluster_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.ContainerService/managedClusters/{2}".format( - cluster_subscription, - cluster_resource_group_name, - cluster_name + cluster_resource_id = ( + f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/" + f"Microsoft.ContainerService/managedClusters/{cluster_name}" ) dcra_name = get_default_dcra_name(cmd, cluster_region, cluster_name) - dcra_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Insights/dataCollectionRuleAssociations/{2}".format( - cluster_subscription, - cluster_resource_group_name, - dcra_name + dcra_resource_id = ( + f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/" + f"Microsoft.Insights/dataCollectionRuleAssociations/{dcra_name}" ) # only create or delete the association between the DCR and cluster - association_body = json.dumps({"location": cluster_region, - "properties": { - "dataCollectionRuleId": dcr_resource_id, - "description": "Promtheus data collection association between DCR, DCE and target AKS resource" - }}) + association_body = json.dumps( + { + "location": cluster_region, + "properties": { + "dataCollectionRuleId": dcr_resource_id, + "description": "Promtheus data collection association between DCR, DCE and target AKS resource", + }, + } + ) armendpoint = cmd.cli_ctx.cloud.endpoints.resource_manager - association_url = f"{armendpoint}{cluster_resource_id}/providers/Microsoft.Insights/dataCollectionRuleAssociations/{dcra_name}?api-version={DC_API}" + association_url = ( + f"{armendpoint}{cluster_resource_id}/providers/Microsoft.Insights/" + f"dataCollectionRuleAssociations/{dcra_name}?api-version={DC_API}" + ) try: headers = ['User-Agent=azuremonitormetrics.create_dcra'] send_raw_request(cmd.cli_ctx, "PUT", association_url, diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/defaults.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/defaults.py index b7b9d3ce41d..32dca05ecfa 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/defaults.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/defaults.py @@ -12,30 +12,26 @@ # DCR = 64, DCE = 44, DCRA = 64 # All DC* object names should end only in alpha numeric (after `length` trim) # DCE remove underscore from cluster name -def sanitize_name(name, type, length): +def sanitize_name(name, dc_type, length): length = length - 1 - if type == DC_TYPE.DCE: + if dc_type == DC_TYPE.DCE: name = name.replace("_", "") name = name[0:length] lastIndexAlphaNumeric = len(name) - 1 while ((name[lastIndexAlphaNumeric].isalnum() is False) and lastIndexAlphaNumeric > -1): lastIndexAlphaNumeric = lastIndexAlphaNumeric - 1 - if (lastIndexAlphaNumeric < 0): + if lastIndexAlphaNumeric < 0: return "" return name[0:lastIndexAlphaNumeric + 1] def get_default_dce_name(cmd, mac_region, cluster_name): - region = get_default_region(cmd) - if mac_region in MapToClosestMACRegion: - region = MapToClosestMACRegion[mac_region] + region = MapToClosestMACRegion.get(mac_region, get_default_region(cmd)) default_dce_name = "MSProm-" + region + "-" + cluster_name return sanitize_name(default_dce_name, DC_TYPE.DCE, 44) def get_default_dcra_name(cmd, cluster_region, cluster_name): - region = get_default_region(cmd) - if cluster_region in MapToClosestMACRegion: - region = MapToClosestMACRegion[cluster_region] + region = MapToClosestMACRegion.get(cluster_region, get_default_region(cmd)) default_dcra_name = "ContainerInsightsMetricsExtension-" + region + "-" + cluster_name return sanitize_name(default_dcra_name, DC_TYPE.DCRA, 64) diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/delete.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/delete.py index 0ec2dc3ad4b..94b94c42686 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/delete.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/dc/delete.py @@ -22,14 +22,15 @@ def get_dce_from_dcr(cmd, dcrId): def get_dc_objects_list(cmd, cluster_subscription, cluster_resource_group_name, cluster_name): try: from azure.cli.core.util import send_raw_request - cluster_resource_id = \ - "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.ContainerService/managedClusters/{2}".format( - cluster_subscription, - cluster_resource_group_name, - cluster_name - ) + cluster_resource_id = ( + f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/" + f"Microsoft.ContainerService/managedClusters/{cluster_name}" + ) armendpoint = cmd.cli_ctx.cloud.endpoints.resource_manager - association_url = f"{armendpoint}{cluster_resource_id}/providers/Microsoft.Insights/dataCollectionRuleAssociations?api-version={DC_API}" + association_url = ( + f"{armendpoint}{cluster_resource_id}/providers/" + f"Microsoft.Insights/dataCollectionRuleAssociations?api-version={DC_API}" + ) headers = ['User-Agent=azuremonitormetrics.get_dcra'] r = send_raw_request(cmd.cli_ctx, "GET", association_url, headers=headers) data = json.loads(r.text) @@ -37,18 +38,31 @@ def get_dc_objects_list(cmd, cluster_subscription, cluster_resource_group_name, for item in data['value']: if 'properties' in item and 'dataCollectionRuleId' in item['properties']: dce_id = get_dce_from_dcr(cmd, item['properties']['dataCollectionRuleId']) - dc_object_array.append({'name': item['name'], 'dataCollectionRuleId': item['properties']['dataCollectionRuleId'], 'dceId': dce_id}) + dc_object_array.append( + { + "name": item["name"], + "dataCollectionRuleId": item["properties"][ + "dataCollectionRuleId" + ], + "dceId": dce_id, + } + ) return dc_object_array except CLIError as e: - raise CLIError(e) + raise CLIError(e) # pylint: disable=raise-missing-from -def delete_dc_objects_if_prometheus_enabled(cmd, dc_objects_list, cluster_subscription, cluster_resource_group_name, cluster_name): +def delete_dc_objects_if_prometheus_enabled( + cmd, + dc_objects_list, + cluster_subscription, + cluster_resource_group_name, + cluster_name +): from azure.cli.core.util import send_raw_request - cluster_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.ContainerService/managedClusters/{2}".format( - cluster_subscription, - cluster_resource_group_name, - cluster_name + cluster_resource_id = ( + f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/" + f"Microsoft.ContainerService/managedClusters/{cluster_name}" ) for item in dc_objects_list: armendpoint = cmd.cli_ctx.cloud.endpoints.resource_manager @@ -57,10 +71,16 @@ def delete_dc_objects_if_prometheus_enabled(cmd, dc_objects_list, cluster_subscr headers = ['User-Agent=azuremonitormetrics.get_dcr_if_prometheus_enabled'] r = send_raw_request(cmd.cli_ctx, "GET", association_url, headers=headers) data = json.loads(r.text) - if 'microsoft-prometheusmetrics' in [stream.lower() for stream in data['properties']['dataFlows'][0]['streams']]: + if "microsoft-prometheusmetrics" in [ + stream.lower() + for stream in data["properties"]["dataFlows"][0]["streams"] + ]: # delete DCRA armendpoint = cmd.cli_ctx.cloud.endpoints.resource_manager - url = f"{armendpoint}{cluster_resource_id}/providers/Microsoft.Insights/dataCollectionRuleAssociations/{item['name']}?api-version={DC_API}" + url = ( + f"{armendpoint}{cluster_resource_id}/providers/" + f"Microsoft.Insights/dataCollectionRuleAssociations/{item['name']}?api-version={DC_API}" + ) headers = ['User-Agent=azuremonitormetrics.delete_dcra'] send_raw_request(cmd.cli_ctx, "DELETE", url, headers=headers) # delete DCR @@ -73,4 +93,4 @@ def delete_dc_objects_if_prometheus_enabled(cmd, dc_objects_list, cluster_subscr send_raw_request(cmd.cli_ctx, "DELETE", url, headers=headers) except CLIError as e: error = e - raise CLIError(error) + raise CLIError(error) # pylint: disable=raise-missing-from diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/helper.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/helper.py index e4798326a69..996804e45dd 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/helper.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/helper.py @@ -25,16 +25,13 @@ def sanitize_resource_id(resource_id): def post_request(cmd, subscription_id, rp_name, headers): from azure.cli.core.util import send_raw_request armendpoint = cmd.cli_ctx.cloud.endpoints.resource_manager - customUrl = "{0}/subscriptions/{1}/providers/{2}/register?api-version={3}".format( - armendpoint, - subscription_id, - rp_name, - RP_API, + customUrl = ( + f"{armendpoint}/subscriptions/{subscription_id}/providers/{rp_name}/register?api-version={RP_API}" ) try: send_raw_request(cmd.cli_ctx, "POST", customUrl, headers=headers) except CLIError as e: - raise CLIError(e) + raise CLIError(e) # pylint: disable=raise-missing-from def rp_registrations(cmd, subscription_id): @@ -43,14 +40,13 @@ def rp_registrations(cmd, subscription_id): try: headers = ['User-Agent=azuremonitormetrics.get_mac_sub_list'] armendpoint = cmd.cli_ctx.cloud.endpoints.resource_manager - customUrl = "{0}/subscriptions/{1}/providers?api-version={2}&$select=namespace,registrationstate".format( - armendpoint, - subscription_id, - RP_API + customUrl = ( + f"{armendpoint}/subscriptions/{subscription_id}/providers?" + f"api-version={RP_API}&$select=namespace,registrationstate" ) r = send_raw_request(cmd.cli_ctx, "GET", customUrl, headers=headers) except CLIError as e: - raise CLIError(e) + raise CLIError(e) # pylint: disable=raise-missing-from isInsightsRpRegistered = False isAlertsManagementRpRegistered = False isMoniotrRpRegistered = False @@ -58,13 +54,25 @@ def rp_registrations(cmd, subscription_id): json_response = json.loads(r.text) values_array = json_response["value"] for value in values_array: - if value["namespace"].lower() == "microsoft.insights" and value["registrationState"].lower() == "registered": + if ( + value["namespace"].lower() == "microsoft.insights" and + value["registrationState"].lower() == "registered" + ): isInsightsRpRegistered = True - if value["namespace"].lower() == "microsoft.alertsmanagement" and value["registrationState"].lower() == "registered": + if ( + value["namespace"].lower() == "microsoft.alertsmanagement" and + value["registrationState"].lower() == "registered" + ): isAlertsManagementRpRegistered = True - if value["namespace"].lower() == "microsoft.monitor" and value["registrationState"].lower() == "registered": + if ( + value["namespace"].lower() == "microsoft.monitor" and + value["registrationState"].lower() == "registered" + ): isAlertsManagementRpRegistered = True - if value["namespace"].lower() == "microsoft.dashboard" and value["registrationState"].lower() == "registered": + if ( + value["namespace"].lower() == "microsoft.dashboard" and + value["registrationState"].lower() == "registered" + ): isAlertsManagementRpRegistered = True if not isInsightsRpRegistered: headers = ['User-Agent=azuremonitormetrics.register_insights_rp'] @@ -83,16 +91,23 @@ def rp_registrations(cmd, subscription_id): def check_azuremonitormetrics_profile(cmd, cluster_subscription, cluster_resource_group_name, cluster_name): from azure.cli.core.util import send_raw_request armendpoint = cmd.cli_ctx.cloud.endpoints.resource_manager - feature_check_url = f"{armendpoint}/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/Microsoft.ContainerService/managedClusters/{cluster_name}?api-version={AKS_CLUSTER_API}" + feature_check_url = ( + f"{armendpoint}/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/" + f"Microsoft.ContainerService/managedClusters/{cluster_name}?api-version={AKS_CLUSTER_API}" + ) try: headers = ['User-Agent=azuremonitormetrics.check_azuremonitormetrics_profile'] r = send_raw_request(cmd.cli_ctx, "GET", feature_check_url, body={}, headers=headers) except CLIError as e: - raise UnknownError(e) + raise UnknownError(e) # pylint: disable=raise-missing-from json_response = json.loads(r.text) values_array = json_response["properties"] if "azureMonitorProfile" in values_array: if "metrics" in values_array["azureMonitorProfile"]: if values_array["azureMonitorProfile"]["metrics"]["enabled"] is True: - raise CLIError(f"Azure Monitor Metrics is already enabled for this cluster. Please use `az aks update --disable-azuremonitormetrics -g {cluster_resource_group_name} -n {cluster_name}` and then try enabling.") + raise CLIError( + "Azure Monitor Metrics is already enabled for this cluster. Please use " + f"`az aks update --disable-azuremonitormetrics -g {cluster_resource_group_name} -n {cluster_name}` " + "and then try enabling." + ) diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/recordingrules/create.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/recordingrules/create.py index ade47e2b85c..b17b2fb944f 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/recordingrules/create.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/recordingrules/create.py @@ -7,19 +7,31 @@ from knack.util import CLIError -# pylint: disable=line-too-long def get_recording_rules_template(cmd, azure_monitor_workspace_resource_id): from azure.cli.core.util import send_raw_request headers = ['User-Agent=azuremonitormetrics.get_recording_rules_template'] armendpoint = cmd.cli_ctx.cloud.endpoints.resource_manager - url = f"{armendpoint}{azure_monitor_workspace_resource_id}/providers/microsoft.alertsManagement/alertRuleRecommendations?api-version={ALERTS_API}" + url = ( + f"{armendpoint}{azure_monitor_workspace_resource_id}/providers/" + f"microsoft.alertsManagement/alertRuleRecommendations?api-version={ALERTS_API}" + ) r = send_raw_request(cmd.cli_ctx, "GET", url, headers=headers) data = json.loads(r.text) return data['value'] -# pylint: disable=line-too-long -def put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, azure_monitor_workspace_resource_id, cluster_name, default_rules_template, url, enable_rules, i): +def put_rules( + cmd, + default_rule_group_id, + default_rule_group_name, + mac_region, + azure_monitor_workspace_resource_id, + cluster_name, + default_rules_template, + url, + enable_rules, + i, +): from azure.cli.core.util import send_raw_request body = json.dumps({ "id": default_rule_group_id, @@ -45,67 +57,97 @@ def put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, a except CLIError as e: error = e else: - raise error + # TODO: where is error defined? + raise error # pylint: disable=used-before-assignment -# pylint: disable=line-too-long -def create_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, azure_monitor_workspace_resource_id, mac_region, raw_parameters): - # with urllib.request.urlopen("https://defaultrulessc.blob.core.windows.net/defaultrules/ManagedPrometheusDefaultRecordingRules.json") as url: - # default_rules_template = json.loads(url.read().decode()) +def create_rules( + cmd, + cluster_subscription, + cluster_resource_group_name, + cluster_name, + azure_monitor_workspace_resource_id, + mac_region, + raw_parameters, +): default_rules_template = get_recording_rules_template(cmd, azure_monitor_workspace_resource_id) - default_rule_group_name = "NodeRecordingRulesRuleGroup-{0}".format(cluster_name) - default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format( - cluster_subscription, - cluster_resource_group_name, - default_rule_group_name + default_rule_group_name = f"NodeRecordingRulesRuleGroup-{cluster_name}" + default_rule_group_id = ( + f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/" + f"Microsoft.AlertsManagement/prometheusRuleGroups/{default_rule_group_name}" ) - url = "{0}{1}?api-version={2}".format( - cmd.cli_ctx.cloud.endpoints.resource_manager, + url = f"{cmd.cli_ctx.cloud.endpoints.resource_manager}{default_rule_group_id}?api-version={RULES_API}" + put_rules( + cmd, default_rule_group_id, - RULES_API + default_rule_group_name, + mac_region, + azure_monitor_workspace_resource_id, + cluster_name, + default_rules_template, + url, + True, + 0, ) - put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, azure_monitor_workspace_resource_id, cluster_name, default_rules_template, url, True, 0) - default_rule_group_name = "KubernetesRecordingRulesRuleGroup-{0}".format(cluster_name) - default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format( - cluster_subscription, - cluster_resource_group_name, - default_rule_group_name + default_rule_group_name = f"KubernetesRecordingRulesRuleGroup-{cluster_name}" + default_rule_group_id = ( + f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/" + f"Microsoft.AlertsManagement/prometheusRuleGroups/{default_rule_group_name}" ) - url = "{0}{1}?api-version={2}".format( - cmd.cli_ctx.cloud.endpoints.resource_manager, + url = f"{cmd.cli_ctx.cloud.endpoints.resource_manager}{default_rule_group_id}?api-version={RULES_API}" + put_rules( + cmd, default_rule_group_id, - RULES_API + default_rule_group_name, + mac_region, + azure_monitor_workspace_resource_id, + cluster_name, + default_rules_template, + url, + True, + 1, ) - put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, azure_monitor_workspace_resource_id, cluster_name, default_rules_template, url, True, 1) enable_windows_recording_rules = raw_parameters.get("enable_windows_recording_rules") if enable_windows_recording_rules is not True: enable_windows_recording_rules = False - default_rule_group_name = "NodeRecordingRulesRuleGroup-Win-{0}".format(cluster_name) - default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format( - cluster_subscription, - cluster_resource_group_name, - default_rule_group_name + default_rule_group_name = f"NodeRecordingRulesRuleGroup-Win-{cluster_name}" + default_rule_group_id = ( + f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/" + f"Microsoft.AlertsManagement/prometheusRuleGroups/{default_rule_group_name}" ) - url = "{0}{1}?api-version={2}".format( - cmd.cli_ctx.cloud.endpoints.resource_manager, + url = f"{cmd.cli_ctx.cloud.endpoints.resource_manager}{default_rule_group_id}?api-version={RULES_API}" + put_rules( + cmd, default_rule_group_id, - RULES_API + default_rule_group_name, + mac_region, + azure_monitor_workspace_resource_id, + cluster_name, + default_rules_template, + url, + enable_windows_recording_rules, + 2, ) - put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, azure_monitor_workspace_resource_id, cluster_name, default_rules_template, url, enable_windows_recording_rules, 2) - default_rule_group_name = "NodeAndKubernetesRecordingRulesRuleGroup-Win-{0}".format(cluster_name) - default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format( - cluster_subscription, - cluster_resource_group_name, - default_rule_group_name + default_rule_group_name = f"NodeAndKubernetesRecordingRulesRuleGroup-Win-{cluster_name}" + default_rule_group_id = ( + f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/" + f"Microsoft.AlertsManagement/prometheusRuleGroups/{default_rule_group_name}" ) - url = "{0}{1}?api-version={2}".format( - cmd.cli_ctx.cloud.endpoints.resource_manager, + url = f"{cmd.cli_ctx.cloud.endpoints.resource_manager}{default_rule_group_id}?api-version={RULES_API}" + put_rules( + cmd, default_rule_group_id, - RULES_API + default_rule_group_name, + mac_region, + azure_monitor_workspace_resource_id, + cluster_name, + default_rules_template, + url, + enable_windows_recording_rules, + 3, ) - put_rules(cmd, default_rule_group_id, default_rule_group_name, mac_region, azure_monitor_workspace_resource_id, cluster_name, default_rules_template, url, enable_windows_recording_rules, 3) diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/recordingrules/delete.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/recordingrules/delete.py index 0bd782ac3af..5a869997401 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/recordingrules/delete.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/recordingrules/delete.py @@ -7,22 +7,37 @@ def delete_rule(cmd, cluster_subscription, cluster_resource_group_name, default_rule_group_name): from azure.cli.core.util import send_raw_request - default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format( - cluster_subscription, - cluster_resource_group_name, - default_rule_group_name + default_rule_group_id = ( + f"/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/" + f"Microsoft.AlertsManagement/prometheusRuleGroups/{default_rule_group_name}" ) headers = ['User-Agent=azuremonitormetrics.delete_rule.' + default_rule_group_name] - url = "{0}{1}?api-version={2}".format( - cmd.cli_ctx.cloud.endpoints.resource_manager, - default_rule_group_id, - RULES_API - ) + url = f"{cmd.cli_ctx.cloud.endpoints.resource_manager}{default_rule_group_id}?api-version={RULES_API}" send_raw_request(cmd.cli_ctx, "DELETE", url, headers=headers) def delete_rules(cmd, cluster_subscription, cluster_resource_group_name, cluster_name): - delete_rule(cmd, cluster_subscription, cluster_resource_group_name, "NodeRecordingRulesRuleGroup-{0}".format(cluster_name)) - delete_rule(cmd, cluster_subscription, cluster_resource_group_name, "KubernetesRecordingRulesRuleGroup-{0}".format(cluster_name)) - delete_rule(cmd, cluster_subscription, cluster_resource_group_name, "NodeRecordingRulesRuleGroup-Win-{0}".format(cluster_name)) - delete_rule(cmd, cluster_subscription, cluster_resource_group_name, "NodeAndKubernetesRecordingRulesRuleGroup-Win-{0}".format(cluster_name)) + delete_rule( + cmd, + cluster_subscription, + cluster_resource_group_name, + f"NodeRecordingRulesRuleGroup-{cluster_name}", + ) + delete_rule( + cmd, + cluster_subscription, + cluster_resource_group_name, + f"KubernetesRecordingRulesRuleGroup-{cluster_name}", + ) + delete_rule( + cmd, + cluster_subscription, + cluster_resource_group_name, + f"NodeRecordingRulesRuleGroup-Win-{cluster_name}", + ) + delete_rule( + cmd, + cluster_subscription, + cluster_resource_group_name, + f"NodeAndKubernetesRecordingRulesRuleGroup-Win-{cluster_name}", + ) diff --git a/src/aks-preview/azext_aks_preview/azuremonitormetrics/responseparsers/amwlocationresponseparser.py b/src/aks-preview/azext_aks_preview/azuremonitormetrics/responseparsers/amwlocationresponseparser.py index 0485fe9160f..98b9c48d0d1 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitormetrics/responseparsers/amwlocationresponseparser.py +++ b/src/aks-preview/azext_aks_preview/azuremonitormetrics/responseparsers/amwlocationresponseparser.py @@ -17,9 +17,9 @@ def parseResourceProviderResponseForLocations(resourceProviderResponse): def parseLocations(locations: List[str]) -> List[str]: - if not locations or not len(locations): + if not locations or len(locations) == 0: return [] - return list(map(lambda location: reduceLocation(location), locations)) + return [reduceLocation(x) for x in locations] def reduceLocation(location: str) -> str: