Skip to content

Commit 73addea

Browse files
authored
{Compute} az vm create/update: Add new parameter --enable-user-reboot-scheduled-events to support setting scheduled event policy (#30596)
1 parent aa347a1 commit 73addea

File tree

5 files changed

+3540
-4
lines changed

5 files changed

+3540
-4
lines changed

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

+6
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,12 @@ def load_arguments(self, _):
475475
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.')
476476
c.argument('encryption_identity', help='Resource Id of the user managed identity which can be used for Azure disk encryption')
477477

478+
for scope in ['vm create', 'vm update']:
479+
with self.argument_context(scope) as c:
480+
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.')
481+
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.')
482+
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.')
483+
478484
with self.argument_context('vm create', arg_group='Storage') as c:
479485
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.')
480486
c.argument('attach_data_disks', nargs='+', help='Attach existing data disks to the VM. Can use the name or ID of a managed disk or the URI to an unmanaged disk VHD.')

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

+26-1
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,8 @@ def build_vm_resource( # pylint: disable=too-many-locals, too-many-statements,
307307
enable_vtpm=None, count=None, edge_zone=None, os_disk_delete_option=None, user_data=None,
308308
capacity_reservation_group=None, enable_hibernation=None, v_cpus_available=None, v_cpus_per_core=None,
309309
os_disk_security_encryption_type=None, os_disk_secure_vm_disk_encryption_set=None, disk_controller_type=None,
310-
enable_proxy_agent=None, proxy_agent_mode=None):
310+
enable_proxy_agent=None, proxy_agent_mode=None, additional_scheduled_events=None,
311+
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None):
311312

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

@@ -576,6 +577,30 @@ def _build_storage_profile():
576577
vm_properties = {'hardwareProfile': {'vmSize': size}, 'networkProfile': {'networkInterfaces': nics},
577578
'storageProfile': _build_storage_profile()}
578579

580+
scheduled_events_policy = {}
581+
if additional_scheduled_events is not None:
582+
scheduled_events_policy.update({
583+
"scheduledEventsAdditionalPublishingTargets": {
584+
"eventGridAndResourceGraph": {
585+
"enable": additional_scheduled_events
586+
}
587+
}
588+
})
589+
if enable_user_redeploy_scheduled_events is not None:
590+
scheduled_events_policy.update({
591+
"userInitiatedRedeploy": {
592+
"automaticallyApprove": enable_user_redeploy_scheduled_events
593+
}
594+
})
595+
if enable_user_reboot_scheduled_events is not None:
596+
scheduled_events_policy.update({
597+
"userInitiatedReboot": {
598+
"automaticallyApprove": enable_user_reboot_scheduled_events
599+
}
600+
})
601+
if scheduled_events_policy:
602+
vm_properties['scheduledEventsPolicy'] = scheduled_events_policy
603+
579604
vm_size_properties = {}
580605
if v_cpus_available is not None:
581606
vm_size_properties['vCPUsAvailable'] = v_cpus_available

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

+40-3
Original file line numberDiff line numberDiff line change
@@ -822,7 +822,9 @@ def create_vm(cmd, vm_name, resource_group_name, image=None, size='Standard_DS1_
822822
os_disk_security_encryption_type=None, os_disk_secure_vm_disk_encryption_set=None,
823823
disk_controller_type=None, disable_integrity_monitoring_autoupgrade=False, enable_proxy_agent=None,
824824
proxy_agent_mode=None, source_snapshots_or_disks=None, source_snapshots_or_disks_size_gb=None,
825-
source_disk_restore_point=None, source_disk_restore_point_size_gb=None, ssh_key_type=None):
825+
source_disk_restore_point=None, source_disk_restore_point_size_gb=None, ssh_key_type=None,
826+
additional_scheduled_events=None, enable_user_reboot_scheduled_events=None,
827+
enable_user_redeploy_scheduled_events=None):
826828

827829
from azure.cli.core.commands.client_factory import get_subscription_id
828830
from azure.cli.core.util import random_string, hash_string
@@ -1044,7 +1046,9 @@ def create_vm(cmd, vm_name, resource_group_name, image=None, size='Standard_DS1_
10441046
os_disk_security_encryption_type=os_disk_security_encryption_type,
10451047
os_disk_secure_vm_disk_encryption_set=os_disk_secure_vm_disk_encryption_set,
10461048
disk_controller_type=disk_controller_type, enable_proxy_agent=enable_proxy_agent,
1047-
proxy_agent_mode=proxy_agent_mode)
1049+
proxy_agent_mode=proxy_agent_mode, additional_scheduled_events=additional_scheduled_events,
1050+
enable_user_reboot_scheduled_events=enable_user_reboot_scheduled_events,
1051+
enable_user_redeploy_scheduled_events=enable_user_redeploy_scheduled_events)
10481052

