Skip to content

Commit

Permalink
{Compute} az vmss create/update: Add new parameter `--enable-user-r…
Browse files Browse the repository at this point in the history
…eboot-scheduled-events` to support setting scheduled event policy (Azure#29122)
  • Loading branch information
Jing-song authored Jun 7, 2024
1 parent 55a7234 commit e6b657e
Show file tree
Hide file tree
Showing 5 changed files with 2,491 additions and 4 deletions.
3 changes: 3 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,9 @@ def load_arguments(self, _):
c.argument('enable_osimage_notification', arg_type=get_three_state_flag(), min_api='2022-11-01', help='Specify whether the OS Image Scheduled event is enabled or disabled.')
c.argument('enable_resilient_creation', arg_type=get_three_state_flag(), min_api='2023-09-01', help='Automatically recover customers from OS Provisioning Timeout and VM Start Timeout errors experienced during a VM Create operation by deleting and recreating the affected VM.')
c.argument('enable_resilient_deletion', arg_type=get_three_state_flag(), min_api='2023-09-01', help='Retry VM Delete requests asynchronously in the event of a failed delete operation.')
c.argument('additional_scheduled_events', options_list=['--additional-scheduled-events', '--scheduled-event-additional-publishing-target-event-grid-and-resource-graph', '--additional-events'], arg_type=get_three_state_flag(), min_api='2024-03-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-03-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-03-01', help='The configuration parameter used while creating user initiated redeploy scheduled event setting creation.')

for scope, help_prefix in [('vmss update', 'Update the'), ('vmss wait', 'Wait on the')]:
with self.argument_context(scope) as c:
Expand Down
28 changes: 27 additions & 1 deletion src/azure-cli/azure/cli/command_modules/vm/_template_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -968,7 +968,9 @@ def build_vmss_resource(cmd, name, computer_name_prefix, location, tags, overpro
enable_osimage_notification=None, max_surge=None, enable_hibernation=None,
enable_auto_os_upgrade=None, enable_proxy_agent=None, proxy_agent_mode=None,
security_posture_reference_id=None, security_posture_reference_exclude_extensions=None,
enable_resilient_vm_creation=None, enable_resilient_vm_deletion=None):
enable_resilient_vm_creation=None, enable_resilient_vm_deletion=None,
additional_scheduled_events=None, enable_user_reboot_scheduled_events=None,
enable_user_redeploy_scheduled_events=None):

# Build IP configuration
ip_configuration = {}
Expand Down Expand Up @@ -1421,6 +1423,30 @@ def build_vmss_resource(cmd, name, computer_name_prefix, location, tags, overpro
})
virtual_machine_profile['scheduledEventsProfile'] = scheduled_events_profile

scheduled_events_policy = {}
if additional_scheduled_events is not None:
scheduled_events_policy.update({
"scheduledEventsAdditionalPublishingTargets": {
"eventGridAndResourceGraph": {
"enable": additional_scheduled_events
}
}
})
if enable_user_redeploy_scheduled_events is not None:
scheduled_events_policy.update({
"userInitiatedRedeploy": {
"automaticallyApprove": enable_user_redeploy_scheduled_events
}
})
if enable_user_reboot_scheduled_events is not None:
scheduled_events_policy.update({
"userInitiatedReboot": {
"automaticallyApprove": enable_user_reboot_scheduled_events
}
})
if scheduled_events_policy:
vmss_properties['scheduledEventsPolicy'] = scheduled_events_policy

