Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
348e62b
Bump deployment stacks package.
kalbert312 Feb 11, 2026
4153fea
Bump resource package post split.
kalbert312 Feb 11, 2026
d1eddb0
Add other package splits per failures from `azdev test resource`
kalbert312 Feb 11, 2026
2b6edbb
Revert to v24 so the split is only scoped to our services.
kalbert312 Feb 11, 2026
3bf06ad
Lock the API versions of the split packages to what they were previou…
kalbert312 Feb 11, 2026
094c3cd
Convert ActionOnUnmanage.
kalbert312 Feb 11, 2026
afa858c
Convert DenySettings.
kalbert312 Feb 12, 2026
bf4a769
Convert DeploymentStack[Properties].
kalbert312 Feb 12, 2026
251f18c
Alias the module.
kalbert312 Feb 12, 2026
fa10da0
Missing conversion.
kalbert312 Feb 12, 2026
b16591e
Revert to previous logic.
kalbert312 Feb 12, 2026
096143c
Convert DeploymentStacksTemplateLink.
kalbert312 Feb 12, 2026
0332ae2
Remove without_delete_support usages until API version upgrade commit.
kalbert312 Feb 12, 2026
bc8df27
Merge branch 'dev' into kylea/stacks-2025-07-01
kalbert312 Feb 12, 2026
3ce5908
Use latest API version (2025-07-01).
kalbert312 Feb 12, 2026
6a8dd72
Add CLI parameter for resources without delete support.
kalbert312 Feb 12, 2026
e7ecb36
Passing reruns of deployment stacks live tests.
kalbert312 Feb 12, 2026
bb8c0c5
Add new parameter in live test.
kalbert312 Feb 13, 2026
3c823e3
Refactor prepare stacks method to work with both stack and stack what…
kalbert312 Feb 13, 2026
e7a1c30
Scaffold stack-whatif create command.
kalbert312 Feb 13, 2026
6c355c3
Refactors.
kalbert312 Feb 13, 2026
6a29a6c
Refactors args setup for stacks to dedupe code between stacks and sta…
kalbert312 Feb 13, 2026
e775f36
Fixup help.
kalbert312 Feb 13, 2026
f5e3372
New arguments.
kalbert312 Feb 13, 2026
d98242f
Stack whatif create working, at least at RG level.
kalbert312 Feb 13, 2026
e7f3829
Merge branch 'refs/heads/dev' into kylea/stacks-2025-07-01
kalbert312 Feb 13, 2026
6bbe12c
Add boilerplate for other stacks what-if commands.
kalbert312 Feb 17, 2026
c13db7f
Updates.
kalbert312 Feb 18, 2026
4290fe4
Include validation level in live tests.
kalbert312 Feb 18, 2026
c6e07b6
Comment out the stacks what-if commands for March.
kalbert312 Feb 18, 2026
d635acc
Merge branch 'dev' into kylea/stacks-2025-07-01
kalbert312 Feb 18, 2026
edd5084
Revert help until commands are ready.
kalbert312 Feb 19, 2026
be11bd7
Fix lint errors.
kalbert312 Feb 19, 2026
5fd9d60
Add rule exclusions for back-compat.
kalbert312 Feb 19, 2026
2410c38
Merge branch 'dev' into kylea/stacks-2025-07-01
kalbert312 Feb 19, 2026
14855e1
Add exclusion.
kalbert312 Feb 19, 2026
94a32eb
Continue, not pass.
kalbert312 Feb 19, 2026
1168480
Fix deny settings mode.
kalbert312 Feb 20, 2026
aa03cd6
Minor.
kalbert312 Feb 20, 2026
8dbd035
Fix mistake with deny settings mode.
kalbert312 Feb 20, 2026
f7ecdd8
Rerun stacks live tests.
kalbert312 Feb 20, 2026
cc26bde
Merge branch 'dev' into kylea/stacks-2025-07-01
kalbert312 Feb 20, 2026
cf25ea6
Lock ResourceManagementClient to the API version used before bumping …
kalbert312 Feb 23, 2026
8b060bd
Merge branch 'dev' into kylea/stacks-2025-07-01
kalbert312 Feb 23, 2026
e6211cb
Pass the resource type instead, which is locked to the existing API v…
kalbert312 Feb 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,6 @@ def process_nw_cm_v2_create_namespace(cmd):
validate_tags(args)
if not has_value(args.location): # location is None only occurs in creating a V2 connection monitor
endpoint_source_resource_id = args.endpoint_source_resource_id.to_serialized_data()
from azure.mgmt.resource import ResourceManagementClient
# parse and verify endpoint_source_resource_id
if not has_value(args.endpoint_source_resource_id):
raise ValidationError('usage error: --location/--endpoint-source-resource-id '
Expand All @@ -579,7 +578,7 @@ def process_nw_cm_v2_create_namespace(cmd):
raise ValidationError('usage error: "{}" is not a valid resource id'.format(endpoint_source_resource_id))

resource = parse_resource_id(endpoint_source_resource_id)
resource_client = get_mgmt_service_client(cmd.cli_ctx, ResourceManagementClient)
resource_client = get_mgmt_service_client(cmd.cli_ctx, ResourceType.MGMT_RESOURCE_RESOURCES)
resource_api_version = _resolve_api_version(resource_client,
resource['namespace'],
resource['resource_parent'],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,11 @@ def _resource_deployments_client_factory(cli_ctx, **_):
return get_mgmt_service_client(cli_ctx, ResourceType.MGMT_RESOURCE_DEPLOYMENTS)


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


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


def _resource_templatespecs_client_factory(cli_ctx, subscription_id=None, **_):
def _resource_templatespecs_client_factory(cli_ctx, subscription_id=None, api_version=None, **_):
from azure.cli.core.commands.client_factory import get_mgmt_service_client
from azure.cli.core.profiles import ResourceType
kwargs = {'subscription_id': subscription_id} if subscription_id is not None else {}
kwargs = {'api_version': api_version or '2022-02-01'}
if subscription_id is not None:
kwargs['subscription_id'] = subscription_id
return get_mgmt_service_client(cli_ctx, ResourceType.MGMT_RESOURCE_TEMPLATESPECS, **kwargs)


Expand Down
162 changes: 76 additions & 86 deletions src/azure-cli/azure/cli/command_modules/resource/_params.py

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions src/azure-cli/azure/cli/command_modules/resource/_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,3 +272,15 @@ def validate_msi(cmd, namespace, from_identity_command=False):
class RollbackAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
setattr(namespace, 'rollback_on_error', '' if not values else values)


def iso_8601_duration(value):
"""Validate the correct format of a timespan string and deserialize."""
from msrest.serialization import Deserializer
from msrest.exceptions import DeserializationError
try:
duration_obj = Deserializer.deserialize_duration(value)
except DeserializationError:
message = "Argument {} is not in a valid ISO-8601 duration format"
raise ValueError(message.format(value))
return duration_obj
28 changes: 28 additions & 0 deletions src/azure-cli/azure/cli/command_modules/resource/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,16 @@ def load_command_table(self, _):
'validate', 'validate_deployment_stack_at_management_group', validator=validate_deployment_stack_files,
exception_handler=handle_template_based_exception)

# TODO(kylealbert): not ready for march 2026
# with self.command_group('stack-whatif mg', resource_deploymentstacks_sdk, resource_type=ResourceType.MGMT_RESOURCE_DEPLOYMENTSTACKS) as g:
# g.custom_show_command('show', 'show_deployment_stack_what_if_at_management_group', table_transformer=transform_stacks)
# g.custom_command('list', 'list_deployment_stack_what_if_at_management_group', table_transformer=transform_stacks_list)
# g.custom_command('delete', 'delete_deployment_stack_what_if_at_management_group')
# g.custom_command(
# 'create', 'create_deployment_stack_what_if_at_management_group', supports_no_wait=True,
# validator=validate_deployment_stack_files, table_transformer=transform_stacks,
# exception_handler=handle_template_based_exception)

with self.command_group('stack sub', resource_deploymentstacks_sdk, resource_type=ResourceType.MGMT_RESOURCE_DEPLOYMENTSTACKS) as g:
g.custom_show_command('show', 'show_deployment_stack_at_subscription', table_transformer=transform_stacks)
g.custom_command('list', 'list_deployment_stack_at_subscription', table_transformer=transform_stacks_list)
Expand All @@ -454,6 +464,15 @@ def load_command_table(self, _):
'validate', 'validate_deployment_stack_at_subscription', validator=validate_deployment_stack_files,
exception_handler=handle_template_based_exception)

