Skip to content

Commit af752da

Browse files
yanzhuddCustardTart32
authored andcommitted
[Compute] az vm available-set create/update: Add support for scheduled event profile (Azure#30835)
1 parent 5f524b1 commit af752da

File tree

5 files changed

+973
-10
lines changed

5 files changed

+973
-10
lines changed

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

+6
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,12 @@ def load_arguments(self, _):
408408
if self.supported_api_version(max_api='2016-04-30-preview', operation_group='virtual_machines'):
409409
c.argument('name', name_arg_type, id_part='name', completer=get_resource_name_completion_list('Microsoft.Compute/availabilitySets'), help='Name of the availability set')
410410
c.argument('availability_set_name', options_list=['--availability-set-name'])
411+
412+
for scope in ['vm availability-set create', 'vm availability-set update']:
413+
with self.argument_context(scope) as c:
414+
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.')
415+
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.')
416+
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.')
411417
# endregion
412418

413419
# region VirtualMachines

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

+33-6
Original file line numberDiff line numberDiff line change
@@ -1614,30 +1614,57 @@ def build_vmss_resource(cmd, name, computer_name_prefix, location, tags, overpro
16141614

16151615

16161616
def build_av_set_resource(cmd, name, location, tags, platform_update_domain_count,
1617-
platform_fault_domain_count, unmanaged, proximity_placement_group=None):
1617+
platform_fault_domain_count, unmanaged, proximity_placement_group=None,
1618+
additional_scheduled_events=None,
1619+
enable_user_reboot_scheduled_events=None,
1620+
enable_user_redeploy_scheduled_events=None):
16181621
av_set = {
16191622
'type': 'Microsoft.Compute/availabilitySets',
16201623
'name': name,
16211624
'location': location,
16221625
'tags': tags,
16231626
'apiVersion': cmd.get_api_version(ResourceType.MGMT_COMPUTE, operation_group='availability_sets'),
1624-
"properties": {
1625-
'platformFaultDomainCount': platform_fault_domain_count,
1626-
}
16271627
}
16281628

16291629
if cmd.supported_api_version(min_api='2016-04-30-preview', operation_group='availability_sets'):
16301630
av_set['sku'] = {
16311631
'name': 'Classic' if unmanaged else 'Aligned'
16321632
}
16331633

1634+
properties = {"platformFaultDomainCount": platform_fault_domain_count}
1635+
scheduled_events_policy = {}
1636+
if additional_scheduled_events is not None:
1637+
scheduled_events_policy.update({
1638+
"scheduledEventsAdditionalPublishingTargets": {
1639+
"eventGridAndResourceGraph": {
1640+
"enable": additional_scheduled_events
1641+
}
1642+
}
1643+
})
1644+
if enable_user_redeploy_scheduled_events is not None:
1645+
scheduled_events_policy.update({
1646+
"userInitiatedRedeploy": {
1647+
"automaticallyApprove": enable_user_redeploy_scheduled_events
1648+
}
1649+
})
1650+
if enable_user_reboot_scheduled_events is not None:
1651+
scheduled_events_policy.update({
1652+
"userInitiatedReboot": {
1653+
"automaticallyApprove": enable_user_reboot_scheduled_events
1654+
}
1655+
})
1656+
1657+
if scheduled_events_policy:
1658+
properties['scheduledEventsPolicy'] = scheduled_events_policy
1659+
16341660
# server defaults the UD to 5 unless set otherwise
16351661
if platform_update_domain_count is not None:
1636-
av_set['properties']['platformUpdateDomainCount'] = platform_update_domain_count
1662+
properties['platformUpdateDomainCount'] = platform_update_domain_count
16371663

16381664
if proximity_placement_group:
1639-
av_set['properties']['proximityPlacementGroup'] = {'id': proximity_placement_group}
1665+
properties['proximityPlacementGroup'] = {'id': proximity_placement_group}
16401666

1667+
av_set["properties"] = properties
16411668
return av_set
16421669

16431670

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

+37-4
Original file line numberDiff line numberDiff line change
@@ -1809,7 +1809,8 @@ def convert_av_set_to_managed_disk(cmd, resource_group_name, availability_set_na
18091809

18101810
def create_av_set(cmd, availability_set_name, resource_group_name, platform_fault_domain_count=2,
18111811
platform_update_domain_count=None, location=None, proximity_placement_group=None, unmanaged=False,
1812-
no_wait=False, tags=None, validate=False):
1812+
no_wait=False, tags=None, validate=False, additional_scheduled_events=None,
1813+
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None):
18131814
from azure.cli.core.util import random_string
18141815
from azure.cli.core.commands.arm import ArmTemplateBuilder
18151816
from azure.cli.command_modules.vm._template_builder import build_av_set_resource
@@ -1822,7 +1823,10 @@ def create_av_set(cmd, availability_set_name, resource_group_name, platform_faul
18221823
av_set_resource = build_av_set_resource(cmd, availability_set_name, location, tags,
18231824
platform_update_domain_count,
18241825
platform_fault_domain_count, unmanaged,
1825-
proximity_placement_group=proximity_placement_group)
1826+
proximity_placement_group=proximity_placement_group,
1827+
additional_scheduled_events=additional_scheduled_events,
1828+
enable_user_reboot_scheduled_events=enable_user_reboot_scheduled_events,
1829+
enable_user_redeploy_scheduled_events=enable_user_redeploy_scheduled_events)
18261830
master_template.add_resource(av_set_resource)
18271831

18281832
template = master_template.build()
@@ -1851,9 +1855,38 @@ def create_av_set(cmd, availability_set_name, resource_group_name, platform_faul
18511855
return compute_client.availability_sets.get(resource_group_name, availability_set_name)
18521856

18531857

1854-
def update_av_set(instance, resource_group_name, proximity_placement_group=None):
1858+
def update_av_set(cmd, instance, resource_group_name, proximity_placement_group=None,
1859+
additional_scheduled_events=None, enable_user_reboot_scheduled_events=None,
1860+
enable_user_redeploy_scheduled_events=None):
18551861
if proximity_placement_group is not None:
1856-
instance.proximity_placement_group = {'id': proximity_placement_group}
1862+
instance.proximity_placement_group = cmd.get_models('SubResource')(id=proximity_placement_group)
1863+
1864+
if instance.scheduled_events_policy is None and (
1865+
additional_scheduled_events is not None or enable_user_reboot_scheduled_events is not None or
1866+
enable_user_redeploy_scheduled_events is not None):
1867+
ScheduledEventsPolicy = cmd.get_models('ScheduledEventsPolicy')
1868+
instance.scheduled_events_policy = ScheduledEventsPolicy()
1869+
1870+
if additional_scheduled_events is not None:
1871+
ScheduledEventsAdditionalPublishingTargets = cmd.get_models('ScheduledEventsAdditionalPublishingTargets')
1872+
EventGridAndResourceGraph = cmd.get_models('EventGridAndResourceGraph')
1873+
instance.scheduled_events_policy.scheduled_events_additional_publishing_targets = \
1874+
ScheduledEventsAdditionalPublishingTargets(
1875+
event_grid_and_resource_graph=EventGridAndResourceGraph(enable=additional_scheduled_events)
1876+
)
1877+
1878+
if enable_user_reboot_scheduled_events is not None:
1879+
UserInitiatedReboot = cmd.get_models('UserInitiatedReboot')
1880+
instance.scheduled_events_policy.user_initiated_reboot = UserInitiatedReboot(
1881+
automatically_approve=enable_user_reboot_scheduled_events
1882+
)
1883+
1884+
if enable_user_redeploy_scheduled_events is not None:
1885+
UserInitiatedRedeploy = cmd.get_models('UserInitiatedRedeploy')
1886+
instance.scheduled_events_policy.user_initiated_redeploy = UserInitiatedRedeploy(
1887+
automatically_approve=enable_user_redeploy_scheduled_events
1888+
)
1889+
18571890
return instance
18581891

18591892

0 commit comments

Comments
 (0)