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
4 changes: 4 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 @@ -471,12 +471,16 @@ def load_arguments(self, _):
c.argument('enable_vtpm', enable_vtpm_type)
c.argument('user_data', help='UserData for the VM. It can be passed in as file or string.', completer=FilesCompleter(), type=file_type, min_api='2021-03-01')
c.argument('enable_hibernation', arg_type=get_three_state_flag(), min_api='2021-03-01', help='The flag that enable or disable hibernation capability on the VM.')
c.argument('zone_placement_policy', arg_type=get_enum_type(self.get_models('ZonePlacementPolicyType')), min_api='2024-11-01', help="Specify the policy for virtual machine's placement in availability zone")
c.argument('include_zones', nargs='+', min_api='2024-11-01', help='If "--zone-placement-policy" is set to "Any", availability zone selected by the system must be present in the list of availability zones passed with "--include-zones". If "--include-zones" is not provided, all availability zones in region will be considered for selection.')
c.argument('exclude_zones', nargs='+', min_api='2024-11-01', help='If "--zone-placement-policy" is set to "Any", availability zone selected by the system must not be present in the list of availability zones passed with "excludeZones". If "--exclude-zones" is not provided, all availability zones in region will be considered for selection.')

for scope in ['vm create', 'vm update']:
with self.argument_context(scope) as c:
c.argument('additional_scheduled_events', options_list=['--additional-scheduled-events', '--additional-events'], arg_type=get_three_state_flag(), min_api='2024-07-01', help='The configuration parameter used while creating event grid and resource graph scheduled event setting.')
c.argument('enable_user_reboot_scheduled_events', options_list=['--enable-user-reboot-scheduled-events', '--enable-reboot'], arg_type=get_three_state_flag(), min_api='2024-07-01', help='The configuration parameter used while publishing scheduled events additional publishing targets.')
c.argument('enable_user_redeploy_scheduled_events', options_list=['--enable-user-redeploy-scheduled-events', '--enable-redeploy'], arg_type=get_three_state_flag(), min_api='2024-07-01', help='The configuration parameter used while creating user initiated redeploy scheduled event setting creation.')
c.argument('align_regional_disks_to_vm_zone', options_list=['--align-regional-disks-to-vm-zone', '--align-regional-disks'], arg_type=get_three_state_flag(), min_api='2024-11-01', help='Specify whether the regional disks should be aligned/moved to the VM zone. This is applicable only for VMs with placement property set. Please note that this change is irreversible.')

with self.argument_context('vm create', arg_group='Storage') as c:
c.argument('attach_os_disk', help='Attach an existing OS disk to the VM. Can use the name or ID of a managed disk or the URI to an unmanaged disk VHD.')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,8 @@ def build_vm_resource( # pylint: disable=too-many-locals, too-many-statements,
capacity_reservation_group=None, enable_hibernation=None, v_cpus_available=None, v_cpus_per_core=None,
os_disk_security_encryption_type=None, os_disk_secure_vm_disk_encryption_set=None, disk_controller_type=None,
enable_proxy_agent=None, proxy_agent_mode=None, additional_scheduled_events=None,
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None):
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None,
zone_placement_policy=None, include_zones=None, exclude_zones=None, align_regional_disks_to_vm_zone=None):

os_caching = disk_info['os'].get('caching')

Expand Down Expand Up @@ -572,6 +573,9 @@ def _build_storage_profile():
if disk_controller_type is not None:
profile['diskControllerType'] = disk_controller_type

if align_regional_disks_to_vm_zone is not None:
profile['alignRegionalDisksToVMZone'] = align_regional_disks_to_vm_zone

return profile

vm_properties = {'hardwareProfile': {'vmSize': size}, 'networkProfile': {'networkInterfaces': nics},
Expand Down Expand Up @@ -727,6 +731,16 @@ def _build_storage_profile():
if edge_zone:
vm['extendedLocation'] = edge_zone

placement = {}
if zone_placement_policy is not None:
placement['zonePlacementPolicy'] = zone_placement_policy
if include_zones is not None:
placement['includeZones'] = include_zones
if exclude_zones is not None:
placement['excludeZones'] = exclude_zones
if placement:
vm['Placement'] = placement

return vm


Expand Down
13 changes: 10 additions & 3 deletions src/azure-cli/azure/cli/command_modules/vm/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -824,7 +824,8 @@ def create_vm(cmd, vm_name, resource_group_name, image=None, size='Standard_DS1_
proxy_agent_mode=None, source_snapshots_or_disks=None, source_snapshots_or_disks_size_gb=None,
source_disk_restore_point=None, source_disk_restore_point_size_gb=None, ssh_key_type=None,
additional_scheduled_events=None, enable_user_reboot_scheduled_events=None,
enable_user_redeploy_scheduled_events=None):
enable_user_redeploy_scheduled_events=None, zone_placement_policy=None, include_zones=None,
exclude_zones=None, align_regional_disks_to_vm_zone=None):

from azure.cli.core.commands.client_factory import get_subscription_id
from azure.cli.core.util import random_string, hash_string
Expand Down Expand Up @@ -1048,7 +1049,9 @@ def create_vm(cmd, vm_name, resource_group_name, image=None, size='Standard_DS1_
disk_controller_type=disk_controller_type, enable_proxy_agent=enable_proxy_agent,
proxy_agent_mode=proxy_agent_mode, additional_scheduled_events=additional_scheduled_events,
enable_user_reboot_scheduled_events=enable_user_reboot_scheduled_events,
enable_user_redeploy_scheduled_events=enable_user_redeploy_scheduled_events)
enable_user_redeploy_scheduled_events=enable_user_redeploy_scheduled_events,
zone_placement_policy=zone_placement_policy, include_zones=include_zones, exclude_zones=exclude_zones,
align_regional_disks_to_vm_zone=align_regional_disks_to_vm_zone)

vm_resource['dependsOn'] = vm_dependencies

Expand Down Expand Up @@ -1576,7 +1579,8 @@ def update_vm(cmd, resource_group_name, vm_name, os_disk=None, disk_caching=None
dedicated_host=None, dedicated_host_group=None, size=None, ephemeral_os_disk_placement=None,
enable_hibernation=None, v_cpus_available=None, v_cpus_per_core=None, disk_controller_type=None,
security_type=None, enable_proxy_agent=None, proxy_agent_mode=None, additional_scheduled_events=None,
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None, **kwargs):
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None,
align_regional_disks_to_vm_zone=None, **kwargs):
from azure.mgmt.core.tools import parse_resource_id, resource_id, is_valid_resource_id
from ._vm_utils import update_write_accelerator_settings, update_disk_caching
SecurityProfile, UefiSettings = cmd.get_models('SecurityProfile', 'UefiSettings')
Expand All @@ -1597,6 +1601,9 @@ def update_vm(cmd, resource_group_name, vm_name, os_disk=None, disk_caching=None
vm.storage_profile.os_disk.managed_disk.id = disk_id
vm.storage_profile.os_disk.name = disk_name

if align_regional_disks_to_vm_zone is not None:
vm.storage_profile.align_regional_disks_to_vm_zone = align_regional_disks_to_vm_zone

from ._constants import COMPATIBLE_SECURITY_TYPE_VALUE
if security_type == "TrustedLaunch":
from azure.cli.core.azclierror import InvalidArgumentValueError
Expand Down
Loading
Loading