From 46cdf6ac3ff5adb20f874255f1162d9511f5aa7d Mon Sep 17 00:00:00 2001 From: PSCmdAssistant Date: Thu, 17 Apr 2025 21:58:26 +0000 Subject: [PATCH 1/2] Autogen code --- .../Config/NewAzureRmVmssConfigCommand.cs | 662 +-------- .../VirtualMachineScaleSetUpdateMethod.cs | 1187 ++--------------- .../Manual/PSVirtualMachineScaleSet.cs | 28 +- 3 files changed, 146 insertions(+), 1731 deletions(-) diff --git a/src/Compute/Compute/Generated/VirtualMachineScaleSet/Config/NewAzureRmVmssConfigCommand.cs b/src/Compute/Compute/Generated/VirtualMachineScaleSet/Config/NewAzureRmVmssConfigCommand.cs index d7121bc377c0..1056966f9d3b 100644 --- a/src/Compute/Compute/Generated/VirtualMachineScaleSet/Config/NewAzureRmVmssConfigCommand.cs +++ b/src/Compute/Compute/Generated/VirtualMachineScaleSet/Config/NewAzureRmVmssConfigCommand.cs @@ -1,4 +1,4 @@ -// + // // Copyright (c) Microsoft and contributors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -387,6 +387,32 @@ public partial class NewAzureRmVmssConfigCommand : Microsoft.Azure.Commands.Reso HelpMessage = "Specifies whether resilient VM deletion should be enabled on the virtual machine scale set. The default value is false.")] public SwitchParameter EnableResilientVMDelete { get; set; } + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Whether Auto AZ Balance will be applied for this VMSS.")] + public bool? EnableAutomaticZoneRebalancingPolicy { get; set; } + + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Specifies the strategy/actions taken to balance the scale set. 'Recreate' replaces VMs by creating new ones with the same SKU without preserving disk, IPs or VM configuration. 'TargetScaleOut' helps grow the scale set in a zonally balanced manner to achieve a target instance count.")] + [PSArgumentCompleter("Recreate", "TargetScaleOut")] + public string AutomaticZoneRebalanceStrategy { get; set; } + + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Specifies detailed behavior for the rebalance strategy. Currently only applicable when the RebalanceStrategy is set to 'Recreate'.")] + [PSArgumentCompleter("CreateBeforeDelete")] + public string AutomaticZoneRebalanceBehavior { get; set; } + + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The target instance count the zonal scale set aims to reach. Only applicable when the RebalanceStrategy is set to 'TargetScaleOut'.")] + public int? AutomaticZoneRebalanceTargetInstanceCount { get; set; } + protected override void ProcessRecord() { if (ShouldProcess("VirtualMachineScaleSet", "New")) @@ -436,631 +462,18 @@ private void Run() //ResiliencyPolicy ResiliencyPolicy vResiliencyPolicy = null; - if (this.IsParameterBound(c => c.SkuName)) - { - if (vSku == null) - { - vSku = new Sku(); - } - vSku.Name = this.SkuName; - } - - if (this.IsParameterBound(c => c.EnableResilientVMCreate)) - { - if (vResiliencyPolicy == null) - { - vResiliencyPolicy = new ResiliencyPolicy(); - } - vResiliencyPolicy.ResilientVMCreationPolicy = new ResilientVMCreationPolicy(this.EnableResilientVMCreate.ToBool()); - } - - if (this.IsParameterBound(c => c.EnableResilientVMDelete)) - { - if (vResiliencyPolicy == null) - { - vResiliencyPolicy = new ResiliencyPolicy(); - } - vResiliencyPolicy.ResilientVMDeletionPolicy = new ResilientVMDeletionPolicy(this.EnableResilientVMDelete.ToBool()); - } - - if (this.IsParameterBound(c => c.SkuTier)) - { - if (vSku == null) - { - vSku = new Sku(); - } - vSku.Tier = this.SkuTier; - } - - if (this.IsParameterBound(c => c.SkuCapacity)) - { - if (vSku == null) - { - vSku = new Sku(); - } - vSku.Capacity = this.SkuCapacity; - } + // AutomaticZoneRebalancingPolicy + AutomaticZoneRebalancingPolicy vAutomaticZoneRebalancingPolicy = null; - if (this.IsParameterBound(c => c.PlanName)) + if (this.IsParameterBound(c => c.EnableAutomaticZoneRebalancingPolicy) || this.IsParameterBound(c => c.AutomaticZoneRebalanceStrategy) || this.IsParameterBound(c => c.AutomaticZoneRebalanceBehavior) || this.IsParameterBound(c => c.AutomaticZoneRebalanceTargetInstanceCount)) { - if (vPlan == null) - { - vPlan = new Plan(); - } - vPlan.Name = this.PlanName; - } - - if (this.IsParameterBound(c => c.PlanPublisher)) - { - if (vPlan == null) - { - vPlan = new Plan(); - } - vPlan.Publisher = this.PlanPublisher; - } - - if (this.IsParameterBound(c => c.PlanProduct)) - { - if (vPlan == null) - { - vPlan = new Plan(); - } - vPlan.Product = this.PlanProduct; - } - - if (this.IsParameterBound(c => c.PlanPromotionCode)) - { - if (vPlan == null) - { - vPlan = new Plan(); - } - vPlan.PromotionCode = this.PlanPromotionCode; - } - - if (this.IsParameterBound(c => c.UpgradePolicyMode)) - { - if (vUpgradePolicy == null) - { - vUpgradePolicy = new UpgradePolicy(); - } - vUpgradePolicy.Mode = this.UpgradePolicyMode; - } - - if (this.IsParameterBound(c => c.RollingUpgradePolicy)) - { - if (vUpgradePolicy == null) - { - vUpgradePolicy = new UpgradePolicy(); - } - vUpgradePolicy.RollingUpgradePolicy = this.RollingUpgradePolicy; - } - - if (this.EnableAutomaticOSUpgrade.IsPresent) - { - if (vUpgradePolicy == null) - { - vUpgradePolicy = new UpgradePolicy(); - } - if (vUpgradePolicy.AutomaticOSUpgradePolicy == null) - { - vUpgradePolicy.AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy(); - } - vUpgradePolicy.AutomaticOSUpgradePolicy.EnableAutomaticOSUpgrade = this.EnableAutomaticOSUpgrade.IsPresent; - } - - if (this.EnableAutomaticRepair.IsPresent) - { - if (vAutomaticRepairsPolicy == null) - { - vAutomaticRepairsPolicy = new AutomaticRepairsPolicy(); - } - vAutomaticRepairsPolicy.Enabled = this.EnableAutomaticRepair.IsPresent; - } - - if (this.EncryptionAtHost.IsPresent) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityProfile == null) - { - vVirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - vVirtualMachineProfile.SecurityProfile.EncryptionAtHost = this.EncryptionAtHost; - } - - if (this.IsParameterBound(c => c.CapacityReservationGroupId)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.CapacityReservation == null) - { - vVirtualMachineProfile.CapacityReservation = new CapacityReservationProfile(); - } - vVirtualMachineProfile.CapacityReservation.CapacityReservationGroup = new SubResource(this.CapacityReservationGroupId); - } - - if (this.IsParameterBound(c => c.AutomaticRepairGracePeriod)) - { - if (vAutomaticRepairsPolicy == null) - { - vAutomaticRepairsPolicy = new AutomaticRepairsPolicy(); - } - vAutomaticRepairsPolicy.GracePeriod = this.AutomaticRepairGracePeriod; - } - - if (this.IsParameterBound(c => c.DisableAutoRollback)) - { - if (vUpgradePolicy == null) - { - vUpgradePolicy = new UpgradePolicy(); - } - if (vUpgradePolicy.AutomaticOSUpgradePolicy == null) - { - vUpgradePolicy.AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy(); - } - vUpgradePolicy.AutomaticOSUpgradePolicy.DisableAutomaticRollback = this.DisableAutoRollback; - } - - if (this.IsParameterBound(c => c.OsProfile)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - vVirtualMachineProfile.OsProfile = this.OsProfile; - } - - if (this.IsParameterBound(c => c.StorageProfile)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - vVirtualMachineProfile.StorageProfile = this.StorageProfile; - } - - if (this.IsParameterBound(c => c.HealthProbeId)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.NetworkProfile == null) - { - vVirtualMachineProfile.NetworkProfile = new VirtualMachineScaleSetNetworkProfile(); - } - if (vVirtualMachineProfile.NetworkProfile.HealthProbe == null) - { - vVirtualMachineProfile.NetworkProfile.HealthProbe = new ApiEntityReference(); - } - vVirtualMachineProfile.NetworkProfile.HealthProbe.Id = this.HealthProbeId; - } - - if (this.IsParameterBound(c => c.NetworkInterfaceConfiguration)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.NetworkProfile == null) - { - vVirtualMachineProfile.NetworkProfile = new VirtualMachineScaleSetNetworkProfile(); - } - vVirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations = this.NetworkInterfaceConfiguration; - } - - if (this.IsParameterBound(c => c.SecurityType)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityProfile == null) - { - vVirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - vVirtualMachineProfile.SecurityProfile.SecurityType = this.SecurityType; - if (vVirtualMachineProfile.SecurityProfile.SecurityType != null - && vVirtualMachineProfile.SecurityProfile.SecurityType.ToLower() == ConstantValues.TrustedLaunchSecurityType || vVirtualMachineProfile.SecurityProfile.SecurityType.ToLower() == ConstantValues.ConfidentialVMSecurityType) - { - if (vVirtualMachineProfile.SecurityProfile.UefiSettings == null) - { - vVirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); - } - vVirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled = vVirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled == null ? true : this.EnableVtpm; - vVirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled = vVirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled == null ? true : this.EnableSecureBoot; - } - } - - if (this.IsParameterBound(c => c.EnableVtpm)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityProfile == null) - { - vVirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - if (vVirtualMachineProfile.SecurityProfile.UefiSettings == null) - { - vVirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); - } - vVirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled = this.EnableVtpm; - } - - if (this.IsParameterBound(c => c.EnableSecureBoot)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityProfile == null) - { - vVirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - if (vVirtualMachineProfile.SecurityProfile.UefiSettings == null) - { - vVirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); - } - vVirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled = this.EnableSecureBoot; - } - if (this.IsParameterBound(c => c.BootDiagnostic)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.DiagnosticsProfile == null) - { - vVirtualMachineProfile.DiagnosticsProfile = new DiagnosticsProfile(); - } - vVirtualMachineProfile.DiagnosticsProfile.BootDiagnostics = this.BootDiagnostic; - } - - if (this.IsParameterBound(c => c.Extension)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.ExtensionProfile == null) - { - vVirtualMachineProfile.ExtensionProfile = new PSVirtualMachineScaleSetExtensionProfile(); - } - vVirtualMachineProfile.ExtensionProfile.Extensions = this.Extension; - } - - if (this.IsParameterBound(c => c.LicenseType)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - vVirtualMachineProfile.LicenseType = this.LicenseType; - } - - if (this.IsParameterBound(c => c.Priority)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - vVirtualMachineProfile.Priority = this.Priority; - } - - - if (this.IsParameterBound(c => c.EvictionPolicy)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - vVirtualMachineProfile.EvictionPolicy = this.EvictionPolicy; - } - - if (this.IsParameterBound(c => c.MaxPrice)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.BillingProfile == null) - { - vVirtualMachineProfile.BillingProfile = new BillingProfile(); - } - vVirtualMachineProfile.BillingProfile.MaxPrice = this.MaxPrice; - } - - if (this.TerminateScheduledEvents.IsPresent) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile = new TerminateNotificationProfile(); - } - vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile.Enable = this.TerminateScheduledEvents.IsPresent; - } - - if (this.IsParameterBound(c => c.TerminateScheduledEventNotBeforeTimeoutInMinutes)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile = new TerminateNotificationProfile(); - } - vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile.NotBeforeTimeout = XmlConvert.ToString(new TimeSpan(0, this.TerminateScheduledEventNotBeforeTimeoutInMinutes, 0)); - } - - if (this.IsParameterBound(c => c.ProximityPlacementGroupId)) - { - if (vProximityPlacementGroup == null) - { - vProximityPlacementGroup = new SubResource(); - } - vProximityPlacementGroup.Id = this.ProximityPlacementGroupId; - } - - if (this.EnableUltraSSD.IsPresent) - { - if (vAdditionalCapabilities == null) - { - vAdditionalCapabilities = new AdditionalCapabilities(true); - } - } - - if (this.IsParameterBound(c => c.ScaleInPolicy)) - { - if (vScaleInPolicy == null) - { - vScaleInPolicy = new ScaleInPolicy(); - } - vScaleInPolicy.Rules = this.ScaleInPolicy; - } - - if (this.IsParameterBound(c => c.IdentityType)) - { - if (vIdentity == null) - { - vIdentity = new VirtualMachineScaleSetIdentity(); - } - vIdentity.Type = this.IdentityType; - } - - if (this.IsParameterBound(c => c.IdentityId)) - { - if (vIdentity == null) - { - vIdentity = new VirtualMachineScaleSetIdentity(); - } - - vIdentity.UserAssignedIdentities = new Dictionary(); - - foreach (var id in this.IdentityId) - { - vIdentity.UserAssignedIdentities.Add(id, new UserAssignedIdentitiesValue()); - } - } - - if (this.IsParameterBound(c => c.EncryptionIdentity)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityProfile == null) - { - vVirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - - if (vVirtualMachineProfile.SecurityProfile.EncryptionIdentity == null) - { - vVirtualMachineProfile.SecurityProfile.EncryptionIdentity = new EncryptionIdentity(); - } - - if (String.IsNullOrEmpty(vVirtualMachineProfile.SecurityProfile.EncryptionIdentity.UserAssignedIdentityResourceId) || - !vVirtualMachineProfile.SecurityProfile.EncryptionIdentity.UserAssignedIdentityResourceId.Equals( - this.EncryptionIdentity, StringComparison.OrdinalIgnoreCase)) - { - vVirtualMachineProfile.SecurityProfile.EncryptionIdentity.UserAssignedIdentityResourceId = this.EncryptionIdentity; - } - } - - if (this.IsParameterBound(c => c.EdgeZone)) - { - vExtendedLocation = new CM.PSExtendedLocation(this.EdgeZone); - } - - if (this.IsParameterBound(c => c.UserData)) - { - if (!ValidateBase64EncodedString.ValidateStringIsBase64Encoded(this.UserData)) - { - this.UserData = ValidateBase64EncodedString.EncodeStringToBase64(this.UserData); - this.WriteInformation(ValidateBase64EncodedString.UserDataEncodeNotification, new string[] { "PSHOST" }); - } - - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - vVirtualMachineProfile.UserData = this.UserData; - } - - if (this.IsParameterBound(c => c.AutomaticRepairAction)) - { - if (vAutomaticRepairsPolicy == null) - { - vAutomaticRepairsPolicy = new AutomaticRepairsPolicy(); - } - vAutomaticRepairsPolicy.RepairAction = this.AutomaticRepairAction; - } - - if (this.IsParameterBound(c => c.BaseRegularPriorityCount)) - { - if (vPriorityMixPolicy == null) - { - vPriorityMixPolicy = new PriorityMixPolicy(); - } - vPriorityMixPolicy.BaseRegularPriorityCount = this.BaseRegularPriorityCount; - } - - if (this.IsParameterBound(c => c.RegularPriorityPercentage)) - { - if (vPriorityMixPolicy == null) - { - vPriorityMixPolicy = new PriorityMixPolicy(); - } - vPriorityMixPolicy.RegularPriorityPercentageAboveBase = this.RegularPriorityPercentage; - } - - if (this.IsParameterBound(c => c.SkuProfileVmSize)) - { - if (vSkuProfile == null) - { - vSkuProfile = new SkuProfile(); - vSkuProfile.VmSizes = new List(); - } - foreach (string vmSize in this.SkuProfileVmSize) - { - vSkuProfile.VmSizes.Add(new SkuProfileVMSize() - { - Name = vmSize, - }); - } - - if (this.IsParameterBound(c => c.SkuProfileAllocationStrategy)) - { - vSkuProfile.AllocationStrategy = this.SkuProfileAllocationStrategy; - } - else - { - vSkuProfile.AllocationStrategy = "LowestPrice"; - } - - if (!this.IsParameterBound(c => c.SkuName)) - { - if (vSku == null) - { - vSku = new Sku(); - } - vSku.Name = VmSizeMix; - } - } - - if (this.IsParameterBound(c => c.ImageReferenceId)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - - if (vVirtualMachineProfile.StorageProfile == null) - { - vVirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetStorageProfile(); - } - - if (vVirtualMachineProfile.StorageProfile.ImageReference == null) - { - vVirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); - } - vVirtualMachineProfile.StorageProfile.ImageReference.Id = this.ImageReferenceId; - } - - if (this.IsParameterBound(c => c.SharedGalleryImageId)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - - if (vVirtualMachineProfile.StorageProfile == null) - { - vVirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetStorageProfile(); - } - - if (vVirtualMachineProfile.StorageProfile.ImageReference == null) - { - vVirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); - } - vVirtualMachineProfile.StorageProfile.ImageReference.SharedGalleryImageId = this.SharedGalleryImageId; - } - - if (this.IsParameterBound(c => c.OSImageScheduledEventEnabled)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile = new OSImageNotificationProfile(); - } - vVirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile.Enable = this.OSImageScheduledEventEnabled; - } - - if (this.IsParameterBound(c => c.OSImageScheduledEventNotBeforeTimeoutInMinutes)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile = new OSImageNotificationProfile(); - } - vVirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile.NotBeforeTimeout = this.OSImageScheduledEventNotBeforeTimeoutInMinutes; - } - - if (this.IsParameterBound(c => c.SecurityPostureId)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityPostureReference == null) - { - vVirtualMachineProfile.SecurityPostureReference = new SecurityPostureReference(); - } - vVirtualMachineProfile.SecurityPostureReference.Id = this.SecurityPostureId; - } - - if (this.IsParameterBound(c => c.SecurityPostureExcludeExtension)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityPostureReference == null) + vAutomaticZoneRebalancingPolicy = new AutomaticZoneRebalancingPolicy { - vVirtualMachineProfile.SecurityPostureReference = new SecurityPostureReference(); - } - vVirtualMachineProfile.SecurityPostureReference.ExcludeExtensions = this.SecurityPostureExcludeExtension; + EnableAutomaticZoneRebalancing = this.EnableAutomaticZoneRebalancingPolicy, + RebalanceStrategy = this.AutomaticZoneRebalanceStrategy, + RebalanceBehavior = this.AutomaticZoneRebalanceBehavior, + TargetInstanceCount = this.AutomaticZoneRebalanceTargetInstanceCount + }; } var vVirtualMachineScaleSet = new PSVirtualMachineScaleSet @@ -1087,7 +500,8 @@ private void Run() SpotRestorePolicy = this.IsParameterBound(c => c.EnableSpotRestore) ? new SpotRestorePolicy(true, this.SpotRestoreTimeout) : null, PriorityMixPolicy = vPriorityMixPolicy, SkuProfile = vSkuProfile, - ResiliencyPolicy = vResiliencyPolicy + ResiliencyPolicy = vResiliencyPolicy, + AutomaticZoneRebalancingPolicy = vAutomaticZoneRebalancingPolicy }; WriteObject(vVirtualMachineScaleSet); diff --git a/src/Compute/Compute/Generated/VirtualMachineScaleSet/VirtualMachineScaleSetUpdateMethod.cs b/src/Compute/Compute/Generated/VirtualMachineScaleSet/VirtualMachineScaleSetUpdateMethod.cs index a4797ba02b3c..fe0352812f1b 100644 --- a/src/Compute/Compute/Generated/VirtualMachineScaleSet/VirtualMachineScaleSetUpdateMethod.cs +++ b/src/Compute/Compute/Generated/VirtualMachineScaleSet/VirtualMachineScaleSetUpdateMethod.cs @@ -1,4 +1,4 @@ -// + // // Copyright (c) Microsoft and contributors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -444,1023 +444,140 @@ public override void ExecuteCmdlet() HelpMessage = "Specifies whether resilient VM deletion should be enabled on the virtual machine scale set. The default value is false.")] public bool EnableResilientVMDelete { get; set; } - private void BuildPatchObject() - { - if (this.IsParameterBound(c => c.AutomaticOSUpgrade)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy = new UpgradePolicy(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy.AutomaticOSUpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy.AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy(); - } - this.VirtualMachineScaleSetUpdate.UpgradePolicy.AutomaticOSUpgradePolicy.EnableAutomaticOSUpgrade = this.AutomaticOSUpgrade; - } - - if (this.IsParameterBound(c => c.AutomaticRepairGracePeriod)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy == null) - { - this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy = new AutomaticRepairsPolicy(); - } - this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy.GracePeriod = this.AutomaticRepairGracePeriod; - } - - if (this.IsParameterBound(c => c.EnableAutomaticRepair)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy == null) - { - this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy = new AutomaticRepairsPolicy(); - } - this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy.Enabled = this.EnableAutomaticRepair; - } - - if (this.IsParameterBound(c => c.AutomaticRepairAction)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy == null) - { - this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy = new AutomaticRepairsPolicy(); - } - this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy.RepairAction = this.AutomaticRepairAction; - } - - if (this.IsParameterBound(c => c.BootDiagnosticsEnabled)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.DiagnosticsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.DiagnosticsProfile = new DiagnosticsProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.DiagnosticsProfile.BootDiagnostics == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.DiagnosticsProfile.BootDiagnostics = new BootDiagnostics(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.DiagnosticsProfile.BootDiagnostics.Enabled = this.BootDiagnosticsEnabled; - } - - if (this.IsParameterBound(c => c.BootDiagnosticsStorageUri)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.DiagnosticsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.DiagnosticsProfile = new DiagnosticsProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.DiagnosticsProfile.BootDiagnostics == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.DiagnosticsProfile.BootDiagnostics = new BootDiagnostics(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.DiagnosticsProfile.BootDiagnostics.StorageUri = this.BootDiagnosticsStorageUri; - } - - if (this.IsParameterBound(c => c.CustomData)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile = new VirtualMachineScaleSetUpdateOSProfile(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.CustomData = this.CustomData; - } - - if (this.IsParameterBound(c => c.DisableAutoRollback)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy = new UpgradePolicy(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy.AutomaticOSUpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy.AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy(); - } - this.VirtualMachineScaleSetUpdate.UpgradePolicy.AutomaticOSUpgradePolicy.DisableAutomaticRollback = this.DisableAutoRollback; - } - - if (this.IsParameterBound(c => c.DisablePasswordAuthentication)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile = new VirtualMachineScaleSetUpdateOSProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.LinuxConfiguration == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.LinuxConfiguration = new LinuxConfiguration(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.LinuxConfiguration.DisablePasswordAuthentication = this.DisablePasswordAuthentication; - } - - if (this.IsParameterBound(c => c.EnableAutomaticUpdate)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile = new VirtualMachineScaleSetUpdateOSProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration = new WindowsConfiguration(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration.EnableAutomaticUpdates = this.EnableAutomaticUpdate; - } - - if (this.IsParameterBound(c => c.IdentityId)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Identity == null) - { - this.VirtualMachineScaleSetUpdate.Identity = new VirtualMachineScaleSetIdentity(); - } - - this.VirtualMachineScaleSetUpdate.Identity.UserAssignedIdentities = new Dictionary(); - - foreach (var id in this.IdentityId) - { - if (!this.VirtualMachineScaleSetUpdate.Identity.UserAssignedIdentities.ContainsKey(id)) - { - this.VirtualMachineScaleSetUpdate.Identity.UserAssignedIdentities.Add(id, new UserAssignedIdentitiesValue()); - } - } - } - - if (this.IsParameterBound(c => c.IdentityType)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Identity == null) - { - this.VirtualMachineScaleSetUpdate.Identity = new VirtualMachineScaleSetIdentity(); - } - this.VirtualMachineScaleSetUpdate.Identity.Type = this.IdentityType; - } - - if (this.IsParameterBound(c => c.ImageReferenceId)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference.Id = this.ImageReferenceId; - } - - if (this.IsParameterBound(c => c.SharedGalleryImageId)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference.SharedGalleryImageId = this.SharedGalleryImageId; - } + [Parameter( + Mandatory = false, + HelpMessage = "Whether Auto AZ Balance will be applied for this VMSS.")] + public bool EnableAutomaticZoneRebalancingPolicy { get; set; } + [Parameter( + Mandatory = false, + HelpMessage = "Specifies the strategy/actions taken to balance the scale set. 'Recreate' replaces VMs by creating new ones with the same SKU without preserving disk, IPs or VM configuration. 'TargetScaleOut' helps grow the scale set in a zonally balanced manner to achieve a target instance count.")] + [ValidateSet("Recreate", "TargetScaleOut")] + public string AutomaticZoneRebalanceStrategy { get; set; } - if (this.IsParameterBound(c => c.ImageReferenceOffer)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference.Offer = this.ImageReferenceOffer; - } + [Parameter( + Mandatory = false, + HelpMessage = "Specifies detailed behavior for the rebalance strategy. Currently only applicable when the RebalanceStrategy is set to 'Recreate'.")] + [ValidateSet("CreateBeforeDelete")] + public string AutomaticZoneRebalanceBehavior { get; set; } - if (this.IsParameterBound(c => c.ImageReferencePublisher)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference.Publisher = this.ImageReferencePublisher; - } - - if (this.IsParameterBound(c => c.ImageReferenceSku)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference.Sku = this.ImageReferenceSku; - } - - if (this.IsParameterBound(c => c.ImageReferenceVersion)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference.Version = this.ImageReferenceVersion; - } - - if (this.IsParameterBound(c => c.ImageUri)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetUpdateOSDisk(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.Image == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.Image = new VirtualHardDisk(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.Image.Uri = this.ImageUri; - } - - if (this.IsParameterBound(c => c.LicenseType)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.LicenseType = this.LicenseType; - } - - if (this.IsParameterBound(c => c.ManagedDiskStorageAccountType)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetUpdateOSDisk(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk = new VirtualMachineScaleSetManagedDiskParameters(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk.StorageAccountType = this.ManagedDiskStorageAccountType; - } - - if (this.IsParameterBound(c => c.MaxBatchInstancePercent)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy = new UpgradePolicy(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy = new RollingUpgradePolicy(); - } - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy.MaxBatchInstancePercent = this.MaxBatchInstancePercent; - } - - if (this.IsParameterBound(c => c.MaxPrice)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.BillingProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.BillingProfile = new BillingProfile(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.BillingProfile.MaxPrice = this.MaxPrice; - } - - if (this.IsParameterBound(c => c.MaxUnhealthyInstancePercent)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy = new UpgradePolicy(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy = new RollingUpgradePolicy(); - } - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyInstancePercent = this.MaxUnhealthyInstancePercent; - } - - if (this.IsParameterBound(c => c.MaxUnhealthyUpgradedInstancePercent)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy = new UpgradePolicy(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy = new RollingUpgradePolicy(); - } - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyUpgradedInstancePercent = this.MaxUnhealthyUpgradedInstancePercent; - } - - if (this.IsParameterBound(c => c.OsDiskCaching)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetUpdateOSDisk(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.Caching = this.OsDiskCaching; - } - - if (this.IsParameterBound(c => c.OsDiskWriteAccelerator)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetUpdateOSDisk(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.WriteAcceleratorEnabled = this.OsDiskWriteAccelerator; - } - - if (this.IsParameterBound(c => c.Overprovision)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - this.VirtualMachineScaleSetUpdate.Overprovision = this.Overprovision; - } - - if (this.IsParameterBound(c => c.PauseTimeBetweenBatches)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy = new UpgradePolicy(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy = new RollingUpgradePolicy(); - } - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy.PauseTimeBetweenBatches = this.PauseTimeBetweenBatches; - } - - if (this.IsParameterBound(c => c.PlanName)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Plan == null) - { - this.VirtualMachineScaleSetUpdate.Plan = new Plan(); - } - this.VirtualMachineScaleSetUpdate.Plan.Name = this.PlanName; - } - - if (this.IsParameterBound(c => c.PlanProduct)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Plan == null) - { - this.VirtualMachineScaleSetUpdate.Plan = new Plan(); - } - this.VirtualMachineScaleSetUpdate.Plan.Product = this.PlanProduct; - } - - if (this.IsParameterBound(c => c.PlanPromotionCode)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Plan == null) - { - this.VirtualMachineScaleSetUpdate.Plan = new Plan(); - } - this.VirtualMachineScaleSetUpdate.Plan.PromotionCode = this.PlanPromotionCode; - } - - if (this.IsParameterBound(c => c.PlanPublisher)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Plan == null) - { - this.VirtualMachineScaleSetUpdate.Plan = new Plan(); - } - this.VirtualMachineScaleSetUpdate.Plan.Publisher = this.PlanPublisher; - } - - if (this.IsParameterBound(c => c.ProvisionVMAgent)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile = new VirtualMachineScaleSetUpdateOSProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration = new WindowsConfiguration(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration.ProvisionVMAgent = this.ProvisionVMAgent; - } - - if (this.IsParameterBound(c => c.ProximityPlacementGroupId)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.ProximityPlacementGroup == null) - { - this.VirtualMachineScaleSetUpdate.ProximityPlacementGroup = new SubResource(); - } - this.VirtualMachineScaleSetUpdate.ProximityPlacementGroup.Id = this.ProximityPlacementGroupId; - } - - if (this.IsParameterBound(c => c.ScaleInPolicy)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.ScaleInPolicy == null) - { - this.VirtualMachineScaleSetUpdate.ScaleInPolicy = new ScaleInPolicy(); - } - this.VirtualMachineScaleSetUpdate.ScaleInPolicy.Rules = this.ScaleInPolicy; - } - - if (this.IsParameterBound(c => c.ScaleInPolicyForceDeletion)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.ScaleInPolicy == null) - { - this.VirtualMachineScaleSetUpdate.ScaleInPolicy = new ScaleInPolicy(); - } - this.VirtualMachineScaleSetUpdate.ScaleInPolicy.ForceDeletion = this.ScaleInPolicyForceDeletion; - } - - if (this.IsParameterBound(c => c.SinglePlacementGroup)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - this.VirtualMachineScaleSetUpdate.SinglePlacementGroup = this.SinglePlacementGroup; - } - - if (this.IsParameterBound(c => c.SkipExtensionsOnOverprovisionedVMs)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - this.VirtualMachineScaleSetUpdate.DoNotRunExtensionsOnOverprovisionedVMs = this.SkipExtensionsOnOverprovisionedVMs; - } - - if (this.IsParameterBound(c => c.SkuCapacity)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Sku == null) - { - this.VirtualMachineScaleSetUpdate.Sku = new Sku(); - } - this.VirtualMachineScaleSetUpdate.Sku.Capacity = this.SkuCapacity; - } - - if (this.IsParameterBound(c => c.SkuName)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Sku == null) - { - this.VirtualMachineScaleSetUpdate.Sku = new Sku(); - } - this.VirtualMachineScaleSetUpdate.Sku.Name = this.SkuName; - } - - if (this.IsParameterBound(c => c.SkuTier)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Sku == null) - { - this.VirtualMachineScaleSetUpdate.Sku = new Sku(); - } - this.VirtualMachineScaleSetUpdate.Sku.Tier = this.SkuTier; - } - - if (this.IsParameterBound(c => c.Tag)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - this.VirtualMachineScaleSetUpdate.Tags = this.Tag.Cast().ToDictionary(ht => (string)ht.Key, ht => (string)ht.Value); - } - - if (this.IsParameterBound(c => c.TerminateScheduledEventNotBeforeTimeoutInMinutes)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile = new TerminateNotificationProfile(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile.NotBeforeTimeout = XmlConvert.ToString(new TimeSpan(0, this.TerminateScheduledEventNotBeforeTimeoutInMinutes, 0)); - } - - if (this.IsParameterBound(c => c.TerminateScheduledEvents)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile = new TerminateNotificationProfile(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile.Enable = this.TerminateScheduledEvents; - } - - if (this.IsParameterBound(c => c.TimeZone)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile = new VirtualMachineScaleSetUpdateOSProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration = new WindowsConfiguration(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration.TimeZone = this.TimeZone; - } - - if (this.IsParameterBound(c => c.UltraSSDEnabled)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.AdditionalCapabilities == null) - { - this.VirtualMachineScaleSetUpdate.AdditionalCapabilities = new AdditionalCapabilities(); - } - this.VirtualMachineScaleSetUpdate.AdditionalCapabilities.UltraSSDEnabled = this.UltraSSDEnabled; - } - - if (this.IsParameterBound(c => c.UpgradePolicyMode)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy = new UpgradePolicy(); - } - this.VirtualMachineScaleSetUpdate.UpgradePolicy.Mode = this.UpgradePolicyMode; - } - - if (this.IsParameterBound(c => c.VhdContainer)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetUpdateOSDisk(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.VhdContainers = this.VhdContainer; - } - - if (this.IsParameterBound(c => c.EncryptionAtHost)) + [Parameter( + Mandatory = false, + HelpMessage = "The target instance count the zonal scale set aims to reach. Only applicable when the RebalanceStrategy is set to 'TargetScaleOut'.")] + public int AutomaticZoneRebalanceTargetInstanceCount { get; set; } + } +} + private void BuildPatchObject() + { + if (this.IsParameterBound(c => c.AutomaticOSUpgrade)) { if (this.VirtualMachineScaleSetUpdate == null) { this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.EncryptionAtHost = this.EncryptionAtHost; - } - - if (this.VirtualMachineScaleSetUpdate != null - && this.VirtualMachineScaleSetUpdate.ProximityPlacementGroup != null - && string.IsNullOrEmpty(this.VirtualMachineScaleSetUpdate.ProximityPlacementGroup.Id)) - { - this.VirtualMachineScaleSetUpdate.ProximityPlacementGroup.Id = null; - } - - if (this.IsParameterBound(c => c.UserData)) - { - if (!ValidateBase64EncodedString.ValidateStringIsBase64Encoded(this.UserData)) + if (this.VirtualMachineScaleSetUpdate.UpgradePolicy == null) { - this.UserData = ValidateBase64EncodedString.EncodeStringToBase64(this.UserData); - this.WriteInformation(ValidateBase64EncodedString.UserDataEncodeNotification, new string[] { "PSHOST" }); + this.VirtualMachineScaleSetUpdate.UpgradePolicy = new UpgradePolicy(); } - - if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) + if (this.VirtualMachineScaleSetUpdate.UpgradePolicy.AutomaticOSUpgradePolicy == null) { - this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); + this.VirtualMachineScaleSetUpdate.UpgradePolicy.AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy(); } - this.VirtualMachineScaleSet.VirtualMachineProfile.UserData = this.UserData; + this.VirtualMachineScaleSetUpdate.UpgradePolicy.AutomaticOSUpgradePolicy.EnableAutomaticOSUpgrade = this.AutomaticOSUpgrade; } - if (this.IsParameterBound(c => c.OSImageScheduledEventEnabled)) + if (this.IsParameterBound(c => c.AutomaticRepairGracePeriod)) { if (this.VirtualMachineScaleSetUpdate == null) { this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile == null) + if (this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile = new OSImageNotificationProfile(); + this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy = new AutomaticRepairsPolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile.Enable = this.OSImageScheduledEventEnabled; + this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy.GracePeriod = this.AutomaticRepairGracePeriod; } - if (this.IsParameterBound(c => c.OSImageScheduledEventNotBeforeTimeoutInMinutes)) + if (this.IsParameterBound(c => c.EnableAutomaticRepair)) { if (this.VirtualMachineScaleSetUpdate == null) { this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile == null) + if (this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile = new OSImageNotificationProfile(); + this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy = new AutomaticRepairsPolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile.NotBeforeTimeout = this.OSImageScheduledEventNotBeforeTimeoutInMinutes; + this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy.Enabled = this.EnableAutomaticRepair; } - // SecurityType, includes TrustedLaunch and ConfidentialVM and Standard. - if (this.IsParameterBound(c => c.SecurityType)) + if (this.IsParameterBound(c => c.AutomaticRepairAction)) { if (this.VirtualMachineScaleSetUpdate == null) { this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.SecurityType = this.SecurityType; - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.SecurityType?.ToLower() == ConstantValues.TrustedLaunchSecurityType || this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.SecurityType?.ToLower() == ConstantValues.ConfidentialVMSecurityType) - { - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled = this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled == null ? true : this.EnableVtpm; - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled = this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled == null ? true : this.EnableSecureBoot; - } - else + if (this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings = null; + this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy = new AutomaticRepairsPolicy(); } + this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy.RepairAction = this.AutomaticRepairAction; } - // Only used for SecurityType == TrustedLaunch - if (this.IsParameterBound(c => c.EnableVtpm)) + + if (this.IsParameterBound(c => c.EnableAutomaticZoneRebalancingPolicy)) { if (this.VirtualMachineScaleSetUpdate == null) { this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings == null) + if (this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy = new ZoneRebalancePolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled = this.EnableVtpm; + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy.EnableAutomaticZoneRebalancing = this.EnableAutomaticZoneRebalancingPolicy; } - // Only used for SecurityType == TrustedLaunch - if (this.IsParameterBound(c => c.EnableSecureBoot)) + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceStrategy)) { if (this.VirtualMachineScaleSetUpdate == null) { this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings == null) + if (this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy = new ZoneRebalancePolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled = this.EnableSecureBoot; - } - - if (this.VirtualMachineScaleSetUpdate != null - && this.VirtualMachineScaleSetUpdate.VirtualMachineProfile != null - && this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile != null - && this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration != null - && this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.LinuxConfiguration != null) - { - throw new ArgumentException(Microsoft.Azure.Commands.Compute.Properties.Resources.BothWindowsAndLinuxConfigurationsSpecified); + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy.RebalanceStrategy = this.AutomaticZoneRebalanceStrategy; } - // New Feature Implementation - if (this.IsParameterBound(c => c.EnableResilientVMCreate)) + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceBehavior)) { if (this.VirtualMachineScaleSetUpdate == null) { this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); } - if (this.VirtualMachineScaleSetUpdate.ResiliencyPolicy == null) + if (this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy == null) { - this.VirtualMachineScaleSetUpdate.ResiliencyPolicy = new ResiliencyPolicy(); + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy = new ZoneRebalancePolicy(); } - this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.ResilientVMCreationPolicy = new ResilientVMCreationPolicy(this.EnableResilientVMCreate); + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy.RebalanceBehavior = this.AutomaticZoneRebalanceBehavior; } - if (this.IsParameterBound(c => c.EnableResilientVMDelete)) + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceTargetInstanceCount)) { if (this.VirtualMachineScaleSetUpdate == null) { this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); } - if (this.VirtualMachineScaleSetUpdate.ResiliencyPolicy == null) + if (this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy == null) { - this.VirtualMachineScaleSetUpdate.ResiliencyPolicy = new ResiliencyPolicy(); + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy = new ZoneRebalancePolicy(); } - this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.ResilientVMDeletionPolicy = new ResilientVMDeletionPolicy(this.EnableResilientVMDelete); + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy.TargetInstanceCount = this.AutomaticZoneRebalanceTargetInstanceCount; } } - - private void BuildPutObject() + private void BuildPutObject() { if (this.IsParameterBound(c => c.AutomaticOSUpgrade)) { @@ -1613,6 +730,42 @@ private void BuildPutObject() this.VirtualMachineScaleSet.VirtualMachineProfile.OsProfile.WindowsConfiguration.EnableAutomaticUpdates = this.EnableAutomaticUpdate; } + if (this.IsParameterBound(c => c.EnableAutomaticZoneRebalancingPolicy)) + { + if (this.VirtualMachineScaleSet.ZoneBalancePolicy == null) + { + this.VirtualMachineScaleSet.ZoneBalancePolicy = new ZoneBalancePolicy(); + } + this.VirtualMachineScaleSet.ZoneBalancePolicy.EnableAutomaticZoneRebalancingPolicy = this.EnableAutomaticZoneRebalancingPolicy; + } + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceStrategy)) + { + if (this.VirtualMachineScaleSet.ZoneBalancePolicy == null) + { + this.VirtualMachineScaleSet.ZoneBalancePolicy = new ZoneBalancePolicy(); + } + this.VirtualMachineScaleSet.ZoneBalancePolicy.AutomaticZoneRebalanceStrategy = this.AutomaticZoneRebalanceStrategy; + } + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceBehavior)) + { + if (this.VirtualMachineScaleSet.ZoneBalancePolicy == null) + { + this.VirtualMachineScaleSet.ZoneBalancePolicy = new ZoneBalancePolicy(); + } + this.VirtualMachineScaleSet.ZoneBalancePolicy.AutomaticZoneRebalanceBehavior = this.AutomaticZoneRebalanceBehavior; + } + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceTargetInstanceCount)) + { + if (this.VirtualMachineScaleSet.ZoneBalancePolicy == null) + { + this.VirtualMachineScaleSet.ZoneBalancePolicy = new ZoneBalancePolicy(); + } + this.VirtualMachineScaleSet.ZoneBalancePolicy.AutomaticZoneRebalanceTargetInstanceCount = this.AutomaticZoneRebalanceTargetInstanceCount; + } + if (this.IsParameterBound(c => c.IdentityId)) { if (this.VirtualMachineScaleSet.Identity == null) @@ -1732,154 +885,102 @@ private void BuildPutObject() if (this.IsParameterBound(c => c.ImageReferenceVersion)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetStorageProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.ImageReference == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.ImageReference.Version = this.ImageReferenceVersion; } if (this.IsParameterBound(c => c.ImageUri)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetStorageProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetOSDisk(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.Image == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.Image = new VirtualHardDisk(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.Image.Uri = this.ImageUri; } if (this.IsParameterBound(c => c.LicenseType)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.LicenseType = this.LicenseType; } if (this.IsParameterBound(c => c.ManagedDiskStorageAccountType)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetStorageProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetOSDisk(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk = new VirtualMachineScaleSetManagedDiskParameters(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk.StorageAccountType = this.ManagedDiskStorageAccountType; } if (this.IsParameterBound(c => c.MaxBatchInstancePercent)) { if (this.VirtualMachineScaleSet.UpgradePolicy == null) - { this.VirtualMachineScaleSet.UpgradePolicy = new UpgradePolicy(); - } if (this.VirtualMachineScaleSet.UpgradePolicy.RollingUpgradePolicy == null) - { this.VirtualMachineScaleSet.UpgradePolicy.RollingUpgradePolicy = new RollingUpgradePolicy(); - } this.VirtualMachineScaleSet.UpgradePolicy.RollingUpgradePolicy.MaxBatchInstancePercent = this.MaxBatchInstancePercent; } if (this.IsParameterBound(c => c.MaxPrice)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.BillingProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.BillingProfile = new BillingProfile(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.BillingProfile.MaxPrice = this.MaxPrice; } if (this.IsParameterBound(c => c.MaxUnhealthyInstancePercent)) { if (this.VirtualMachineScaleSet.UpgradePolicy == null) - { this.VirtualMachineScaleSet.UpgradePolicy = new UpgradePolicy(); - } if (this.VirtualMachineScaleSet.UpgradePolicy.RollingUpgradePolicy == null) - { this.VirtualMachineScaleSet.UpgradePolicy.RollingUpgradePolicy = new RollingUpgradePolicy(); - } this.VirtualMachineScaleSet.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyInstancePercent = this.MaxUnhealthyInstancePercent; } if (this.IsParameterBound(c => c.MaxUnhealthyUpgradedInstancePercent)) { if (this.VirtualMachineScaleSet.UpgradePolicy == null) - { this.VirtualMachineScaleSet.UpgradePolicy = new UpgradePolicy(); - } if (this.VirtualMachineScaleSet.UpgradePolicy.RollingUpgradePolicy == null) - { this.VirtualMachineScaleSet.UpgradePolicy.RollingUpgradePolicy = new RollingUpgradePolicy(); - } this.VirtualMachineScaleSet.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyUpgradedInstancePercent = this.MaxUnhealthyUpgradedInstancePercent; } if (this.IsParameterBound(c => c.OsDiskCaching)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetStorageProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetOSDisk(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.Caching = this.OsDiskCaching; } if (this.IsParameterBound(c => c.OsDiskWriteAccelerator)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetStorageProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetOSDisk(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.WriteAcceleratorEnabled = this.OsDiskWriteAccelerator; } @@ -1891,93 +992,69 @@ private void BuildPutObject() if (this.IsParameterBound(c => c.PauseTimeBetweenBatches)) { if (this.VirtualMachineScaleSet.UpgradePolicy == null) - { this.VirtualMachineScaleSet.UpgradePolicy = new UpgradePolicy(); - } if (this.VirtualMachineScaleSet.UpgradePolicy.RollingUpgradePolicy == null) - { this.VirtualMachineScaleSet.UpgradePolicy.RollingUpgradePolicy = new RollingUpgradePolicy(); - } this.VirtualMachineScaleSet.UpgradePolicy.RollingUpgradePolicy.PauseTimeBetweenBatches = this.PauseTimeBetweenBatches; } if (this.IsParameterBound(c => c.PlanName)) { if (this.VirtualMachineScaleSet.Plan == null) - { this.VirtualMachineScaleSet.Plan = new Plan(); - } this.VirtualMachineScaleSet.Plan.Name = this.PlanName; } if (this.IsParameterBound(c => c.PlanProduct)) { if (this.VirtualMachineScaleSet.Plan == null) - { this.VirtualMachineScaleSet.Plan = new Plan(); - } this.VirtualMachineScaleSet.Plan.Product = this.PlanProduct; } if (this.IsParameterBound(c => c.PlanPromotionCode)) { if (this.VirtualMachineScaleSet.Plan == null) - { this.VirtualMachineScaleSet.Plan = new Plan(); - } this.VirtualMachineScaleSet.Plan.PromotionCode = this.PlanPromotionCode; } if (this.IsParameterBound(c => c.PlanPublisher)) { if (this.VirtualMachineScaleSet.Plan == null) - { this.VirtualMachineScaleSet.Plan = new Plan(); - } this.VirtualMachineScaleSet.Plan.Publisher = this.PlanPublisher; } if (this.IsParameterBound(c => c.ProvisionVMAgent)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.OsProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.OsProfile = new VirtualMachineScaleSetOSProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.OsProfile.WindowsConfiguration == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.OsProfile.WindowsConfiguration = new WindowsConfiguration(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.OsProfile.WindowsConfiguration.ProvisionVMAgent = this.ProvisionVMAgent; } if (this.IsParameterBound(c => c.ProximityPlacementGroupId)) { if (this.VirtualMachineScaleSet.ProximityPlacementGroup == null) - { this.VirtualMachineScaleSet.ProximityPlacementGroup = new SubResource(); - } this.VirtualMachineScaleSet.ProximityPlacementGroup.Id = this.ProximityPlacementGroupId; } if (this.IsParameterBound(c => c.ScaleInPolicy)) { if (this.VirtualMachineScaleSet.ScaleInPolicy == null) - { this.VirtualMachineScaleSet.ScaleInPolicy = new ScaleInPolicy(); - } this.VirtualMachineScaleSet.ScaleInPolicy.Rules = this.ScaleInPolicy; } if (this.IsParameterBound(c => c.ScaleInPolicyForceDeletion)) { if (this.VirtualMachineScaleSet.ScaleInPolicy == null) - { this.VirtualMachineScaleSet.ScaleInPolicy = new ScaleInPolicy(); - } this.VirtualMachineScaleSet.ScaleInPolicy.ForceDeletion = this.ScaleInPolicyForceDeletion; } @@ -1994,27 +1071,21 @@ private void BuildPutObject() if (this.IsParameterBound(c => c.SkuCapacity)) { if (this.VirtualMachineScaleSet.Sku == null) - { this.VirtualMachineScaleSet.Sku = new Sku(); - } this.VirtualMachineScaleSet.Sku.Capacity = this.SkuCapacity; } if (this.IsParameterBound(c => c.SkuName)) { if (this.VirtualMachineScaleSet.Sku == null) - { this.VirtualMachineScaleSet.Sku = new Sku(); - } this.VirtualMachineScaleSet.Sku.Name = this.SkuName; } if (this.IsParameterBound(c => c.SkuTier)) { if (this.VirtualMachineScaleSet.Sku == null) - { this.VirtualMachineScaleSet.Sku = new Sku(); - } this.VirtualMachineScaleSet.Sku.Tier = this.SkuTier; } @@ -2026,99 +1097,67 @@ private void BuildPutObject() if (this.IsParameterBound(c => c.TerminateScheduledEventNotBeforeTimeoutInMinutes)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.ScheduledEventsProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile = new TerminateNotificationProfile(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile.NotBeforeTimeout = XmlConvert.ToString(new TimeSpan(0, this.TerminateScheduledEventNotBeforeTimeoutInMinutes, 0)); } if (this.IsParameterBound(c => c.TerminateScheduledEvents)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.ScheduledEventsProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile = new TerminateNotificationProfile(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile.Enable = this.TerminateScheduledEvents; } if (this.IsParameterBound(c => c.TimeZone)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.OsProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.OsProfile = new VirtualMachineScaleSetOSProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.OsProfile.WindowsConfiguration == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.OsProfile.WindowsConfiguration = new WindowsConfiguration(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.OsProfile.WindowsConfiguration.TimeZone = this.TimeZone; } if (this.IsParameterBound(c => c.UltraSSDEnabled)) { if (this.VirtualMachineScaleSet.AdditionalCapabilities == null) - { this.VirtualMachineScaleSet.AdditionalCapabilities = new AdditionalCapabilities(); - } this.VirtualMachineScaleSet.AdditionalCapabilities.UltraSSDEnabled = this.UltraSSDEnabled; } if (this.IsParameterBound(c => c.UpgradePolicyMode)) { if (this.VirtualMachineScaleSet.UpgradePolicy == null) - { this.VirtualMachineScaleSet.UpgradePolicy = new UpgradePolicy(); - } this.VirtualMachineScaleSet.UpgradePolicy.Mode = this.UpgradePolicyMode; } if (this.IsParameterBound(c => c.VhdContainer)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetStorageProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetOSDisk(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.VhdContainers = this.VhdContainer; } if (this.IsParameterBound(c => c.EncryptionAtHost)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile.EncryptionAtHost = this.EncryptionAtHost; } @@ -2138,36 +1177,28 @@ private void BuildPutObject() } if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.UserData = this.UserData; } if (this.IsParameterBound(c => c.BaseRegularPriorityCount)) { if (this.VirtualMachineScaleSet.PriorityMixPolicy == null) - { this.VirtualMachineScaleSet.PriorityMixPolicy = new PriorityMixPolicy(); - } this.VirtualMachineScaleSet.PriorityMixPolicy.BaseRegularPriorityCount = this.BaseRegularPriorityCount; } if (this.IsParameterBound(c => c.RegularPriorityPercentage)) { if (this.VirtualMachineScaleSet.PriorityMixPolicy == null) - { this.VirtualMachineScaleSet.PriorityMixPolicy = new PriorityMixPolicy(); - } this.VirtualMachineScaleSet.PriorityMixPolicy.RegularPriorityPercentageAboveBase = this.RegularPriorityPercentage; } if (this.IsParameterBound(c => c.SkuProfileVmSize)) { if (this.VirtualMachineScaleSet.SkuProfile == null) - { this.VirtualMachineScaleSet.SkuProfile = new SkuProfile(); - } this.VirtualMachineScaleSet.SkuProfile.VmSizes = new List(); foreach (string vmSize in this.SkuProfileVmSize) { @@ -2190,17 +1221,11 @@ private void BuildPutObject() if (this.IsParameterBound(c => c.SecurityType)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile.UefiSettings == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile.SecurityType = this.SecurityType; if (this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile.SecurityType?.ToLower() == ConstantValues.TrustedLaunchSecurityType || this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile.SecurityType?.ToLower() == ConstantValues.ConfidentialVMSecurityType) { @@ -2216,34 +1241,22 @@ private void BuildPutObject() if (this.IsParameterBound(c => c.EnableVtpm)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile.UefiSettings == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled = this.EnableVtpm; } // Only used for SecurityType == TrustedLaunch if (this.IsParameterBound(c => c.EnableSecureBoot)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } if (this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile.UefiSettings == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); - } this.VirtualMachineScaleSet.VirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled = this.EnableSecureBoot; } @@ -2259,26 +1272,18 @@ private void BuildPutObject() if (this.IsParameterBound(c => c.EnableResilientVMCreate)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.ResiliencyPolicy == null) - { this.VirtualMachineScaleSet.ResiliencyPolicy = new ResiliencyPolicy(); - } this.VirtualMachineScaleSet.ResiliencyPolicy.ResilientVMCreationPolicy = new ResilientVMCreationPolicy(this.EnableResilientVMCreate); } if (this.IsParameterBound(c => c.EnableResilientVMDelete)) { if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) - { this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } if (this.VirtualMachineScaleSet.ResiliencyPolicy == null) - { this.VirtualMachineScaleSet.ResiliencyPolicy = new ResiliencyPolicy(); - } this.VirtualMachineScaleSet.ResiliencyPolicy.ResilientVMDeletionPolicy = new ResilientVMDeletionPolicy(this.EnableResilientVMDelete); } } diff --git a/src/Compute/Compute/Manual/PSVirtualMachineScaleSet.cs b/src/Compute/Compute/Manual/PSVirtualMachineScaleSet.cs index 1b33ec808285..4e935d616d9e 100644 --- a/src/Compute/Compute/Manual/PSVirtualMachineScaleSet.cs +++ b/src/Compute/Compute/Manual/PSVirtualMachineScaleSet.cs @@ -1,24 +1,20 @@ -// -// Copyright (c) Microsoft and contributors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// -// See the License for the specific language governing permissions and -// limitations under the License. -// - namespace Microsoft.Azure.Commands.Compute.Automation.Models { public partial class PSVirtualMachineScaleSet { // Gets or sets the FQDN. public string FullyQualifiedDomainName { get; set; } + + // Gets or sets whether Auto AZ Balance will be applied for this VMSS. + public bool? EnableAutomaticZoneRebalancingPolicy { get; set; } + + // Specifies the strategy/actions taken to balance the scale set. + public string AutomaticZoneRebalanceStrategy { get; set; } + + // Specifies detailed behavior for the rebalance strategy. + public string AutomaticZoneRebalanceBehavior { get; set; } + + // The target instance count the zonal scale set aims to reach. + public int? AutomaticZoneRebalanceTargetInstanceCount { get; set; } } } \ No newline at end of file From 7e3f62f4e7a8f78c97998379f163cdf2f876a97a Mon Sep 17 00:00:00 2001 From: PSCmdAssistant Date: Thu, 17 Apr 2025 21:59:26 +0000 Subject: [PATCH 2/2] Test generation and changelog update --- .../VirtualMachineScaleSetTests.cs | 30 ++- .../VirtualMachineScaleSetTests.ps1 | 240 ++++++++++++++++++ .../ScenarioTests/VirtualMachineTests.cs | 9 +- .../ScenarioTests/VirtualMachineTests.ps1 | 45 +++- src/Compute/Compute/ChangeLog.md | 1 + 5 files changed, 322 insertions(+), 3 deletions(-) diff --git a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.cs b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.cs index 16762353517f..f1890cf92889 100644 --- a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.cs +++ b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.cs @@ -465,5 +465,33 @@ public void TestEncryptionIdentityNotPartOfAzureVmssConfig() { TestRunner.RunTestScript("Test-EncryptionIdentityNotPartOfAzureVmssConfig"); } - } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void testgennewazvmssconfig() + { + TestRunner.RunTestScript("TestGen-newazvmssconfig"); + } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void testgennewazvmss() + { + TestRunner.RunTestScript("TestGen-newazvmss"); + } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void testgenupdateazvmss() + { + TestRunner.RunTestScript("TestGen-updateazvmss"); + } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void testgenupdateazvm() + { + TestRunner.RunTestScript("TestGen-updateazvm"); + } + } } diff --git a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.ps1 b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.ps1 index 7987e92bf25d..2431d4e8ed0a 100644 --- a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.ps1 +++ b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.ps1 @@ -5789,3 +5789,243 @@ function Test-EncryptionIdentityNotPartOfAzureVmssConfig{ clean-ResourceGroup $rgName; } } + +function TestGen-newazvmssconfig +{ + # Setup + $rgname = Get-ComputeTestResourceName; + $loc = Get-Location; + + try + { + # Common + New-AzResourceGroup -Name $rgname -Location $loc -Force; + $vmssName = 'vmss' + $rgname; + + # Create VMSS Config with new parameters + $vmssConfig = New-AzVmssConfig -Location $loc ` + -EnableAutomaticZoneRebalancingPolicy $true ` + -AutomaticZoneRebalanceStrategy "Recreate" ` + -AutomaticZoneRebalanceBehavior "CreateBeforeDelete" ` + -AutomaticZoneRebalanceTargetInstanceCount 5; + + # Validate VMSS Config properties + Assert-AreEqual $vmssConfig.EnableAutomaticZoneRebalancingPolicy $true; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceStrategy "Recreate"; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceTargetInstanceCount 5; + + # Create VMSS using the config + New-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmssConfig; + $vmssGet = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName; + + # Validate VMSS properties after creation + Assert-AreEqual $vmssGet.VirtualMachineScaleSet.EnableAutomaticZoneRebalancingPolicy $true; + Assert-AreEqual $vmssGet.VirtualMachineScaleSet.AutomaticZoneRebalanceStrategy "Recreate"; + Assert-AreEqual $vmssGet.VirtualMachineScaleSet.AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + Assert-AreEqual $vmssGet.VirtualMachineScaleSet.AutomaticZoneRebalanceTargetInstanceCount 5; + } + finally + { + # Cleanup + Remove-AzResourceGroup -Name $rgname -Force -ErrorAction SilentlyContinue; + } +} + +function TestGen-newazvmss +{ + # Setup + $rgname = Get-ComputeTestResourceName; + $loc = Get-Location; + + try + { + # Common + New-AzResourceGroup -Name $rgname -Location $loc -Force; + + $vmssName = 'vs' + $rgname; + $adminUsername = Get-ComputeTestResourceName; + $password = Get-PasswordForVM; + $adminPassword = $password | ConvertTo-SecureString -AsPlainText -Force; + $cred = New-Object System.Management.Automation.PSCredential ($adminUsername, $adminPassword); + + # Test New-AzVmssConfig with new parameters + $vmssConfig = New-AzVmssConfig -EnableAutomaticZoneRebalancingPolicy $true ` + -AutomaticZoneRebalanceStrategy "Recreate" ` + -AutomaticZoneRebalanceBehavior "CreateBeforeDelete" ` + -AutomaticZoneRebalanceTargetInstanceCount 5; + + Assert-IsNotNull $vmssConfig; + Assert-AreEqual $vmssConfig.EnableAutomaticZoneRebalancingPolicy $true; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceStrategy "Recreate"; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceTargetInstanceCount 5; + + # Test New-AzVmss with the new configuration + $vmss = New-AzVmss -ResourceGroupName $rgname -Credential $cred -VMScaleSetName $vmssName -VMScaleSetConfig $vmssConfig; + + Assert-IsNotNull $vmss; + Assert-AreEqual $vmss.VirtualMachineScaleSetName $vmssName; + Assert-AreEqual $vmss.Location $loc; + Assert-AreEqual $vmss.EnableAutomaticZoneRebalancingPolicy $true; + Assert-AreEqual $vmss.AutomaticZoneRebalanceStrategy "Recreate"; + Assert-AreEqual $vmss.AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + Assert-AreEqual $vmss.AutomaticZoneRebalanceTargetInstanceCount 5; + + # Test Update-AzVmss with new parameters + $updatedVmss = Update-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName ` + -EnableAutomaticZoneRebalancingPolicy $false ` + -AutomaticZoneRebalanceStrategy "TargetScaleOut" ` + -AutomaticZoneRebalanceTargetInstanceCount 10; + + Assert-IsNotNull $updatedVmss; + Assert-AreEqual $updatedVmss.EnableAutomaticZoneRebalancingPolicy $false; + Assert-AreEqual $updatedVmss.AutomaticZoneRebalanceStrategy "TargetScaleOut"; + Assert-AreEqual $updatedVmss.AutomaticZoneRebalanceTargetInstanceCount 10; + } + finally + { + # Cleanup + Remove-AzResourceGroup -Name $rgname -Force -ErrorAction SilentlyContinue; + } +} + +function TestGen-updateazvmss +{ + # Setup + $rgname = Get-ComputeTestResourceName; + $loc = Get-Location; + + try + { + # Common + New-AzResourceGroup -Name $rgname -Location $loc -Force; + + $vmssSize = 'Standard_D4s_v3'; + $PublisherName = "MicrosoftWindowsServer"; + $Offer = "WindowsServer"; + $SKU = "2016-datacenter-gensecond"; + + # NRP + $vnetworkName = 'vnet' + $rgname; + $subnetName = 'subnet' + $rgname; + $subnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix "10.0.0.0/24"; + $vnet = New-AzVirtualNetwork -Name $vnetworkName -ResourceGroupName $rgname -Location $loc -AddressPrefix "10.0.0.0/16" -Subnet $subnet; + $vnet = Get-AzVirtualNetwork -Name $vnetworkName -ResourceGroupName $rgname; + $subnetId = $vnet.Subnets[0].Id; + + # New VMSS Parameters + $vmssName = 'vmss' + $rgname; + $adminUsername = Get-ComputeTestResourceName; + $adminPassword = Get-PasswordForVM | ConvertTo-SecureString -AsPlainText -Force; + + $imgRef = New-Object -TypeName 'Microsoft.Azure.Commands.Compute.Models.PSVirtualMachineImage'; + $imgRef.PublisherName = $PublisherName; + $imgRef.Offer = $Offer; + $imgRef.Skus = $SKU; + $imgRef.Version = "latest"; + + $ipCfg = New-AzVmssIPConfig -Name 'test' -SubnetId $subnetId; + + $vmss = New-AzVmssConfig -Location $loc -SkuCapacity 2 -SkuName $vmssSize -UpgradePolicyMode 'Manual' ` + | Add-AzVmssNetworkInterfaceConfiguration -Name 'test' -Primary $true -IPConfiguration $ipCfg ` + | Set-AzVmssOSProfile -ComputerNamePrefix 'test' -AdminUsername $adminUsername -AdminPassword $adminPassword ` + | Set-AzVmssStorageProfile -OsDiskCreateOption 'FromImage' -OsDiskCaching 'ReadOnly' ` + -ImageReferenceOffer $imgRef.Offer -ImageReferenceSku $imgRef.Skus -ImageReferenceVersion $imgRef.Version ` + -ImageReferencePublisher $imgRef.PublisherName; + + # Create VMSS + $result = New-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmss; + $vmssGet = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName; + + # Test new parameters for Update-AzVmss + $enableAutoZoneRebalancing = $true; + $rebalanceStrategy = "TargetScaleOut"; + $rebalanceBehavior = $null; + $targetInstanceCount = 5; + + $vmssUpdated = Update-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmssGet ` + -EnableAutomaticZoneRebalancingPolicy $enableAutoZoneRebalancing ` + -AutomaticZoneRebalanceStrategy $rebalanceStrategy ` + -AutomaticZoneRebalanceBehavior $rebalanceBehavior ` + -AutomaticZoneRebalanceTargetInstanceCount $targetInstanceCount; + + $vmssGetUpdated = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName; + + # Assertions + Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.AutomaticZoneRebalancingPolicy.Enabled $enableAutoZoneRebalancing; + Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.AutomaticZoneRebalancingPolicy.Strategy $rebalanceStrategy; + Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.AutomaticZoneRebalancingPolicy.Behavior $rebalanceBehavior; + Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.AutomaticZoneRebalancingPolicy.TargetInstanceCount $targetInstanceCount; + } + finally + { + # Cleanup + Remove-AzResourceGroup -Name $rgname -Force -ErrorAction SilentlyContinue; + } +} + +function TestGen-updateazvm +{ + # Setup + $rgname = Get-ComputeTestResourceName + + try + { + # Common + $loc = Get-Location; + New-AzResourceGroup -Name $rgname -Location $loc -Force; + + # New VMSS Parameters + $vmssName = 'vmssUpdateTest' + $rgname; + $adminUsername = 'TestUser'; + $adminPassword = $PLACEHOLDER; + $securePassword = ConvertTo-SecureString $adminPassword -AsPlainText -Force; + $cred = New-Object System.Management.Automation.PSCredential ($adminUsername, $securePassword); + + # Create VMSS + $Vmss = New-AzVmssConfig ` + -Location $loc ` + -SkuCapacity 2 ` + -SkuName "Standard_DS1_v2" ` + -EnableAutomaticZoneRebalancingPolicy $true ` + -AutomaticZoneRebalanceStrategy "Recreate" ` + -AutomaticZoneRebalanceBehavior "CreateBeforeDelete" ` + -AutomaticZoneRebalanceTargetInstanceCount 5; + + $VmssFlex = New-AzVmss ` + -ResourceGroupName $rgname ` + -Name $vmssName ` + -Location $loc ` + -Credential $cred ` + -VmssConfig $Vmss; + + # Validate VMSS creation with new parameters + $createdVmss = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName; + Assert-AreEqual $true $createdVmss.EnableAutomaticZoneRebalancingPolicy; + Assert-AreEqual "Recreate" $createdVmss.AutomaticZoneRebalanceStrategy; + Assert-AreEqual "CreateBeforeDelete" $createdVmss.AutomaticZoneRebalanceBehavior; + Assert-AreEqual 5 $createdVmss.AutomaticZoneRebalanceTargetInstanceCount; + + # Update VMSS with new parameters + $updatedVmss = Update-AzVmss ` + -ResourceGroupName $rgname ` + -VMScaleSetName $vmssName ` + -EnableAutomaticZoneRebalancingPolicy $false ` + -AutomaticZoneRebalanceStrategy "TargetScaleOut" ` + -AutomaticZoneRebalanceTargetInstanceCount 10; + + # Validate VMSS update + $updatedVmssDetails = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName; + Assert-AreEqual $false $updatedVmssDetails.EnableAutomaticZoneRebalancingPolicy; + Assert-AreEqual "TargetScaleOut" $updatedVmssDetails.AutomaticZoneRebalanceStrategy; + Assert-Null $updatedVmssDetails.AutomaticZoneRebalanceBehavior; + Assert-AreEqual 10 $updatedVmssDetails.AutomaticZoneRebalanceTargetInstanceCount; + + } + finally + { + # Cleanup + Remove-AzResourceGroup -Name $rgname -Force -AsJob; + } +} diff --git a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.cs b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.cs index 4d23f017bad7..0c2e1896a1ff 100644 --- a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.cs +++ b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.cs @@ -695,5 +695,12 @@ public void TestVirtualMachinePlacement() { TestRunner.RunTestScript("Test-VirtualMachinePlacement"); } - } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void testgennewazvm() + { + TestRunner.RunTestScript("TestGen-newazvm"); + } + } } diff --git a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.ps1 b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.ps1 index 87134d2ee720..04397d84b838 100644 --- a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.ps1 +++ b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.ps1 @@ -7945,4 +7945,47 @@ function Test-VirtualMachinePlacement # Cleanup Clean-ResourceGroup $rgname; } -} \ No newline at end of file +} +function TestGen-newazvm +{ + # To have a test recording + Get-AzVm + + $name = Get-ComputeTestResourceName + $vmssName = 'vmss' + $name + $location = Get-Location + + # Test New-AzVmssConfig with new parameters + $vmssConfig = New-AzVmssConfig -VMSSName $vmssName -Location $location ` + -EnableAutomaticZoneRebalancingPolicy $true ` + -AutomaticZoneRebalanceStrategy 'Recreate' ` + -AutomaticZoneRebalanceBehavior 'CreateBeforeDelete' ` + -AutomaticZoneRebalanceTargetInstanceCount 5 + + # Validate New-AzVmssConfig + Assert-AreEqual $vmssConfig.EnableAutomaticZoneRebalancingPolicy $true + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceStrategy 'Recreate' + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceBehavior 'CreateBeforeDelete' + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceTargetInstanceCount 5 + + # Test Update-AzVmss with new parameters + $vmssConfigUpdated = Update-AzVmss -VMSS $vmssConfig ` + -EnableAutomaticZoneRebalancingPolicy $false ` + -AutomaticZoneRebalanceStrategy 'TargetScaleOut' ` + -AutomaticZoneRebalanceTargetInstanceCount 10 + + # Validate Update-AzVmss + Assert-AreEqual $vmssConfigUpdated.EnableAutomaticZoneRebalancingPolicy $false + Assert-AreEqual $vmssConfigUpdated.AutomaticZoneRebalanceStrategy 'TargetScaleOut' + Assert-AreEqual $vmssConfigUpdated.AutomaticZoneRebalanceTargetInstanceCount 10 + + # Test Update-AzVmss with partial parameters + $vmssConfigPartialUpdate = Update-AzVmss -VMSS $vmssConfigUpdated ` + -AutomaticZoneRebalanceBehavior 'CreateBeforeDelete' + + # Validate partial Update-AzVmss + Assert-AreEqual $vmssConfigPartialUpdate.AutomaticZoneRebalanceBehavior 'CreateBeforeDelete' + Assert-AreEqual $vmssConfigPartialUpdate.AutomaticZoneRebalanceStrategy 'TargetScaleOut' + Assert-AreEqual $vmssConfigPartialUpdate.EnableAutomaticZoneRebalancingPolicy $false + Assert-AreEqual $vmssConfigPartialUpdate.AutomaticZoneRebalanceTargetInstanceCount 10 +} diff --git a/src/Compute/Compute/ChangeLog.md b/src/Compute/Compute/ChangeLog.md index e7c5a20c78f3..df946f2b6bd9 100644 --- a/src/Compute/Compute/ChangeLog.md +++ b/src/Compute/Compute/ChangeLog.md @@ -20,6 +20,7 @@ --> ## Upcoming Release +* Added parameters `EnableAutomaticZoneRebalancingPolicy`, `AutomaticZoneRebalanceStrategy`, `AutomaticZoneRebalanceBehavior`, and `AutomaticZoneRebalanceTargetInstanceCount` to `New-AzVmssConfig` and `Update-AzVmss`. * Added new cmdlets `Add-AzVmssSkuProfileVMSize` and `Remove-AzVmssSkuProfileVMSize` to add and remove VM sizes to and from the VMSS SkuProfile. * Added new parameters `ZonePlacementPolicy`, `IncludeZone`, `ExcludeZone`, and `AlignRegionalDisksToVMZone` to cmdlets `New-AzVM` and `New-AzVmConfig` * Added new parameter `AlignRegionalDisksToVMZone` to cmdlet `Update-AzVM`.