in src/azure-cli/azure/cli/command_modules/vm/custom.py [0:0]
def update_vmss(cmd, resource_group_name, name, license_type=None, no_wait=False, instance_id=None,
protect_from_scale_in=None, protect_from_scale_set_actions=None,
enable_terminate_notification=None, terminate_notification_time=None, ultra_ssd_enabled=None,
scale_in_policy=None, priority=None, max_price=None, proximity_placement_group=None,
enable_automatic_repairs=None, automatic_repairs_grace_period=None, max_batch_instance_percent=None,
max_unhealthy_instance_percent=None, max_unhealthy_upgraded_instance_percent=None,
pause_time_between_batches=None, enable_cross_zone_upgrade=None, prioritize_unhealthy_instances=None,
user_data=None, enable_spot_restore=None, spot_restore_timeout=None, capacity_reservation_group=None,
vm_sku=None, ephemeral_os_disk_placement=None, force_deletion=None, enable_secure_boot=None,
enable_vtpm=None, automatic_repairs_action=None, v_cpus_available=None, v_cpus_per_core=None,
regular_priority_count=None, regular_priority_percentage=None, disk_controller_type=None,
enable_osimage_notification=None, custom_data=None, enable_hibernation=None,
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, additional_scheduled_events=None,
enable_user_reboot_scheduled_events=None, enable_user_redeploy_scheduled_events=None,
upgrade_policy_mode=None, enable_auto_os_upgrade=None, skuprofile_vmsizes=None,
skuprofile_allostrat=None, security_posture_reference_is_overridable=None, zone_balance=None,
wire_server_mode=None, imds_mode=None, wire_server_access_control_profile_reference_id=None,
imds_access_control_profile_reference_id=None, enable_automatic_zone_balancing=None,
automatic_zone_balancing_strategy=None, automatic_zone_balancing_behavior=None, **kwargs):
vmss = kwargs['parameters']
aux_subscriptions = None
# pylint: disable=too-many-boolean-expressions
if vmss and hasattr(vmss, 'virtual_machine_profile') and vmss.virtual_machine_profile and \
vmss.virtual_machine_profile.storage_profile and \
vmss.virtual_machine_profile.storage_profile.image_reference and \
'id' in vmss.virtual_machine_profile.storage_profile.image_reference:
aux_subscriptions = _parse_aux_subscriptions(vmss.virtual_machine_profile.storage_profile.image_reference['id'])
client = _compute_client_factory(cmd.cli_ctx, aux_subscriptions=aux_subscriptions)
VMProtectionPolicy = cmd.get_models('VirtualMachineScaleSetVMProtectionPolicy')
# handle vmss instance update
from azure.cli.core.util import b64encode
if instance_id is not None:
if license_type is not None:
vmss.license_type = license_type
if user_data is not None:
vmss.user_data = b64encode(user_data)
if not vmss.protection_policy:
vmss.protection_policy = VMProtectionPolicy()
if protect_from_scale_in is not None:
vmss.protection_policy.protect_from_scale_in = protect_from_scale_in
if protect_from_scale_set_actions is not None:
vmss.protection_policy.protect_from_scale_set_actions = protect_from_scale_set_actions
return sdk_no_wait(no_wait, client.virtual_machine_scale_set_vms.begin_update,
resource_group_name, name, instance_id, **kwargs)
# else handle vmss update
if license_type is not None:
vmss.virtual_machine_profile.license_type = license_type
if user_data is not None:
vmss.virtual_machine_profile.user_data = b64encode(user_data)
if v_cpus_available is not None or v_cpus_per_core is not None:
HardwareProfile = cmd.get_models('HardwareProfile')
VMSizeProperties = cmd.get_models('VMSizeProperties')
hardware_profile = HardwareProfile(vm_size_properties=VMSizeProperties(v_cpus_available=v_cpus_available,
v_cpus_per_core=v_cpus_per_core))
vmss.virtual_machine_profile.hardware_profile = hardware_profile
if capacity_reservation_group is not None:
CapacityReservationProfile = cmd.get_models('CapacityReservationProfile')
SubResource = cmd.get_models('SubResource')
if capacity_reservation_group == 'None':
capacity_reservation_group = None
sub_resource = SubResource(id=capacity_reservation_group)
capacity_reservation = CapacityReservationProfile(capacity_reservation_group=sub_resource)
vmss.virtual_machine_profile.capacity_reservation = capacity_reservation
if enable_terminate_notification is not None or terminate_notification_time is not None:
if vmss.virtual_machine_profile.scheduled_events_profile is None:
ScheduledEventsProfile = cmd.get_models('ScheduledEventsProfile')
vmss.virtual_machine_profile.scheduled_events_profile = ScheduledEventsProfile()
TerminateNotificationProfile = cmd.get_models('TerminateNotificationProfile')
vmss.virtual_machine_profile.scheduled_events_profile.terminate_notification_profile =\
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')()
OSImageNotificationProfile = cmd.get_models('OSImageNotificationProfile')
vmss.virtual_machine_profile.scheduled_events_profile.os_image_notification_profile = \
OSImageNotificationProfile(enable=enable_osimage_notification)
if enable_automatic_repairs is not None or \
automatic_repairs_grace_period is not None or automatic_repairs_action is not None:
AutomaticRepairsPolicy = cmd.get_models('AutomaticRepairsPolicy')
vmss.automatic_repairs_policy = \
AutomaticRepairsPolicy(enabled=enable_automatic_repairs,
grace_period=automatic_repairs_grace_period,
repair_action=automatic_repairs_action)
if ultra_ssd_enabled is not None:
if cmd.supported_api_version(min_api='2019-03-01', operation_group='virtual_machine_scale_sets'):
if vmss.additional_capabilities is None:
AdditionalCapabilities = cmd.get_models('AdditionalCapabilities')
vmss.additional_capabilities = AdditionalCapabilities(ultra_ssd_enabled=ultra_ssd_enabled)
else:
vmss.additional_capabilities.ultra_ssd_enabled = ultra_ssd_enabled
else:
if vmss.virtual_machine_profile.additional_capabilities is None:
AdditionalCapabilities = cmd.get_models('AdditionalCapabilities')
vmss.virtual_machine_profile.additional_capabilities = AdditionalCapabilities(
ultra_ssd_enabled=ultra_ssd_enabled)
else:
vmss.virtual_machine_profile.additional_capabilities.ultra_ssd_enabled = ultra_ssd_enabled
if scale_in_policy is not None or force_deletion is not None:
ScaleInPolicy = cmd.get_models('ScaleInPolicy')
vmss.scale_in_policy = ScaleInPolicy(rules=scale_in_policy, force_deletion=force_deletion)
if enable_spot_restore is not None:
vmss.spot_restore_policy.enabled = enable_spot_restore
if spot_restore_timeout is not None:
vmss.spot_restore_policy.restore_timeout = spot_restore_timeout
if priority is not None:
vmss.virtual_machine_profile.priority = priority
if max_price is not None:
if vmss.virtual_machine_profile.billing_profile is None:
BillingProfile = cmd.get_models('BillingProfile')
vmss.virtual_machine_profile.billing_profile = BillingProfile(max_price=max_price)
else:
vmss.virtual_machine_profile.billing_profile.max_price = max_price
if security_type is not None or enable_secure_boot is not None or enable_vtpm is not None:
security_profile = vmss.virtual_machine_profile.security_profile
prev_security_type = security_profile.security_type if security_profile else None
# At present, `SecurityType` has options `TrustedLaunch` and `Standard`
if security_type == 'TrustedLaunch' and prev_security_type != security_type:
vmss.virtual_machine_profile.security_profile = {
'securityType': security_type,
'uefiSettings': {
'secureBootEnabled': enable_secure_boot if enable_secure_boot is not None else False,
'vTpmEnabled': enable_vtpm if enable_vtpm is not None else True
}
}
elif security_type == 'Standard':
if prev_security_type == 'TrustedLaunch':
logger.warning('Turning off Trusted launch disables foundational security for your VMs. '
'For more information, visit https://aka.ms/TrustedLaunch')
vmss.virtual_machine_profile.security_profile = {
'securityType': security_type,
'uefiSettings': None
}
else:
vmss.virtual_machine_profile.security_profile = {'uefiSettings': {
'secureBootEnabled': enable_secure_boot,
'vTpmEnabled': enable_vtpm
}}
if enable_proxy_agent is not None or wire_server_mode is not None or imds_mode is not None or \
wire_server_access_control_profile_reference_id is not None or \
imds_access_control_profile_reference_id is not None:
SecurityProfile = cmd.get_models('SecurityProfile')
ProxyAgentSettings = cmd.get_models('ProxyAgentSettings')
HostEndpointSettings = cmd.get_models('HostEndpointSettings')
wire_server = HostEndpointSettings(
mode=wire_server_mode,
in_vm_access_control_profile_reference_id=wire_server_access_control_profile_reference_id
)
imds = HostEndpointSettings(
mode=imds_mode,
in_vm_access_control_profile_reference_id=imds_access_control_profile_reference_id
)
if vmss.virtual_machine_profile.security_profile is None:
vmss.virtual_machine_profile.security_profile = SecurityProfile()
vmss.virtual_machine_profile.security_profile.proxy_agent_settings = ProxyAgentSettings(
enabled=enable_proxy_agent, wire_server=wire_server, imds=imds)
elif vmss.virtual_machine_profile.security_profile.proxy_agent_settings is None:
vmss.virtual_machine_profile.security_profile.proxy_agent_settings = ProxyAgentSettings(
enabled=enable_proxy_agent, wire_server=wire_server, imds=imds)
else:
vmss.virtual_machine_profile.security_profile.proxy_agent_settings.enabled = enable_proxy_agent
vmss.virtual_machine_profile.security_profile.proxy_agent_settings.wire_server.mode = wire_server_mode
vmss.virtual_machine_profile.security_profile.proxy_agent_settings.wire_server. \
in_vm_access_control_profile_reference_id = wire_server_access_control_profile_reference_id
vmss.virtual_machine_profile.security_profile.proxy_agent_settings.imds.mode = imds_mode
vmss.virtual_machine_profile.security_profile.proxy_agent_settings.imds. \
in_vm_access_control_profile_reference_id = imds_access_control_profile_reference_id
if regular_priority_count is not None or regular_priority_percentage is not None:
if vmss.orchestration_mode != 'Flexible':
raise ValidationError("--regular-priority-count/--regular-priority-percentage is only available for"
" VMSS with flexible orchestration mode")
if vmss.priority_mix_policy is None:
vmss.priority_mix_policy = {
'baseRegularPriorityCount': regular_priority_count,
'regularPriorityPercentageAboveBase': regular_priority_percentage
}
else:
if regular_priority_count is not None:
vmss.priority_mix_policy.base_regular_priority_count = regular_priority_count
if regular_priority_percentage is not None:
vmss.priority_mix_policy.regular_priority_percentage_above_base = regular_priority_percentage
if proximity_placement_group is not None:
vmss.proximity_placement_group = {'id': proximity_placement_group}
if max_batch_instance_percent is not None or max_unhealthy_instance_percent is not None \
or max_unhealthy_upgraded_instance_percent is not None or pause_time_between_batches is not None \
or enable_cross_zone_upgrade is not None or prioritize_unhealthy_instances is not None \
or max_surge is not None:
if vmss.upgrade_policy is None:
vmss.upgrade_policy = {'rolling_upgrade_policy': None}
if vmss.upgrade_policy.rolling_upgrade_policy is None:
vmss.upgrade_policy.rolling_upgrade_policy = {
'maxBatchInstancePercent': max_batch_instance_percent,
'maxUnhealthyInstancePercent': max_unhealthy_instance_percent,
'maxUnhealthyUpgradedInstancePercent': max_unhealthy_upgraded_instance_percent,
'pauseTimeBetweenBatches': pause_time_between_batches,
'enableCrossZoneUpgrade': enable_cross_zone_upgrade,
'prioritizeUnhealthyInstances': prioritize_unhealthy_instances,
'maxSurge': max_surge
}
else:
vmss.upgrade_policy.rolling_upgrade_policy.max_batch_instance_percent = max_batch_instance_percent
vmss.upgrade_policy.rolling_upgrade_policy.max_unhealthy_instance_percent = max_unhealthy_instance_percent
vmss.upgrade_policy.rolling_upgrade_policy.max_unhealthy_upgraded_instance_percent = \
max_unhealthy_upgraded_instance_percent
vmss.upgrade_policy.rolling_upgrade_policy.pause_time_between_batches = pause_time_between_batches
vmss.upgrade_policy.rolling_upgrade_policy.enable_cross_zone_upgrade = enable_cross_zone_upgrade
vmss.upgrade_policy.rolling_upgrade_policy.prioritize_unhealthy_instances = prioritize_unhealthy_instances
vmss.upgrade_policy.rolling_upgrade_policy.max_surge = max_surge
if upgrade_policy_mode is not None:
vmss.upgrade_policy.mode = upgrade_policy_mode
if enable_auto_os_upgrade is not None:
if vmss.upgrade_policy.automatic_os_upgrade_policy is None:
vmss.upgrade_policy.automatic_os_upgrade_policy = {'enableAutomaticOSUpgrade': enable_auto_os_upgrade}
else:
vmss.upgrade_policy.automatic_os_upgrade_policy.enable_automatic_os_upgrade = enable_auto_os_upgrade
if vm_sku is not None:
if vmss.sku.name == vm_sku:
logger.warning("VMSS sku is already %s", vm_sku)
else:
vmss.sku.name = vm_sku
sku_profile = {}
if skuprofile_vmsizes is not None or skuprofile_allostrat is not None:
if skuprofile_vmsizes is not None:
sku_profile_vmsizes_list = []
for vm_size in skuprofile_vmsizes:
vmsize_obj = {
'name': vm_size
}
sku_profile_vmsizes_list.append(vmsize_obj)
sku_profile['vmSizes'] = sku_profile_vmsizes_list
if skuprofile_allostrat is not None:
sku_profile['allocationStrategy'] = skuprofile_allostrat
vmss.sku_profile = sku_profile
if ephemeral_os_disk_placement is not None or ephemeral_os_disk_option is not None:
if vmss.virtual_machine_profile.storage_profile.os_disk.diff_disk_settings is not None:
vmss.virtual_machine_profile.storage_profile.os_disk.diff_disk_settings.placement = \
ephemeral_os_disk_placement
vmss.virtual_machine_profile.storage_profile.os_disk.diff_disk_settings.option = \
ephemeral_os_disk_option
else:
DiffDiskSettings = cmd.get_models('DiffDiskSettings')
vmss.virtual_machine_profile.storage_profile.os_disk.diff_disk_settings = DiffDiskSettings(
option=ephemeral_os_disk_option, placement=ephemeral_os_disk_placement)
if ephemeral_os_disk is False:
vmss.virtual_machine_profile.storage_profile.os_disk.diff_disk_settings = {}
if disk_controller_type is not None:
vmss.virtual_machine_profile.storage_profile.disk_controller_type = disk_controller_type
if custom_data is not None:
custom_data = read_content_if_is_file(custom_data)
vmss.virtual_machine_profile.os_profile.custom_data = b64encode(custom_data)
if enable_hibernation is not None:
if vmss.additional_capabilities is None:
AdditionalCapabilities = cmd.get_models('AdditionalCapabilities')
vmss.additional_capabilities = AdditionalCapabilities(hibernation_enabled=enable_hibernation)
else:
vmss.additional_capabilities.hibernation_enabled = enable_hibernation
if security_posture_reference_id is not None or security_posture_reference_exclude_extensions is not None or \
security_posture_reference_is_overridable is not None:
security_posture_reference = vmss.virtual_machine_profile.security_posture_reference
if security_posture_reference is None:
SecurityPostureReference = cmd.get_models('SecurityPostureReference')
security_posture_reference = SecurityPostureReference()
if security_posture_reference_id is not None:
security_posture_reference.id = security_posture_reference_id
if security_posture_reference_exclude_extensions is not None:
security_posture_reference.exclude_extensions = security_posture_reference_exclude_extensions
if security_posture_reference_is_overridable is not None:
security_posture_reference.is_overridable = security_posture_reference_is_overridable
vmss.virtual_machine_profile.security_posture_reference = security_posture_reference
if enable_resilient_creation is not None or enable_resilient_deletion is not None:
resiliency_policy = vmss.resiliency_policy
if enable_resilient_creation is not None:
resiliency_policy.resilient_vm_creation_policy = {'enabled': enable_resilient_creation}
if enable_resilient_deletion is not None:
resiliency_policy.resilient_vm_deletion_policy = {'enabled': enable_resilient_deletion}
if enable_automatic_zone_balancing is not None or automatic_zone_balancing_strategy is not None or \
automatic_zone_balancing_behavior is not None:
resiliency_policy = vmss.resiliency_policy
if resiliency_policy is None:
ResiliencyPolicy = cmd.get_models('ResiliencyPolicy')
AutomaticZoneRebalancingPolicy = cmd.get_models('AutomaticZoneRebalancingPolicy')
resiliency_policy = ResiliencyPolicy()
resiliency_policy.automatic_zone_rebalancing_policy = AutomaticZoneRebalancingPolicy()
elif resiliency_policy.automatic_zone_rebalancing_policy is None:
AutomaticZoneRebalancingPolicy = cmd.get_models('AutomaticZoneRebalancingPolicy')
resiliency_policy.automatic_zone_rebalancing_policy = AutomaticZoneRebalancingPolicy()
if enable_automatic_zone_balancing is not None:
resiliency_policy.automatic_zone_rebalancing_policy.enabled = enable_automatic_zone_balancing
if automatic_zone_balancing_strategy is not None:
resiliency_policy.automatic_zone_rebalancing_policy.rebalance_strategy = automatic_zone_balancing_strategy
if automatic_zone_balancing_behavior is not None:
resiliency_policy.automatic_zone_rebalancing_policy.rebalance_behavior = automatic_zone_balancing_behavior
vmss.resiliency_policy = resiliency_policy
if zones is not None:
vmss.zones = zones
if zone_balance is not None:
vmss.zone_balance = zone_balance
return sdk_no_wait(no_wait, client.virtual_machine_scale_sets.begin_create_or_update,
resource_group_name, name, **kwargs)