Skip to content

Commit ed336f3

Browse files
authored
[ARM] Deployment Stacks initial 2025-07-01 API version support (#32777)
1 parent 221c8bd commit ed336f3

31 files changed

+11829
-10622
lines changed

src/azure-cli/azure/cli/command_modules/network/operations/watcher.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,6 @@ def process_nw_cm_v2_create_namespace(cmd):
570570
validate_tags(args)
571571
if not has_value(args.location): # location is None only occurs in creating a V2 connection monitor
572572
endpoint_source_resource_id = args.endpoint_source_resource_id.to_serialized_data()
573-
from azure.mgmt.resource import ResourceManagementClient
574573
# parse and verify endpoint_source_resource_id
575574
if not has_value(args.endpoint_source_resource_id):
576575
raise ValidationError('usage error: --location/--endpoint-source-resource-id '
@@ -579,7 +578,7 @@ def process_nw_cm_v2_create_namespace(cmd):
579578
raise ValidationError('usage error: "{}" is not a valid resource id'.format(endpoint_source_resource_id))
580579

581580
resource = parse_resource_id(endpoint_source_resource_id)
582-
resource_client = get_mgmt_service_client(cmd.cli_ctx, ResourceManagementClient)
581+
resource_client = get_mgmt_service_client(cmd.cli_ctx, ResourceType.MGMT_RESOURCE_RESOURCES)
583582
resource_api_version = _resolve_api_version(resource_client,
584583
resource['namespace'],
585584
resource['resource_parent'],

src/azure-cli/azure/cli/command_modules/resource/_client_factory.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,11 @@ def _resource_deployments_client_factory(cli_ctx, **_):
4040
return get_mgmt_service_client(cli_ctx, ResourceType.MGMT_RESOURCE_DEPLOYMENTS)
4141

4242

43-
def _resource_deploymentscripts_client_factory(cli_ctx, **_):
43+
def _resource_deploymentscripts_client_factory(cli_ctx, api_version=None, **_):
4444
from azure.cli.core.commands.client_factory import get_mgmt_service_client
4545
from azure.cli.core.profiles import ResourceType
46-
return get_mgmt_service_client(cli_ctx, ResourceType.MGMT_RESOURCE_DEPLOYMENTSCRIPTS)
46+
kwargs = {'api_version': api_version or '2023-08-01'}
47+
return get_mgmt_service_client(cli_ctx, ResourceType.MGMT_RESOURCE_DEPLOYMENTSCRIPTS, **kwargs)
4748

4849

4950
def _authorization_management_client(cli_ctx, **_):
@@ -64,10 +65,12 @@ def _resource_managementgroups_client_factory(cli_ctx, **_):
6465
return get_mgmt_service_client(cli_ctx, ManagementGroupsAPI, subscription_bound=False)
6566

6667

67-
def _resource_templatespecs_client_factory(cli_ctx, subscription_id=None, **_):
68+
def _resource_templatespecs_client_factory(cli_ctx, subscription_id=None, api_version=None, **_):
6869
from azure.cli.core.commands.client_factory import get_mgmt_service_client
6970
from azure.cli.core.profiles import ResourceType
70-
kwargs = {'subscription_id': subscription_id} if subscription_id is not None else {}
71+
kwargs = {'api_version': api_version or '2022-02-01'}
72+
if subscription_id is not None:
73+
kwargs['subscription_id'] = subscription_id
7174
return get_mgmt_service_client(cli_ctx, ResourceType.MGMT_RESOURCE_TEMPLATESPECS, **kwargs)
7275

7376

src/azure-cli/azure/cli/command_modules/resource/_params.py

Lines changed: 76 additions & 86 deletions
Large diffs are not rendered by default.

src/azure-cli/azure/cli/command_modules/resource/_validators.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,3 +272,15 @@ def validate_msi(cmd, namespace, from_identity_command=False):
272272
class RollbackAction(argparse.Action):
273273
def __call__(self, parser, namespace, values, option_string=None):
274274
setattr(namespace, 'rollback_on_error', '' if not values else values)
275+
276+
277+
def iso_8601_duration(value):
278+
"""Validate the correct format of a timespan string and deserialize."""
279+
from msrest.serialization import Deserializer
280+
from msrest.exceptions import DeserializationError
281+
try:
282+
duration_obj = Deserializer.deserialize_duration(value)
283+
except DeserializationError:
284+
message = "Argument {} is not in a valid ISO-8601 duration format"
285+
raise ValueError(message.format(value))
286+
return duration_obj

src/azure-cli/azure/cli/command_modules/resource/commands.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,16 @@ def load_command_table(self, _):
442442
'validate', 'validate_deployment_stack_at_management_group', validator=validate_deployment_stack_files,
443443
exception_handler=handle_template_based_exception)
444444

445+
# TODO(kylealbert): not ready for march 2026
446+
# with self.command_group('stack-whatif mg', resource_deploymentstacks_sdk, resource_type=ResourceType.MGMT_RESOURCE_DEPLOYMENTSTACKS) as g:
447+
# g.custom_show_command('show', 'show_deployment_stack_what_if_at_management_group', table_transformer=transform_stacks)
448+
# g.custom_command('list', 'list_deployment_stack_what_if_at_management_group', table_transformer=transform_stacks_list)
449+
# g.custom_command('delete', 'delete_deployment_stack_what_if_at_management_group')
450+
# g.custom_command(
451+
# 'create', 'create_deployment_stack_what_if_at_management_group', supports_no_wait=True,
452+
# validator=validate_deployment_stack_files, table_transformer=transform_stacks,
453+
# exception_handler=handle_template_based_exception)
454+
445455
with self.command_group('stack sub', resource_deploymentstacks_sdk, resource_type=ResourceType.MGMT_RESOURCE_DEPLOYMENTSTACKS) as g:
446456
g.custom_show_command('show', 'show_deployment_stack_at_subscription', table_transformer=transform_stacks)
447457
g.custom_command('list', 'list_deployment_stack_at_subscription', table_transformer=transform_stacks_list)
@@ -454,6 +464,15 @@ def load_command_table(self, _):
454464
'validate', 'validate_deployment_stack_at_subscription', validator=validate_deployment_stack_files,
455465
exception_handler=handle_template_based_exception)
456466

467+
# TODO(kylealbert): not ready for march 2026
468+
# with self.command_group('stack-whatif sub', resource_deploymentstacks_sdk, resource_type=ResourceType.MGMT_RESOURCE_DEPLOYMENTSTACKS) as g:
469+
# g.custom_show_command('show', 'show_deployment_stack_what_if_at_subscription', table_transformer=transform_stacks)
470+
# g.custom_command('list', 'list_deployment_stack_what_if_at_subscription', table_transformer=transform_stacks_list)
471+
# g.custom_command('delete', 'delete_deployment_stack_what_if_at_subscription')
472+
# g.custom_command(
473+
# 'create', 'create_deployment_stack_what_if_at_subscription', supports_no_wait=True, validator=validate_deployment_stack_files,
474+
# table_transformer=transform_stacks, exception_handler=handle_template_based_exception)
475+
457476
with self.command_group('stack group', resource_deploymentstacks_sdk, resource_type=ResourceType.MGMT_RESOURCE_DEPLOYMENTSTACKS) as g:
458477
g.custom_show_command('show', 'show_deployment_stack_at_resource_group', table_transformer=transform_stacks)
459478
g.custom_command('list', 'list_deployment_stack_at_resource_group', table_transformer=transform_stacks_list)
@@ -466,6 +485,15 @@ def load_command_table(self, _):
466485
'validate', 'validate_deployment_stack_at_resource_group', validator=validate_deployment_stack_files,
467486
exception_handler=handle_template_based_exception)
468487

488+
# TODO(kylealbert): not ready for march 2026
489+
# with self.command_group('stack-whatif group', resource_deploymentstacks_sdk, resource_type=ResourceType.MGMT_RESOURCE_DEPLOYMENTSTACKS) as g:
490+
# g.custom_show_command('show', 'show_deployment_stack_what_if_at_resource_group', table_transformer=transform_stacks)
491+
# g.custom_command('list', 'list_deployment_stack_what_if_at_resource_group', table_transformer=transform_stacks_list)
492+
# g.custom_command('delete', 'delete_deployment_stack_what_if_at_resource_group')
493+
# g.custom_command(
494+
# 'create', 'create_deployment_stack_what_if_at_resource_group', supports_no_wait=True, validator=validate_deployment_stack_files,
495+
# table_transformer=transform_stacks, exception_handler=handle_template_based_exception)
496+
469497
# az deployment group
470498
with self.command_group('deployment group', resource_deployment_sdk, resource_type=ResourceType.MGMT_RESOURCE_DEPLOYMENTS) as g:
471499
g.custom_command('list', 'list_deployments_at_resource_group', table_transformer=transform_deployments_list)

0 commit comments

Comments
 (0)