Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
20 changes: 20 additions & 0 deletions src/azure-cli/azure/cli/command_modules/vm/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -872,6 +872,26 @@ def load_arguments(self, _):
c.argument('skuprofile_vmsizes', nargs='+', min_api='2024-07-01', help='A list of VM sizes in the scale set. See https://azure.microsoft.com/pricing/details/virtual-machines/ for size info.')
c.argument('skuprofile_allostrat', options_list=['--skuprofile-allocation-strategy', '--sku-allocat-strat'], arg_type=get_enum_type(['LowestPrice', 'CapacityOptimized', 'Prioritized']), min_api='2024-07-01', help='Allocation strategy for vm sizes in SKU profile.')
c.argument('skuprofile_rank', nargs='+', min_api='2024-11-01', help='A list for ranks associated with the SKU profile vm sizes.')
c.argument(
'zone_placement_policy',
arg_type=get_enum_type(['Auto']),
help='Specify the policy for availability zone placement of the virtual machine scale set. '
'When set to Auto, the platform automatically selects the availability zones.'
)
c.argument(
'include_zones',
nargs='+',
help='Specify a list of availability zones that must be considered for placement when '
'--zone-placement-policy is set to Auto. '
'If not specified, all availability zones in the region are considered.'
)
c.argument(
'exclude_zones',
nargs='+',
help='Specify a list of availability zones that must be excluded from placement when '
'--zone-placement-policy is set to Auto. '
'If not specified, no availability zones are excluded.'
)
Comment on lines +875 to +894
c.argument(
'max_zone_count',
type=int,
Expand Down
7 changes: 7 additions & 0 deletions src/azure-cli/azure/cli/command_modules/vm/_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -1935,6 +1935,7 @@ def process_vmss_create_namespace(cmd, namespace):
_validate_vmss_create_automatic_repairs(cmd, namespace)
_validate_vmss_create_host_group(cmd, namespace)
_validate_vmss_create_auto_zone_placement(namespace)
_validate_vmss_auto_zone_placement(namespace)

Comment on lines 1935 to 1939
if namespace.secrets:
_validate_secrets(namespace.secrets, namespace.os_type)
Expand All @@ -1958,6 +1959,12 @@ def validate_vmss_update_namespace(cmd, namespace): # pylint: disable=unused-ar
_validate_vmss_update_automatic_repairs(cmd, namespace)
_validate_capacity_reservation_group(cmd, namespace)
_validate_vm_vmss_update_ephemeral_placement(cmd, namespace)
_validate_vmss_auto_zone_placement(namespace)


def _validate_vmss_auto_zone_placement(namespace):
if namespace.include_zones and namespace.exclude_zones:
raise MutuallyExclusiveArgumentError("You can only specify one of --include-zones and --exclude-zones")
# endregion


Expand Down
16 changes: 15 additions & 1 deletion src/azure-cli/azure/cli/command_modules/vm/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -4677,7 +4677,8 @@ def update_vmss(cmd, resource_group_name, name, license_type=None, no_wait=False
wire_server_access_control_profile_reference_id=None,
imds_access_control_profile_reference_id=None, enable_automatic_zone_balancing=None,
automatic_zone_balancing_strategy=None, automatic_zone_balancing_behavior=None, max_zone_count=None,
instance_percent_policy=None, max_instance_percent=None, **kwargs):
instance_percent_policy=None, max_instance_percent=None,
zone_placement_policy=None, include_zones=None, exclude_zones=None, **kwargs):
from .operations.vmss_vms import convert_show_result_to_snake_case as vmss_vms_convert_show_result_to_snake_case
from .operations.vmss import convert_show_result_to_snake_case as vmss_convert_show_result_to_snake_case
vmss = kwargs['parameters']
Expand Down Expand Up @@ -5169,6 +5170,19 @@ def _output(self, *args, **kwargs):
vmss["resiliency_policy"]["zone_allocation_policy"]["max_instance_percent_per_zone_policy"][
"value"] = max_instance_percent

if zone_placement_policy is not None or include_zones is not None or exclude_zones is not None:
if vmss.get("placement", None) is None:
vmss["placement"] = {}

if zone_placement_policy is not None:
vmss["placement"]["zone_placement_policy"] = zone_placement_policy

if include_zones is not None:
vmss["placement"]["include_zones"] = include_zones

if exclude_zones is not None:
vmss["placement"]["exclude_zones"] = exclude_zones

from .operations.vmss import VMSSCreate
return VMSSCreate(cli_ctx=cmd.cli_ctx)(command_args=vmss)

Expand Down
Loading
Loading