Skip to content

Commit 9b83b33

Browse files
authored
{Cloud} az cloud register/update: Support --endpoint-microsoft-graph-resource-id and --skip-endpoint-discovery (#31651)
1 parent 2fb12fb commit 9b83b33

File tree

4 files changed

+40
-15
lines changed

4 files changed

+40
-15
lines changed

linter_exclusions.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,6 +1248,9 @@ cloud register:
12481248
endpoint_active_directory_resource_id:
12491249
rule_exclusions:
12501250
- option_length_too_long
1251+
endpoint_microsoft_graph_resource_id:
1252+
rule_exclusions:
1253+
- option_length_too_long
12511254
endpoint_resource_manager:
12521255
rule_exclusions:
12531256
- option_length_too_long
@@ -1257,6 +1260,9 @@ cloud register:
12571260
endpoint_vm_image_alias_doc:
12581261
rule_exclusions:
12591262
- option_length_too_long
1263+
skip_endpoint_discovery:
1264+
rule_exclusions:
1265+
- option_length_too_long
12601266
suffix_acr_login_server_endpoint:
12611267
rule_exclusions:
12621268
- option_length_too_long
@@ -1289,6 +1295,9 @@ cloud update:
12891295
endpoint_active_directory_resource_id:
12901296
rule_exclusions:
12911297
- option_length_too_long
1298+
endpoint_microsoft_graph_resource_id:
1299+
rule_exclusions:
1300+
- option_length_too_long
12921301
endpoint_resource_manager:
12931302
rule_exclusions:
12941303
- option_length_too_long
@@ -1298,6 +1307,9 @@ cloud update:
12981307
endpoint_vm_image_alias_doc:
12991308
rule_exclusions:
13001309
- option_length_too_long
1310+
skip_endpoint_discovery:
1311+
rule_exclusions:
1312+
- option_length_too_long
13011313
suffix_acr_login_server_endpoint:
13021314
rule_exclusions:
13031315
- option_length_too_long

src/azure-cli/azure/cli/command_modules/cloud/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,15 @@ def load_arguments(self, command):
4242
c.argument('cloud_name', options_list=('--name', '-n'), help='Name of a registered cloud', completer=get_cloud_name_completion_list)
4343
c.argument('profile', help='Profile to use for this cloud. The azure stack profiles `2017-03-09-profile` `2018-03-01-hybrid` `2019-03-01-hybrid` and `2020-09-01-hybrid` have been deprecated and removed. To continue using Azure Stack, please install the Azure CLI `2.66.*` (LTS) version. For more details, refer to: https://learn.microsoft.com/en-us/cli/azure/whats-new-overview#important-notice-for-azure-stack-hub-customers', choices=list(API_PROFILES))
4444
c.argument('cloud_config', options_list=('--cloud-config',), help='JSON encoded cloud configuration. Use @{file} to load from a file.', type=shell_safe_json_parse)
45+
c.argument('skip_endpoint_discovery', action='store_true', help="If specified, the cloud endpoints' auto discovery will be skipped")
4546
c.argument('endpoint_management', help='The management service endpoint')
4647
c.argument('endpoint_resource_manager', help='The resource management endpoint')
4748
c.argument('endpoint_sql_management', help='The sql server management endpoint')
4849
c.argument('endpoint_gallery', help='The template gallery endpoint')
4950
c.argument('endpoint_active_directory', help='The Active Directory login endpoint')
5051
c.argument('endpoint_active_directory_resource_id', help='The resource ID to obtain AD tokens for')
5152
c.argument('endpoint_active_directory_graph_resource_id', help='The Active Directory resource ID')
53+
c.argument('endpoint_microsoft_graph_resource_id', help='The Microsoft Graph resource ID')
5254
c.argument('endpoint_active_directory_data_lake_resource_id', help='The Active Directory resource ID for data lake services')
5355
c.argument('endpoint_vm_image_alias_doc', help='The uri of the document which caches commonly used virtual machine images')
5456
c.argument('suffix_sql_server_hostname', help='The dns suffix for sql servers')

src/azure-cli/azure/cli/command_modules/cloud/custom.py

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -58,18 +58,21 @@ def _populate_from_metadata_endpoint(arm_endpoint, session=None):
5858
raise CLIError(error_msg_fmt.format(msg))
5959

6060

61-
def _build_cloud(cli_ctx, cloud_name, cloud_config=None, cloud_args=None):
61+
def _build_cloud(cli_ctx, cloud_name, skip_endpoint_discovery=False, cloud_config=None, cloud_args=None):
6262
if cloud_config:
6363
# Using JSON format so convert the keys to snake case
6464
cloud_args = {to_snake_case(k): v for k, v in cloud_config.items()}
65-
arm_endpoint = None
66-
if 'endpoints' in cloud_args:
67-
arm_endpoint = (cloud_args['endpoints'].get('resource_manager', None) or
68-
cloud_args['endpoints'].get('resourceManager', None))
69-
if 'endpoint_resource_manager' in cloud_args:
70-
arm_endpoint = cloud_args['endpoint_resource_manager']
71-
c = _populate_from_metadata_endpoint(arm_endpoint)
72-
c.name = cloud_name
65+
if skip_endpoint_discovery:
66+
c = Cloud(cloud_name)
67+
else:
68+
arm_endpoint = None
69+
if 'endpoints' in cloud_args:
70+
arm_endpoint = (cloud_args['endpoints'].get('resource_manager', None) or
71+
cloud_args['endpoints'].get('resourceManager', None))
72+
if 'endpoint_resource_manager' in cloud_args:
73+
arm_endpoint = cloud_args['endpoint_resource_manager']
74+
c = _populate_from_metadata_endpoint(arm_endpoint)
75+
c.name = cloud_name
7376
c.profile = cloud_args.get('profile', None)
7477
try:
7578
endpoints = cloud_args['endpoints']
@@ -92,8 +95,7 @@ def _build_cloud(cli_ctx, cloud_name, cloud_config=None, cloud_args=None):
9295

9396
required_endpoints = {'resource_manager': '--endpoint-resource-manager',
9497
'active_directory': '--endpoint-active-directory',
95-
'active_directory_resource_id': '--endpoint-active-directory-resource-id',
96-
'active_directory_graph_resource_id': '--endpoint-active-directory-graph-resource-id'}
98+
'active_directory_resource_id': '--endpoint-active-directory-resource-id'}
9799
missing_endpoints = [e_param for e_name, e_param in required_endpoints.items()
98100
if not c.endpoints.has_endpoint_set(e_name)]
99101
if missing_endpoints and not cloud_is_registered(cli_ctx, cloud_name):
@@ -108,13 +110,15 @@ def register_cloud(cmd,
108110
cloud_name,
109111
cloud_config=None,
110112
profile=None,
113+
skip_endpoint_discovery=False,
111114
endpoint_management=None,
112115
endpoint_resource_manager=None,
113116
endpoint_sql_management=None,
114117
endpoint_gallery=None,
115118
endpoint_active_directory=None,
116119
endpoint_active_directory_resource_id=None,
117120
endpoint_active_directory_graph_resource_id=None,
121+
endpoint_microsoft_graph_resource_id=None,
118122
endpoint_active_directory_data_lake_resource_id=None,
119123
endpoint_vm_image_alias_doc=None,
120124
suffix_sql_server_hostname=None,
@@ -123,8 +127,8 @@ def register_cloud(cmd,
123127
suffix_azure_datalake_store_file_system_endpoint=None,
124128
suffix_azure_datalake_analytics_catalog_and_job_endpoint=None,
125129
suffix_acr_login_server_endpoint=None):
126-
c = _build_cloud(cmd.cli_ctx, cloud_name, cloud_config=cloud_config,
127-
cloud_args=locals())
130+
c = _build_cloud(cmd.cli_ctx, cloud_name, skip_endpoint_discovery=skip_endpoint_discovery,
131+
cloud_config=cloud_config, cloud_args=locals())
128132
try:
129133
add_cloud(cmd.cli_ctx, c)
130134
except CloudAlreadyRegisteredException as e:
@@ -135,13 +139,15 @@ def modify_cloud(cmd,
135139
cloud_name=None,
136140
cloud_config=None,
137141
profile=None,
142+
skip_endpoint_discovery=False,
138143
endpoint_management=None,
139144
endpoint_resource_manager=None,
140145
endpoint_sql_management=None,
141146
endpoint_gallery=None,
142147
endpoint_active_directory=None,
143148
endpoint_active_directory_resource_id=None,
144149
endpoint_active_directory_graph_resource_id=None,
150+
endpoint_microsoft_graph_resource_id=None,
145151
endpoint_active_directory_data_lake_resource_id=None,
146152
endpoint_vm_image_alias_doc=None,
147153
suffix_sql_server_hostname=None,
@@ -152,8 +158,8 @@ def modify_cloud(cmd,
152158
suffix_acr_login_server_endpoint=None):
153159
if not cloud_name:
154160
cloud_name = cmd.cli_ctx.cloud.name
155-
c = _build_cloud(cmd.cli_ctx, cloud_name, cloud_config=cloud_config,
156-
cloud_args=locals())
161+
c = _build_cloud(cmd.cli_ctx, cloud_name, skip_endpoint_discovery=skip_endpoint_discovery,
162+
cloud_config=cloud_config, cloud_args=locals())
157163
try:
158164
update_cloud(cmd.cli_ctx, c)
159165
except CloudNotRegisteredException as e:

src/azure-cli/azure/cli/command_modules/cloud/tests/latest/test_cloud.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@ def test_cloud_scenario(self):
102102
assert result['endpoints']['activeDirectory'] == 'https://login.myendpoint.com/'
103103
assert result['endpoints']['management'] == 'https://management.myendpoint.com/'
104104

105+
# Skip cloud discovery
106+
self.cmd('cloud update --name {name} --endpoint-resource-manager https://foo.example.com --skip-endpoint-discovery')
107+
result = self.cmd('cloud show --name {name}').get_output_in_json()
108+
assert result['endpoints']['resourceManager'] == 'https://foo.example.com'
109+
105110
# TODO: Test all arguments of `az cloud update`
106111

107112
self.cmd('cloud set --name {name} --profile latest')

0 commit comments

Comments
 (0)