if automatic_repairs_grace_period is not None or automatic_repairs_action is not None:
automatic_repairs_policy = {
'enabled': 'true',
Expand Down
33 changes: 30 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 @@ -3179,7 +3179,9 @@ def create_vmss(cmd, vmss_name, resource_group_name, image=None,
enable_osimage_notification=None, max_surge=None, disable_integrity_monitoring_autoupgrade=False,
enable_hibernation=None, enable_proxy_agent=None, proxy_agent_mode=None,
security_posture_reference_id=None, security_posture_reference_exclude_extensions=None,
enable_resilient_creation=None, enable_resilient_deletion=None):
enable_resilient_creation=None, enable_resilient_deletion=None,
additional_scheduled_events=None, enable_user_reboot_scheduled_events=None,
enable_user_redeploy_scheduled_events=None):
from azure.cli.core.commands.client_factory import get_subscription_id
from azure.cli.core.util import random_string, hash_string
from azure.cli.core.commands.arm import ArmTemplateBuilder
Expand Down Expand Up @@ -3489,7 +3491,10 @@ def _get_public_ip_address_allocation(value, sku):
security_posture_reference_id=security_posture_reference_id,
security_posture_reference_exclude_extensions=security_posture_reference_exclude_extensions,
enable_resilient_vm_creation=enable_resilient_creation,
enable_resilient_vm_deletion=enable_resilient_deletion)
enable_resilient_vm_deletion=enable_resilient_deletion,
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)

vmss_resource['dependsOn'] = vmss_dependencies

Expand Down Expand Up @@ -3926,7 +3931,8 @@ def update_vmss(cmd, resource_group_name, name, license_type=None, no_wait=False
security_type=None, enable_proxy_agent=None, proxy_agent_mode=None,
security_posture_reference_id=None, security_posture_reference_exclude_extensions=None,
max_surge=None, enable_resilient_creation=None, enable_resilient_deletion=None,
ephemeral_os_disk=None, ephemeral_os_disk_option=None, zones=None, **kwargs):
ephemeral_os_disk=None, ephemeral_os_disk_option=None, zones=None, additional_scheduled_events=None,
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None, **kwargs):
vmss = kwargs['parameters']
aux_subscriptions = None
# pylint: disable=too-many-boolean-expressions
Expand Down Expand Up @@ -3993,6 +3999,27 @@ def update_vmss(cmd, resource_group_name, name, license_type=None, no_wait=False
TerminateNotificationProfile(not_before_timeout=terminate_notification_time,
enable=enable_terminate_notification)

if additional_scheduled_events is not None or \
enable_user_reboot_scheduled_events is not None or enable_user_redeploy_scheduled_events is not None:
if vmss.scheduled_events_policy is None:
ScheduledEventsPolicy = cmd.get_models('ScheduledEventsPolicy')
UserInitiatedRedeploy = cmd.get_models('UserInitiatedRedeploy')
UserInitiatedReboot = cmd.get_models('UserInitiatedReboot')
EventGridAndResourceGraph = cmd.get_models('EventGridAndResourceGraph')
ScheduledEventsAdditionalPublishingTargets = cmd.get_models('ScheduledEventsAdditionalPublishingTargets')
vmss.scheduled_events_policy = ScheduledEventsPolicy()
vmss.scheduled_events_policy.scheduled_events_additional_publishing_targets = \
ScheduledEventsAdditionalPublishingTargets()
vmss.scheduled_events_policy.scheduled_events_additional_publishing_targets.\
event_grid_and_resource_graph = EventGridAndResourceGraph()
vmss.scheduled_events_policy.user_initiated_reboot = UserInitiatedReboot()
vmss.scheduled_events_policy.user_initiated_redeploy = UserInitiatedRedeploy()
vmss.scheduled_events_policy.scheduled_events_additional_publishing_targets.\
event_grid_and_resource_graph.enable = additional_scheduled_events
vmss.scheduled_events_policy.user_initiated_redeploy.automatically_approve = \
enable_user_redeploy_scheduled_events
vmss.scheduled_events_policy.user_initiated_reboot.automatically_approve = enable_user_reboot_scheduled_events

if enable_osimage_notification is not None:
if vmss.virtual_machine_profile.scheduled_events_profile is None:
vmss.virtual_machine_profile.scheduled_events_profile = cmd.get_models('ScheduledEventsProfile')()
Expand Down
Loading

0 comments on commit e6b657e

Please sign in to comment.