Skip to content
Open
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: 3 additions & 1 deletion src/azure-cli/azure/cli/command_modules/vm/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,9 @@ def load_arguments(self, _):
c.argument('availability_set_name', name_arg_type, validator=get_default_location_from_resource_group, help='Name of the availability set')
c.argument('platform_update_domain_count', type=int, help='Update Domain count. If unspecified, the server will pick the most optimal number like 5.')
c.argument('platform_fault_domain_count', type=int, help='Fault Domain count.')
c.argument('validate', help='Generate and validate the ARM template without creating any resources.', action='store_true')
c.argument('validate', help='[Deprecated] Generate and validate the ARM template without creating any resources. '
'This option is deprecated and will be removed in a future release as this command '
'no longer uses ARM templates.', action='store_true')
c.argument('unmanaged', action='store_true', min_api='2016-04-30-preview', help='contained VMs should use unmanaged disks')
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.')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from .__cmd_group import *
from ._cancel_migration_to_vmss import *
from ._convert_to_vmss import *
from ._create import *
from ._delete import *
from ._list import *
from ._list_sizes import *
Expand Down

Large diffs are not rendered by default.

95 changes: 57 additions & 38 deletions src/azure-cli/azure/cli/command_modules/vm/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -2095,51 +2095,70 @@ def create_av_set(cmd, availability_set_name, resource_group_name, platform_faul
platform_update_domain_count=None, location=None, proximity_placement_group=None, unmanaged=False,
no_wait=False, tags=None, validate=False, additional_scheduled_events=None,
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None):
from azure.cli.core.util import random_string
from azure.cli.core.commands.arm import ArmTemplateBuilder
from azure.cli.command_modules.vm._template_builder import build_av_set_resource

tags = tags or {}

# Build up the ARM template
master_template = ArmTemplateBuilder()

av_set_resource = build_av_set_resource(cmd, availability_set_name, location, tags,
platform_update_domain_count,
platform_fault_domain_count, unmanaged,
proximity_placement_group=proximity_placement_group,
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)
master_template.add_resource(av_set_resource)

template = master_template.build()
from azure.core.exceptions import HttpResponseError

# deploy ARM template
deployment_name = 'av_set_deploy_' + random_string(32)
client = get_mgmt_service_client(cmd.cli_ctx, ResourceType.MGMT_RESOURCE_RESOURCES).deployments
DeploymentProperties = cmd.get_models('DeploymentProperties', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES)
properties = DeploymentProperties(template=template, parameters={}, mode='incremental')
Deployment = cmd.get_models('Deployment', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES)
deployment = Deployment(properties=properties)
from .aaz.latest.vm.availability_set import Create as _Create
from azure.cli.core.commands.client_factory import get_subscription_id
from azure.mgmt.core.tools import resource_id

if validate:
if cmd.supported_api_version(min_api='2019-10-01', resource_type=ResourceType.MGMT_RESOURCE_RESOURCES):
validation_poller = client.begin_validate(resource_group_name, deployment_name, deployment)
return LongRunningOperation(cmd.cli_ctx)(validation_poller)

return client.validate(resource_group_name, deployment_name, deployment)
raise CLIError(
"[Deprecated] '--validate' is not supported for 'az vm availability-set create' after migration to AAZ. "
"This command no longer generates ARM templates; remove '--validate' and retry."
)

if no_wait:
return sdk_no_wait(no_wait, client.begin_create_or_update, resource_group_name, deployment_name, deployment)
LongRunningOperation(cmd.cli_ctx)(sdk_no_wait(no_wait, client.begin_create_or_update,
resource_group_name, deployment_name, deployment))
tags = tags or {}
if proximity_placement_group is not None:
if isinstance(proximity_placement_group, dict):
if 'id' not in proximity_placement_group:
raise CLIError("Invalid proximity placement group value. Expect an object with key 'id'.")
elif isinstance(proximity_placement_group, str):
ppg_value = proximity_placement_group.strip()
if ppg_value.lower().startswith('/subscriptions/'):
ppg_id = ppg_value
else:
ppg_id = resource_id(
subscription=get_subscription_id(cmd.cli_ctx),
resource_group=resource_group_name,
namespace='Microsoft.Compute',
type='proximityPlacementGroups',
name=ppg_value
)
proximity_placement_group = {'id': ppg_id}
else:
raise CLIError(f"Invalid proximity placement group type: {type(proximity_placement_group)}")
command_args = {
"resource_group": resource_group_name,
"availability_set_name": availability_set_name,
"location": location,
"platform_fault_domain_count": platform_fault_domain_count,
"platform_update_domain_count": platform_update_domain_count,
"proximity_placement_group": proximity_placement_group,
"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,
"sku": {"name": "Classic" if unmanaged else "Aligned"},
"tags": tags,
"no_wait": no_wait,
}

from .aaz.latest.vm.availability_set import Show as _Show
return _Show(cli_ctx=cmd.cli_ctx)(command_args={'resource_group': resource_group_name,
'availability_set_name': availability_set_name})
def _drop_none(obj):
if isinstance(obj, dict):
return {k: _drop_none(v) for k, v in obj.items() if v is not None}
return obj

command_args = _drop_none(command_args)

try:
return _Create(cli_ctx=cmd.cli_ctx)(command_args=command_args)
except HttpResponseError as ex:
msg = str(ex)
if ("Scheduled Event Policy is not supported" in msg) or ("scheduledEventsPolicy" in msg):
raise CLIError(
"Scheduled Events Policy is not supported for availability sets in this environment. "
"Retry without --additional-events/--enable-reboot/--enable-redeploy."
)
raise
# endregion


Expand Down
Loading
Loading