1717
1818
1919def link_amw_to_amg (cmd , grafana_name , monitor_name , grafana_resource_group_name , monitor_resource_group_name ,
20- skip_role_assignments ):
20+ monitor_subscription_id , skip_role_assignments ):
2121 grafana_client = cf_amg (cmd .cli_ctx , subscription = None )
2222 grafana = grafana_client .grafana .get (grafana_resource_group_name , grafana_name )
2323
2424 principal_id = grafana .identity .principal_id
2525 if not principal_id :
2626 raise ArgumentUsageError ("The Grafana instance does not have a managed identity." )
2727
28- monitor = MonitorAccountShow (cli_ctx = cmd .cli_ctx )(command_args = {
29- "resource_group" : monitor_resource_group_name ,
30- "azure_monitor_workspace_name" : monitor_name
31- })
28+ if monitor_subscription_id :
29+ monitor_resource_id = '/subscriptions/{}/resourceGroups/{}/providers/Microsoft.Monitor/accounts/{}' .format (
30+ monitor_subscription_id , monitor_resource_group_name , monitor_name )
31+ else :
32+ monitor = MonitorAccountShow (cli_ctx = cmd .cli_ctx )(command_args = {
33+ "resource_group" : monitor_resource_group_name ,
34+ "azure_monitor_workspace_name" : monitor_name
35+ })
36+ monitor_resource_id = monitor ['id' ]
3237
3338 monitors = grafana .properties .grafana_integrations .azure_monitor_workspace_integrations
34- if monitor ['id' ].lower () in [m .azure_monitor_workspace_resource_id .lower () for m in monitors ]:
39+
40+ if monitor_resource_id .lower () in [m .azure_monitor_workspace_resource_id .lower () for m in monitors ]:
3541 raise ArgumentUsageError ("The Azure Monitor workspace is already linked to the Grafana instance." )
36- monitors .append ({"azureMonitorWorkspaceResourceId" : monitor ['id' ]})
42+
43+ monitors .append ({"azureMonitorWorkspaceResourceId" : monitor_resource_id })
3744 resource = {
3845 "properties" : {
3946 "grafanaIntegrations" : {
@@ -43,30 +50,39 @@ def link_amw_to_amg(cmd, grafana_name, monitor_name, grafana_resource_group_name
4350 }
4451
4552 grafana_client .grafana .update (grafana_resource_group_name , grafana_name , resource )
53+ logger .info ("Azure Monitor workspace of '%s' was linked to the Grafana instance." , monitor_name )
4654
4755 if not skip_role_assignments :
48- subscription_scope = '/' .join (monitor [ 'id' ] .split ('/' )[0 :3 ]) # /subscriptions/<sub_id>
56+ subscription_scope = '/' .join (monitor_resource_id .split ('/' )[0 :3 ]) # /subscriptions/<sub_id>
4957 monitor_role_id = resolve_role_id (cmd .cli_ctx , "Monitoring Data Reader" , subscription_scope )
5058 # assign the Grafana instance the Monitoring Data Reader role on the Azure Monitor workspace
51- logger .warning ("Azure Monitor workspace of '%s' was linked to the Grafana instance. Now assigning the Grafana"
52- " instance the Monitoring Data Reader role on the Azure Monitor workspace." , monitor ['name' ])
53- _create_role_assignment (cmd .cli_ctx , principal_id , monitor_role_id , monitor ['id' ])
59+ logger .info ("Now assigning the Grafana instance the Monitoring Data Reader role on the Azure Monitor "
60+ "workspace." )
61+ _create_role_assignment (cmd .cli_ctx , principal_id , monitor_role_id , monitor_resource_id )
62+ else :
63+ logger .warning ("Skipping role assignment. Please note the Grafana instance needs the Monitoring Data "
64+ "Reader role on the Azure Monitor workspace to access its data." )
5465
5566
5667def unlink_amw_from_amg (cmd , grafana_name , monitor_name , grafana_resource_group_name , monitor_resource_group_name ,
57- skip_role_assignments ):
68+ monitor_subscription_id , skip_role_assignments ):
5869 grafana_client = cf_amg (cmd .cli_ctx , subscription = None )
5970 grafana = grafana_client .grafana .get (grafana_resource_group_name , grafana_name )
6071
61- monitor = MonitorAccountShow (cli_ctx = cmd .cli_ctx )(command_args = {
62- "resource_group" : monitor_resource_group_name ,
63- "azure_monitor_workspace_name" : monitor_name
64- })
72+ if monitor_subscription_id :
73+ monitor_resource_id = '/subscriptions/{}/resourceGroups/{}/providers/Microsoft.Monitor/accounts/{}' .format (
74+ monitor_subscription_id , monitor_resource_group_name , monitor_name )
75+ else :
76+ monitor = MonitorAccountShow (cli_ctx = cmd .cli_ctx )(command_args = {
77+ "resource_group" : monitor_resource_group_name ,
78+ "azure_monitor_workspace_name" : monitor_name
79+ })
80+ monitor_resource_id = monitor ['id' ]
6581
6682 monitors = grafana .properties .grafana_integrations .azure_monitor_workspace_integrations
67- if monitor [ 'id' ] .lower () not in [m .azure_monitor_workspace_resource_id .lower () for m in monitors ]:
83+ if monitor_resource_id .lower () not in [m .azure_monitor_workspace_resource_id .lower () for m in monitors ]:
6884 raise ArgumentUsageError ("The Azure Monitor workspace is not linked to the Grafana instance." )
69- monitors = [m for m in monitors if m .azure_monitor_workspace_resource_id != monitor [ 'id' ] ]
85+ monitors = [m for m in monitors if m .azure_monitor_workspace_resource_id . lower () != monitor_resource_id . lower () ]
7086 resource = {
7187 "properties" : {
7288 "grafanaIntegrations" : {
@@ -76,15 +92,15 @@ def unlink_amw_from_amg(cmd, grafana_name, monitor_name, grafana_resource_group_
7692 }
7793
7894 grafana_client .grafana .update (grafana_resource_group_name , grafana_name , resource )
95+ logger .info ("Azure Monitor workspace of '%s' was unlinked from the Grafana instance." , monitor_name )
7996
8097 principal_id = grafana .identity .principal_id
8198 if principal_id and not skip_role_assignments :
82- subscription_scope = '/' .join (monitor [ 'id' ] .split ('/' )[0 :3 ]) # /subscriptions/<sub_id>
99+ subscription_scope = '/' .join (monitor_resource_id .split ('/' )[0 :3 ]) # /subscriptions/<sub_id>
83100 monitor_role_id = resolve_role_id (cmd .cli_ctx , "Monitoring Data Reader" , subscription_scope )
84101 # assign the Grafana instance the Monitoring Data Reader role on the Azure Monitor workspace
85- logger .warning ("Azure Monitor workspace of '%s' was unlinked from the Grafana instance. Now removing the"
86- " Monitoring Data Reader role assignment from the Azure Monitor workspace." , monitor ['name' ])
87- _delete_role_assignment (cmd .cli_ctx , principal_id , monitor_role_id , monitor ['id' ])
102+ logger .info ("Now removing the Monitoring Data Reader role assignment from the Azure Monitor workspace." )
103+ _delete_role_assignment (cmd .cli_ctx , principal_id , monitor_role_id , monitor_resource_id )
88104
89105
90106def list_amw_linked_to_amg (cmd , grafana_name , grafana_resource_group_name ):
0 commit comments