Skip to content

Commit 931a450

Browse files
authored
[AKS] az aks create: Update prom and logs addon to use sdk (#31828)
1 parent bbd3acc commit 931a450

File tree

11 files changed

+222
-222
lines changed

11 files changed

+222
-222
lines changed

src/azure-cli/azure/cli/command_modules/acs/addonconfiguration.py

Lines changed: 45 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -620,19 +620,24 @@ def ensure_container_insights_for_monitoring(
620620
}
621621
)
622622

623+
resources = get_resources_client(cmd.cli_ctx, cluster_subscription)
623624
for _ in range(3):
624625
try:
625626
if enable_syslog:
626-
send_raw_request(
627-
cmd.cli_ctx, "PUT", dcr_url, body=dcr_creation_body_with_syslog
627+
resources.begin_create_or_update_by_id(
628+
dcr_resource_id,
629+
"2022-06-01",
630+
json.loads(dcr_creation_body_with_syslog)
628631
)
629632
else:
630-
send_raw_request(
631-
cmd.cli_ctx, "PUT", dcr_url, body=dcr_creation_body_without_syslog
633+
resources.begin_create_or_update_by_id(
634+
dcr_resource_id,
635+
"2022-06-01",
636+
json.loads(dcr_creation_body_without_syslog)
632637
)
633638
error = None
634639
break
635-
except AzCLIError as e:
640+
except CLIError as e:
636641
error = e
637642
else:
638643
raise error
@@ -662,19 +667,18 @@ def create_dce_association(cmd, cluster_region, cluster_resource_id, config_dce_
662667
},
663668
}
664669
)
665-
association_url = cmd.cli_ctx.cloud.endpoints.resource_manager + \
666-
f"{cluster_resource_id}/providers/Microsoft.Insights/dataCollectionRuleAssociations/configurationAccessEndpoint?api-version=2022-06-01"
670+
resources = get_resources_client(cmd.cli_ctx, cmd.cli_ctx.data.get('subscription_id'))
671+
association_id = f"{cluster_resource_id}/providers/Microsoft.Insights/dataCollectionRuleAssociations/configurationAccessEndpoint"
667672
for _ in range(3):
668673
try:
669-
send_raw_request(
670-
cmd.cli_ctx,
671-
"PUT",
672-
association_url,
673-
body=association_body,
674+
resources.begin_create_or_update_by_id(
675+
association_id,
676+
"2022-06-01",
677+
json.loads(association_body)
674678
)
675679
error = None
676680
break
677-
except AzCLIError as e:
681+
except CLIError as e:
678682
error = e
679683
else:
680684
raise error
@@ -690,19 +694,24 @@ def create_or_delete_dcr_association(cmd, cluster_region, remove_monitoring, clu
690694
},
691695
}
692696
)
693-
association_url = cmd.cli_ctx.cloud.endpoints.resource_manager + \
694-
f"{cluster_resource_id}/providers/Microsoft.Insights/dataCollectionRuleAssociations/ContainerInsightsExtension?api-version=2022-06-01"
697+
resources = get_resources_client(cmd.cli_ctx, cmd.cli_ctx.data.get('subscription_id'))
698+
association_id = f"{cluster_resource_id}/providers/Microsoft.Insights/dataCollectionRuleAssociations/ContainerInsightsExtension"
695699
for _ in range(3):
696700
try:
697-
send_raw_request(
698-
cmd.cli_ctx,
699-
"PUT" if not remove_monitoring else "DELETE",
700-
association_url,
701-
body=association_body,
702-
)
701+
if not remove_monitoring:
702+
resources.begin_create_or_update_by_id(
703+
association_id,
704+
"2022-06-01",
705+
json.loads(association_body)
706+
)
707+
else:
708+
resources.begin_delete_by_id(
709+
association_id,
710+
"2022-06-01"
711+
)
703712
error = None
704713
break
705-
except AzCLIError as e:
714+
except CLIError as e:
706715
error = e
707716
else:
708717
raise error
@@ -716,20 +725,18 @@ def create_ampls_scope(cmd, ampls_resource_id, dce_endpoint_name, dce_resource_i
716725
},
717726
}
718727
)
719-
link_dce_ampls_url = cmd.cli_ctx.cloud.endpoints.resource_manager + \
720-
f"{ampls_resource_id}/scopedresources/{dce_endpoint_name}-connection?api-version=2021-07-01-preview"
721-
728+
resources = get_resources_client(cmd.cli_ctx, cmd.cli_ctx.data.get('subscription_id'))
729+
ampls_scope_id = f"{ampls_resource_id}/scopedresources/{dce_endpoint_name}-connection"
722730
for _ in range(3):
723731
try:
724-
send_raw_request(
725-
cmd.cli_ctx,
726-
"PUT",
727-
link_dce_ampls_url,
728-
body=link_dce_ampls_body,
732+
resources.begin_create_or_update_by_id(
733+
ampls_scope_id,
734+
"2021-07-01-preview",
735+
json.loads(link_dce_ampls_body)
729736
)
730737
error = None
731738
break
732-
except AzCLIError as e:
739+
except CLIError as e:
733740
error = e
734741
else:
735742
raise error
@@ -740,8 +747,6 @@ def create_data_collection_endpoint(cmd, subscription, resource_group, region, e
740747
f"/subscriptions/{subscription}/resourceGroups/{resource_group}/"
741748
f"providers/Microsoft.Insights/dataCollectionEndpoints/{endpoint_name}"
742749
)
743-
dce_url = cmd.cli_ctx.cloud.endpoints.resource_manager + \
744-
f"{dce_resource_id}?api-version=2022-06-01"
745750
# create the DCE
746751
dce_creation_body_common = {
747752
"location": region,
@@ -755,12 +760,17 @@ def create_data_collection_endpoint(cmd, subscription, resource_group, region, e
755760
if is_ampls:
756761
dce_creation_body_common["properties"]["networkAcls"]["publicNetworkAccess"] = "Disabled"
757762
dce_creation_body_ = json.dumps(dce_creation_body_common)
763+
resources = get_resources_client(cmd.cli_ctx, subscription)
758764
for _ in range(3):
759765
try:
760-
send_raw_request(cmd.cli_ctx, "PUT", dce_url, body=dce_creation_body_)
766+
resources.begin_create_or_update_by_id(
767+
dce_resource_id,
768+
"2022-06-01",
769+
json.loads(dce_creation_body_)
770+
)
761771
error = None
762772
break
763-
except AzCLIError as e:
773+
except CLIError as e:
764774
error = e
765775
else:
766776
raise error

src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/addonput.py

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
# Copyright (c) Microsoft Corporation. All rights reserved.
33
# Licensed under the MIT License. See License.txt in the project root for license information.
44
# --------------------------------------------------------------------------------------------
5-
import json
6-
from azure.cli.command_modules.acs.azuremonitormetrics.constants import AKS_CLUSTER_API
5+
from azure.cli.command_modules.acs._client_factory import get_container_service_client
76
from azure.cli.core.azclierror import (
87
UnknownError,
98
CLIError
@@ -12,25 +11,17 @@
1211

1312
# pylint: disable=line-too-long
1413
def addon_put(cmd, cluster_subscription, cluster_resource_group_name, cluster_name):
15-
from azure.cli.core.util import send_raw_request
16-
armendpoint = cmd.cli_ctx.cloud.endpoints.resource_manager
17-
feature_check_url = f"{armendpoint}/subscriptions/{cluster_subscription}/resourceGroups/{cluster_resource_group_name}/providers/Microsoft.ContainerService/managedClusters/{cluster_name}?api-version={AKS_CLUSTER_API}"
14+
client = get_container_service_client(cmd.cli_ctx, cluster_subscription).managed_clusters
1815
try:
19-
headers = ['User-Agent=azuremonitormetrics.addon_get']
20-
r = send_raw_request(cmd.cli_ctx, "GET", feature_check_url,
21-
body={}, headers=headers)
16+
mc = client.get(cluster_resource_group_name, cluster_name)
2217
except CLIError as e:
2318
raise UnknownError(e)
24-
json_response = json.loads(r.text)
25-
if "azureMonitorProfile" in json_response["properties"]:
26-
if "metrics" in json_response["properties"]["azureMonitorProfile"]:
27-
if json_response["properties"]["azureMonitorProfile"]["metrics"]["enabled"] is False:
28-
# What if enabled doesn't exist
29-
json_response["properties"]["azureMonitorProfile"]["metrics"]["enabled"] = True
19+
# Enable metrics if present and not already enabled
20+
if hasattr(mc, "azure_monitor_profile") and mc.azure_monitor_profile:
21+
if hasattr(mc.azure_monitor_profile, "metrics") and mc.azure_monitor_profile.metrics:
22+
if getattr(mc.azure_monitor_profile.metrics, "enabled", None) is False:
23+
mc.azure_monitor_profile.metrics.enabled = True
3024
try:
31-
headers = ['User-Agent=azuremonitormetrics.addon_put']
32-
body = json.dumps(json_response)
33-
r = send_raw_request(cmd.cli_ctx, "PUT", feature_check_url,
34-
body=body, headers=headers)
35-
except CLIError as e:
25+
client.begin_create_or_update(cluster_resource_group_name, cluster_name, mc)
26+
except Exception as e:
3627
raise UnknownError(e)

src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/amg/link.py

Lines changed: 48 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -13,72 +13,80 @@
1313
from azure.cli.command_modules.acs.azuremonitormetrics.helper import sanitize_resource_id
1414

1515

16+
# pylint: disable=line-too-long
1617
def link_grafana_instance(cmd, raw_parameters, azure_monitor_workspace_resource_id):
17-
from azure.cli.core.util import send_raw_request
18+
from azure.cli.command_modules.acs._client_factory import get_resources_client
19+
resources = get_resources_client(cmd.cli_ctx, raw_parameters.get("subscription_id"))
1820
# GET grafana principal ID
1921
try:
2022
grafana_resource_id = raw_parameters.get("grafana_resource_id")
2123
if grafana_resource_id is None or grafana_resource_id == "":
2224
return GrafanaLink.NOPARAMPROVIDED
2325
grafana_resource_id = sanitize_resource_id(grafana_resource_id)
24-
grafanaURI = "{0}{1}?api-version={2}".format(
25-
cmd.cli_ctx.cloud.endpoints.resource_manager,
26-
grafana_resource_id,
27-
GRAFANA_API
28-
)
29-
headers = ['User-Agent=azuremonitormetrics.link_grafana_instance']
30-
grafanaArmResponse = send_raw_request(cmd.cli_ctx, "GET", grafanaURI, body={}, headers=headers)
26+
grafanaArmResponse = resources.get_by_id(grafana_resource_id, GRAFANA_API)
3127

3228
# Check if 'identity' and 'type' exist in the response
33-
identity_info = grafanaArmResponse.json().get("identity", {})
34-
identity_type = identity_info.get("type", "").lower()
29+
identity_info = getattr(grafanaArmResponse, "identity", {})
30+
identity_type = getattr(identity_info, "type", "").lower() if identity_info else ""
3531

3632
if identity_type == "systemassigned":
37-
servicePrincipalId = identity_info.get("principalId")
33+
servicePrincipalId = getattr(identity_info, "principal_id", None)
3834
elif identity_type == "userassigned":
39-
user_assigned_identities = identity_info.get("userAssignedIdentities", {})
35+
user_assigned_identities = getattr(identity_info, "user_assigned_identities", {})
4036
if not user_assigned_identities:
4137
raise CLIError("No user-assigned identities found.")
42-
servicePrincipalId = list(user_assigned_identities.values())[0]["principalId"]
38+
user_assigned_values = list(user_assigned_identities.values())
39+
if not user_assigned_values or "principal_id" not in user_assigned_values[0]:
40+
raise CLIError("Invalid user-assigned identity structure or missing principal_id.")
41+
servicePrincipalId = user_assigned_values[0]["principal_id"]
4342
else:
4443
raise CLIError("Unsupported or missing identity type.")
4544

4645
if not servicePrincipalId:
4746
raise CLIError("No service principal ID found for the specified identity.")
48-
except CLIError as e:
47+
except Exception as e:
4948
raise CLIError(e)
5049
# Add Role Assignment
5150
try:
5251
MonitoringDataReader = "b0d8363b-8ddd-447d-831f-62ca05bff136"
53-
roleDefinitionURI = "{0}{1}/providers/Microsoft.Authorization/roleAssignments/{2}?api-version={3}".format(
54-
cmd.cli_ctx.cloud.endpoints.resource_manager,
55-
azure_monitor_workspace_resource_id,
56-
uuid.uuid4(),
57-
GRAFANA_ROLE_ASSIGNMENT_API
52+
roleAssignmentId = str(uuid.uuid4())
53+
roleDefinitionId = (
54+
f"{azure_monitor_workspace_resource_id}/providers/Microsoft.Authorization/roleDefinitions/"
55+
f"{MonitoringDataReader}"
5856
)
59-
roleDefinitionId = "{0}/providers/Microsoft.Authorization/roleDefinitions/{1}".format(
60-
azure_monitor_workspace_resource_id,
61-
MonitoringDataReader
57+
roleAssignmentResourceId = (
58+
f"{azure_monitor_workspace_resource_id}/providers/Microsoft.Authorization/roleAssignments/"
59+
f"{roleAssignmentId}"
6260
)
63-
association_body = json.dumps({
61+
association_body = {
6462
"properties": {
6563
"roleDefinitionId": roleDefinitionId,
6664
"principalId": servicePrincipalId
6765
}
68-
})
69-
headers = ['User-Agent=azuremonitormetrics.add_role_assignment']
70-
send_raw_request(cmd.cli_ctx, "PUT", roleDefinitionURI, body=association_body, headers=headers)
71-
except CLIError as e:
72-
if e.response.status_code != 409:
73-
erroString = "Role Assingment failed. Please manually assign the `Monitoring Data Reader` role\
74-
to the Azure Monitor Workspace ({0}) for the Azure Managed Grafana\
75-
System Assigned Managed Identity ({1})".format(
76-
azure_monitor_workspace_resource_id,
77-
servicePrincipalId
66+
}
67+
try:
68+
resources.begin_create_or_update_by_id(
69+
roleAssignmentResourceId,
70+
GRAFANA_ROLE_ASSIGNMENT_API,
71+
association_body
7872
)
79-
print(erroString)
73+
except CLIError as e:
74+
# If already exists (409), ignore, else print error
75+
if not (hasattr(e, "status_code") and e.status_code == 409):
76+
erroString = (
77+
f"Role Assignment failed. Please manually assign the `Monitoring Data Reader` role\n"
78+
f"to the Azure Monitor Workspace ({azure_monitor_workspace_resource_id}) "
79+
f"for the Azure Managed Grafana\nSystem Assigned Managed Identity ({servicePrincipalId})"
80+
)
81+
print(erroString)
82+
except Exception as e:
83+
raise CLIError(e)
8084
# Setting up AMW Integration
81-
targetGrafanaArmPayload = grafanaArmResponse.json()
85+
targetGrafanaArmPayload = (
86+
grafanaArmResponse.as_dict()
87+
if hasattr(grafanaArmResponse, "as_dict")
88+
else grafanaArmResponse
89+
)
8290
if targetGrafanaArmPayload["properties"] is None:
8391
raise CLIError("Invalid grafana payload to add AMW integration")
8492
if "grafanaIntegrations" not in json.dumps(targetGrafanaArmPayload):
@@ -89,17 +97,14 @@ def link_grafana_instance(cmd, raw_parameters, azure_monitor_workspace_resource_
8997
if amwIntegrations != [] and azure_monitor_workspace_resource_id in json.dumps(amwIntegrations).lower():
9098
return GrafanaLink.ALREADYPRESENT
9199
try:
92-
grafanaURI = "{0}{1}?api-version={2}".format(
93-
cmd.cli_ctx.cloud.endpoints.resource_manager,
94-
grafana_resource_id,
95-
GRAFANA_API
96-
)
97100
targetGrafanaArmPayload["properties"]["grafanaIntegrations"]["azureMonitorWorkspaceIntegrations"].append({
98101
"azureMonitorWorkspaceResourceId": azure_monitor_workspace_resource_id
99102
})
100-
targetGrafanaArmPayload = json.dumps(targetGrafanaArmPayload)
101-
headers = ['User-Agent=azuremonitormetrics.setup_amw_grafana_integration', 'Content-Type=application/json']
102-
send_raw_request(cmd.cli_ctx, "PUT", grafanaURI, body=targetGrafanaArmPayload, headers=headers)
103+
resources.begin_create_or_update_by_id(
104+
grafana_resource_id,
105+
GRAFANA_API,
106+
targetGrafanaArmPayload
107+
)
103108
except CLIError as e:
104109
raise CLIError(e)
105110
return GrafanaLink.SUCCESS

src/azure-cli/azure/cli/command_modules/acs/azuremonitormetrics/amw/create.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
# Copyright (c) Microsoft Corporation. All rights reserved.
33
# Licensed under the MIT License. See License.txt in the project root for license information.
44
# --------------------------------------------------------------------------------------------
5-
import json
6-
75
from azure.cli.command_modules.acs.azuremonitormetrics.constants import MAC_API
86
from azure.cli.command_modules.acs.azuremonitormetrics.amw.defaults import get_default_mac_name_and_region
97
from azure.cli.command_modules.acs._client_factory import get_resource_groups_client, get_resources_client
@@ -12,7 +10,6 @@
1210

1311

1412
def create_default_mac(cmd, cluster_subscription, cluster_region):
15-
from azure.cli.core.util import send_raw_request
1613
default_mac_name, default_mac_region = get_default_mac_name_and_region(cmd, cluster_region, cluster_subscription)
1714
default_resource_group_name = "DefaultResourceGroup-{0}".format(default_mac_region)
1815
azure_monitor_workspace_resource_id = \
@@ -36,13 +33,15 @@ def create_default_mac(cmd, cluster_subscription, cluster_region):
3633
raise ex
3734
else:
3835
resource_groups.create_or_update(default_resource_group_name, {"location": default_mac_region})
39-
association_body = json.dumps({"location": default_mac_region, "properties": {}})
40-
armendpoint = cmd.cli_ctx.cloud.endpoints.resource_manager
41-
association_url = f"{armendpoint}{azure_monitor_workspace_resource_id}?api-version={MAC_API}"
4236
try:
43-
headers = ['User-Agent=azuremonitormetrics.create_default_mac']
44-
send_raw_request(cmd.cli_ctx, "PUT", association_url,
45-
body=association_body, headers=headers)
37+
resources.begin_create_or_update_by_id(
38+
azure_monitor_workspace_resource_id,
39+
MAC_API,
40+
{
41+
"location": default_mac_region,
42+
"properties": {}
43+
}
44+
)
4645
return azure_monitor_workspace_resource_id, default_mac_region
47-
except CLIError as e:
48-
raise e
46+
except Exception as e:
47+
raise CLIError(e)

0 commit comments

Comments
 (0)