Skip to content

Commit f0643c2

Browse files
authored
[Compute] az vmss create/update: Add --skuprofile-rank for prioritized instance mix (#31255)
1 parent 6d1171d commit f0643c2

File tree

8 files changed

+1685
-243
lines changed

8 files changed

+1685
-243
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -764,7 +764,8 @@ def load_arguments(self, _):
764764
c.argument('os_disk_delete_option', arg_type=get_enum_type(self.get_models('DiskDeleteOptionTypes')), min_api='2022-03-01', arg_group='Storage', help='Specify whether OS disk should be deleted or detached upon VMSS Flex deletion (This feature is only for VMSS with flexible orchestration mode).')
765765
c.argument('data_disk_delete_option', arg_type=get_enum_type(self.get_models('DiskDeleteOptionTypes')), min_api='2022-03-01', arg_group='Storage', help='Specify whether data disk should be deleted or detached upon VMSS Flex deletion (This feature is only for VMSS with flexible orchestration mode)')
766766
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.')
767-
c.argument('skuprofile_allostrat', options_list=['--skuprofile-allocation-strategy', '--sku-allocat-strat'], arg_type=get_enum_type(['LowestPrice', 'CapacityOptimized']), min_api='2024-07-01', help='Allocation strategy for vm sizes in SKU profile.')
767+
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.')
768+
c.argument('skuprofile_rank', nargs='+', min_api='2024-11-01', help='A list for ranks associated with the SKU profile vm sizes.')
768769

769770
with self.argument_context('vmss create', arg_group='Network Balancer') as c:
770771
c.argument('application_gateway', help='Name to use when creating a new application gateway (default) or referencing an existing one. Can also reference an existing application gateway by ID or specify "" for none.', options_list=['--app-gateway'])
@@ -813,7 +814,8 @@ def load_arguments(self, _):
813814
c.argument('ephemeral_os_disk_option', options_list=['--ephemeral-os-disk-option', '--ephemeral-option'], arg_type=get_enum_type(self.get_models('DiffDiskOptions')), min_api='2024-03-01', help='Specify the ephemeral disk settings for operating system disk.')
814815
c.argument('zones', zones_type, min_api='2023-03-01')
815816
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.')
816-
c.argument('skuprofile_allostrat', options_list=['--skuprofile-allocation-strategy', '--sku-allocat-strat'], arg_type=get_enum_type(['LowestPrice', 'CapacityOptimized']), min_api='2024-07-01', help='Allocation strategy for vm sizes in SKU profile.')
817+
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.')
818+
c.argument('skuprofile_rank', nargs='+', min_api='2024-11-01', help='A list for ranks associated with the SKU profile vm sizes.')
817819

818820
with self.argument_context('vmss update', min_api='2018-10-01', arg_group='Automatic Repairs') as c:
819821

src/azure-cli/azure/cli/command_modules/vm/_template_builder.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1039,7 +1039,8 @@ def build_vmss_resource(cmd, name, computer_name_prefix, location, tags, overpro
10391039
security_posture_reference_id=None, security_posture_reference_exclude_extensions=None,
10401040
enable_resilient_vm_creation=None, enable_resilient_vm_deletion=None,
10411041
additional_scheduled_events=None, enable_user_reboot_scheduled_events=None,
1042-
enable_user_redeploy_scheduled_events=None, skuprofile_vmsizes=None, skuprofile_allostrat=None,
1042+
enable_user_redeploy_scheduled_events=None, skuprofile_vmsizes=None,
1043+
skuprofile_allostrat=None, skuprofile_rank=None,
10431044
security_posture_reference_is_overridable=None, zone_balance=None, wire_server_mode=None,
10441045
imds_mode=None, wire_server_access_control_profile_reference_id=None,
10451046
imds_access_control_profile_reference_id=None, enable_automatic_zone_balancing=None,
@@ -1649,6 +1650,16 @@ def build_vmss_resource(cmd, name, computer_name_prefix, location, tags, overpro
16491650
'name': vm_size
16501651
}
16511652
sku_profile_vmsizes_list.append(vmsize_obj)
1653+
1654+
if skuprofile_rank:
1655+
if len(skuprofile_rank) != len(skuprofile_vmsizes):
1656+
raise ValidationError(
1657+
'The SKU profile rank list does not specify a rank for every VM size. ' +
1658+
'The number of ranks must match the number of VM sizes.')
1659+
1660+
for vm_size, rank in zip(sku_profile_vmsizes_list, skuprofile_rank):
1661+
vm_size['rank'] = rank
1662+
16521663
sku_profile = {
16531664
'vmSizes': sku_profile_vmsizes_list,
16541665
'allocationStrategy': skuprofile_allostrat

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3247,7 +3247,8 @@ def create_vmss(cmd, vmss_name, resource_group_name, image=None,
32473247
security_posture_reference_id=None, security_posture_reference_exclude_extensions=None,
32483248
enable_resilient_creation=None, enable_resilient_deletion=None,
32493249
additional_scheduled_events=None, enable_user_reboot_scheduled_events=None,
3250-
enable_user_redeploy_scheduled_events=None, skuprofile_vmsizes=None, skuprofile_allostrat=None,
3250+
enable_user_redeploy_scheduled_events=None, skuprofile_vmsizes=None,
3251+
skuprofile_allostrat=None, skuprofile_rank=None,
32513252
security_posture_reference_is_overridable=None, zone_balance=None, wire_server_mode=None,
32523253
imds_mode=None, wire_server_access_control_profile_reference_id=None,
32533254
imds_access_control_profile_reference_id=None, enable_automatic_zone_balancing=None,
@@ -3566,6 +3567,7 @@ def _get_public_ip_address_allocation(value, sku):
35663567
enable_user_reboot_scheduled_events=enable_user_reboot_scheduled_events,
35673568
enable_user_redeploy_scheduled_events=enable_user_redeploy_scheduled_events,
35683569
skuprofile_vmsizes=skuprofile_vmsizes, skuprofile_allostrat=skuprofile_allostrat,
3570+
skuprofile_rank=skuprofile_rank,
35693571
security_posture_reference_is_overridable=security_posture_reference_is_overridable,
35703572
zone_balance=zone_balance, wire_server_mode=wire_server_mode, imds_mode=imds_mode,
35713573
wire_server_access_control_profile_reference_id=wire_server_access_control_profile_reference_id,
@@ -4021,7 +4023,8 @@ def update_vmss(cmd, resource_group_name, name, license_type=None, no_wait=False
40214023
ephemeral_os_disk=None, ephemeral_os_disk_option=None, zones=None, additional_scheduled_events=None,
40224024
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None,
40234025
upgrade_policy_mode=None, enable_auto_os_upgrade=None, skuprofile_vmsizes=None,
4024-
skuprofile_allostrat=None, security_posture_reference_is_overridable=None, zone_balance=None,
4026+
skuprofile_allostrat=None, skuprofile_rank=None,
4027+
security_posture_reference_is_overridable=None, zone_balance=None,
40254028
wire_server_mode=None, imds_mode=None, wire_server_access_control_profile_reference_id=None,
40264029
imds_access_control_profile_reference_id=None, enable_automatic_zone_balancing=None,
40274030
automatic_zone_balancing_strategy=None, automatic_zone_balancing_behavior=None, **kwargs):
@@ -4286,6 +4289,11 @@ def update_vmss(cmd, resource_group_name, name, license_type=None, no_wait=False
42864289
}
42874290
sku_profile_vmsizes_list.append(vmsize_obj)
42884291
sku_profile['vmSizes'] = sku_profile_vmsizes_list
4292+
4293+
if skuprofile_rank:
4294+
for vm_size, rank in zip(sku_profile_vmsizes_list, skuprofile_rank):
4295+
vm_size['rank'] = rank
4296+
42894297
if skuprofile_allostrat is not None:
42904298
sku_profile['allocationStrategy'] = skuprofile_allostrat
42914299
vmss.sku_profile = sku_profile

0 commit comments

Comments
 (0)