10491053
vm_resource['dependsOn'] = vm_dependencies
10501054

@@ -1563,7 +1567,8 @@ def update_vm(cmd, resource_group_name, vm_name, os_disk=None, disk_caching=None
15631567
enable_vtpm=None, user_data=None, capacity_reservation_group=None,
15641568
dedicated_host=None, dedicated_host_group=None, size=None, ephemeral_os_disk_placement=None,
15651569
enable_hibernation=None, v_cpus_available=None, v_cpus_per_core=None, disk_controller_type=None,
1566-
security_type=None, enable_proxy_agent=None, proxy_agent_mode=None, **kwargs):
1570+
security_type=None, enable_proxy_agent=None, proxy_agent_mode=None, additional_scheduled_events=None,
1571+
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None, **kwargs):
15671572
from azure.mgmt.core.tools import parse_resource_id, resource_id, is_valid_resource_id
15681573
from ._vm_utils import update_write_accelerator_settings, update_disk_caching
15691574
SecurityProfile, UefiSettings = cmd.get_models('SecurityProfile', 'UefiSettings')
@@ -1726,6 +1731,38 @@ def update_vm(cmd, resource_group_name, vm_name, os_disk=None, disk_caching=None
17261731
if disk_controller_type is not None:
17271732
vm.storage_profile.disk_controller_type = disk_controller_type
17281733

1734+
if additional_scheduled_events is not None or \
1735+
enable_user_reboot_scheduled_events is not None or enable_user_redeploy_scheduled_events is not None:
1736+
if vm.scheduled_events_policy is None:
1737+
ScheduledEventsPolicy = cmd.get_models('ScheduledEventsPolicy')
1738+
UserInitiatedRedeploy = cmd.get_models('UserInitiatedRedeploy')
1739+
UserInitiatedReboot = cmd.get_models('UserInitiatedReboot')
1740+
EventGridAndResourceGraph = cmd.get_models('EventGridAndResourceGraph')
1741+
ScheduledEventsAdditionalPublishingTargets = cmd.get_models('ScheduledEventsAdditionalPublishingTargets')
1742+
vm.scheduled_events_policy = ScheduledEventsPolicy()
1743+
vm.scheduled_events_policy.scheduled_events_additional_publishing_targets = \
1744+
ScheduledEventsAdditionalPublishingTargets()
1745+
vm.scheduled_events_policy.scheduled_events_additional_publishing_targets.\
1746+
event_grid_and_resource_graph = EventGridAndResourceGraph()
1747+
vm.scheduled_events_policy.user_initiated_reboot = UserInitiatedReboot()
1748+
vm.scheduled_events_policy.user_initiated_redeploy = UserInitiatedRedeploy()
1749+
vm.scheduled_events_policy.scheduled_events_additional_publishing_targets.event_grid_and_resource_graph.\
1750+
enable = additional_scheduled_events if additional_scheduled_events is not None else False
1751+
vm.scheduled_events_policy.user_initiated_redeploy.automatically_approve = \
1752+
enable_user_redeploy_scheduled_events if enable_user_redeploy_scheduled_events is not None else False
1753+
vm.scheduled_events_policy.user_initiated_reboot.automatically_approve = \
1754+
enable_user_reboot_scheduled_events if enable_user_reboot_scheduled_events is not None else False
1755+
else:
1756+
if additional_scheduled_events is not None:
1757+
vm.scheduled_events_policy.scheduled_events_additional_publishing_targets.\
1758+
event_grid_and_resource_graph.enable = additional_scheduled_events
1759+
if enable_user_redeploy_scheduled_events is not None:
1760+
vm.scheduled_events_policy.user_initiated_redeploy.automatically_approve = \
1761+
enable_user_redeploy_scheduled_events
1762+
if enable_user_reboot_scheduled_events is not None:
1763+
vm.scheduled_events_policy.user_initiated_reboot.automatically_approve = \
1764+
enable_user_reboot_scheduled_events
1765+
17291766
client = _compute_client_factory(cmd.cli_ctx, aux_subscriptions=aux_subscriptions)
17301767
return sdk_no_wait(no_wait, client.virtual_machines.begin_create_or_update, resource_group_name, vm_name, **kwargs)
17311768
# endregion

0 commit comments

Comments
 (0)