# TODO(kylealbert): not ready for march 2026
# with self.command_group('stack-whatif sub', resource_deploymentstacks_sdk, resource_type=ResourceType.MGMT_RESOURCE_DEPLOYMENTSTACKS) as g:
# g.custom_show_command('show', 'show_deployment_stack_what_if_at_subscription', table_transformer=transform_stacks)
# g.custom_command('list', 'list_deployment_stack_what_if_at_subscription', table_transformer=transform_stacks_list)
# g.custom_command('delete', 'delete_deployment_stack_what_if_at_subscription')
# g.custom_command(
# 'create', 'create_deployment_stack_what_if_at_subscription', supports_no_wait=True, validator=validate_deployment_stack_files,
# table_transformer=transform_stacks, exception_handler=handle_template_based_exception)

with self.command_group('stack group', resource_deploymentstacks_sdk, resource_type=ResourceType.MGMT_RESOURCE_DEPLOYMENTSTACKS) as g:
g.custom_show_command('show', 'show_deployment_stack_at_resource_group', table_transformer=transform_stacks)
g.custom_command('list', 'list_deployment_stack_at_resource_group', table_transformer=transform_stacks_list)
Expand All @@ -466,6 +485,15 @@ def load_command_table(self, _):
'validate', 'validate_deployment_stack_at_resource_group', validator=validate_deployment_stack_files,
exception_handler=handle_template_based_exception)

# TODO(kylealbert): not ready for march 2026
# with self.command_group('stack-whatif group', resource_deploymentstacks_sdk, resource_type=ResourceType.MGMT_RESOURCE_DEPLOYMENTSTACKS) as g:
# g.custom_show_command('show', 'show_deployment_stack_what_if_at_resource_group', table_transformer=transform_stacks)
# g.custom_command('list', 'list_deployment_stack_what_if_at_resource_group', table_transformer=transform_stacks_list)
# g.custom_command('delete', 'delete_deployment_stack_what_if_at_resource_group')
# g.custom_command(
# 'create', 'create_deployment_stack_what_if_at_resource_group', supports_no_wait=True, validator=validate_deployment_stack_files,
# table_transformer=transform_stacks, exception_handler=handle_template_based_exception)

# az deployment group
with self.command_group('deployment group', resource_deployment_sdk, resource_type=ResourceType.MGMT_RESOURCE_DEPLOYMENTS) as g:
g.custom_command('list', 'list_deployments_at_resource_group', table_transformer=transform_deployments_list)
Expand Down
Loading