From 843198e7fa414a1682a4bddf82f6ee0ed25ae9c8 Mon Sep 17 00:00:00 2001 From: PSCmdAssistant Date: Mon, 21 Apr 2025 17:46:58 +0000 Subject: [PATCH 1/2] Autogen code --- .../Config/NewAzureRmVmssConfigCommand.cs | 651 +--------- .../VirtualMachineScaleSetUpdateMethod.cs | 1085 ++--------------- .../Manual/PSVirtualMachineScaleSet.cs | 22 +- 3 files changed, 180 insertions(+), 1578 deletions(-) diff --git a/src/Compute/Compute/Generated/VirtualMachineScaleSet/Config/NewAzureRmVmssConfigCommand.cs b/src/Compute/Compute/Generated/VirtualMachineScaleSet/Config/NewAzureRmVmssConfigCommand.cs index d7121bc377c0..8197913efd68 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,28 @@ 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, + HelpMessage = "Specifies whether automatic zone rebalancing policy should be enabled.")] + public bool EnableAutomaticZoneRebalancingPolicy { get; set; } + + [Parameter( + Mandatory = false, + HelpMessage = "Specifies the strategy/actions taken to balance the scale set.")] + [PSArgumentCompleter("Recreate", "TargetScaleOut")] + public string AutomaticZoneRebalanceStrategy { get; set; } + + [Parameter( + Mandatory = false, + 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, + 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 +458,43 @@ 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; - } - - if (this.IsParameterBound(c => c.PlanName)) - { - if (vPlan == null) - { - vPlan = new Plan(); - } - vPlan.Name = this.PlanName; - } + // ZoneRebalancingPolicy + ZoneRebalancingPolicy vZoneRebalancingPolicy = null; - if (this.IsParameterBound(c => c.PlanPublisher)) + if (this.IsParameterBound(c => c.EnableAutomaticZoneRebalancingPolicy)) { - if (vPlan == null) + if (vZoneRebalancingPolicy == null) { - vPlan = new Plan(); + vZoneRebalancingPolicy = new ZoneRebalancingPolicy(); } - vPlan.Publisher = this.PlanPublisher; + vZoneRebalancingPolicy.Enabled = this.EnableAutomaticZoneRebalancingPolicy; } - if (this.IsParameterBound(c => c.PlanProduct)) + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceStrategy)) { - 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) + if (vZoneRebalancingPolicy == null) { - vVirtualMachineProfile.CapacityReservation = new CapacityReservationProfile(); + vZoneRebalancingPolicy = new ZoneRebalancingPolicy(); } - vVirtualMachineProfile.CapacityReservation.CapacityReservationGroup = new SubResource(this.CapacityReservationGroupId); + vZoneRebalancingPolicy.Strategy = this.AutomaticZoneRebalanceStrategy; } - if (this.IsParameterBound(c => c.AutomaticRepairGracePeriod)) + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceBehavior)) { - if (vAutomaticRepairsPolicy == null) + if (vZoneRebalancingPolicy == null) { - vAutomaticRepairsPolicy = new AutomaticRepairsPolicy(); + vZoneRebalancingPolicy = new ZoneRebalancingPolicy(); } - vAutomaticRepairsPolicy.GracePeriod = this.AutomaticRepairGracePeriod; + vZoneRebalancingPolicy.Behavior = this.AutomaticZoneRebalanceBehavior; } - if (this.IsParameterBound(c => c.DisableAutoRollback)) + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceTargetInstanceCount)) { - 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) + if (vZoneRebalancingPolicy == null) { - vVirtualMachineProfile.SecurityPostureReference = new SecurityPostureReference(); + vZoneRebalancingPolicy = new ZoneRebalancingPolicy(); } - vVirtualMachineProfile.SecurityPostureReference.ExcludeExtensions = this.SecurityPostureExcludeExtension; + vZoneRebalancingPolicy.TargetInstanceCount = this.AutomaticZoneRebalanceTargetInstanceCount; } var vVirtualMachineScaleSet = new PSVirtualMachineScaleSet @@ -1087,7 +521,8 @@ private void Run() SpotRestorePolicy = this.IsParameterBound(c => c.EnableSpotRestore) ? new SpotRestorePolicy(true, this.SpotRestoreTimeout) : null, PriorityMixPolicy = vPriorityMixPolicy, SkuProfile = vSkuProfile, - ResiliencyPolicy = vResiliencyPolicy + ResiliencyPolicy = vResiliencyPolicy, + ZoneRebalancingPolicy = vZoneRebalancingPolicy }; WriteObject(vVirtualMachineScaleSet); diff --git a/src/Compute/Compute/Generated/VirtualMachineScaleSet/VirtualMachineScaleSetUpdateMethod.cs b/src/Compute/Compute/Generated/VirtualMachineScaleSet/VirtualMachineScaleSetUpdateMethod.cs index a4797ba02b3c..7858f23a4365 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"); @@ -413,829 +413,63 @@ public override void ExecuteCmdlet() Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "used to make a request conditional for the PUT and other non-safe methods. The server will only return the requested resources if the resource matches one of the listed ETag values. Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes.")] - public string IfMatch { get; set; } - - [Parameter( - Mandatory = false, - ValueFromPipelineByPropertyName = true, - HelpMessage = "Used to make a request conditional for the GET and HEAD methods. The server will only return the requested resources if none of the listed ETag values match the current entity. Used to make a request conditional for the GET and HEAD methods. The server will only return the requested resources if none of the listed ETag values match the current entity. Set to '*' to allow a new record set to be created, but to prevent updating an existing record set. Other values will result in error from server as they are not supported.")] - public string IfNoneMatch { get; set; } - - [Parameter( - Mandatory = false, - HelpMessage = "Array of VM sizes for the scale set.", - ValueFromPipelineByPropertyName = true)] - public string[] SkuProfileVmSize { get; set; } - - [Parameter( - Mandatory = false, - HelpMessage = "Allocation strategy for the SKU profile.", - ValueFromPipelineByPropertyName = true)] - [ValidateSet("LowestPrice", "CapacityOptimized")] - public string SkuProfileAllocationStrategy { get; set; } - - [Parameter( - Mandatory = false, - HelpMessage = "Specifies whether resilient VM creation should be enabled on the virtual machine scale set. The default value is false.")] - public bool EnableResilientVMCreate { get; set; } - - [Parameter( - Mandatory = false, - 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; - } - - - 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; - } - - 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; - } + public string IfMatch { get; set; } - 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; - } + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Used to make a request conditional for the GET and HEAD methods. The server will only return the requested resources if none of the listed ETag values match the current entity. Used to make a request conditional for the GET and HEAD methods. The server will only return the requested resources if none of the listed ETag values match the current entity. Set to '*' to allow a new record set to be created, but to prevent updating an existing record set. Other values will result in error from server as they are not supported.")] + public string IfNoneMatch { get; set; } - 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; - } + [Parameter( + Mandatory = false, + HelpMessage = "Array of VM sizes for the scale set.", + ValueFromPipelineByPropertyName = true)] + public string[] SkuProfileVmSize { get; set; } - 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; - } + [Parameter( + Mandatory = false, + HelpMessage = "Allocation strategy for the SKU profile.", + ValueFromPipelineByPropertyName = true)] + [ValidateSet("LowestPrice", "CapacityOptimized")] + public string SkuProfileAllocationStrategy { get; set; } - 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); - } + [Parameter( + Mandatory = false, + HelpMessage = "Specifies whether resilient VM creation should be enabled on the virtual machine scale set. The default value is false.")] + public bool EnableResilientVMCreate { get; set; } - 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)); - } + [Parameter( + Mandatory = false, + 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; } - 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; - } + [Parameter( + Mandatory = false, + HelpMessage = "Specifies whether automatic zone rebalancing policy is enabled.")] + public bool EnableAutomaticZoneRebalancingPolicy { get; set; } - 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; - } + [Parameter( + Mandatory = false, + HelpMessage = "Specifies the strategy/actions taken to balance the scale set.")] + [ValidateSet("Recreate", "TargetScaleOut", IgnoreCase = true)] + public string AutomaticZoneRebalanceStrategy { get; set; } - 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; - } + [Parameter( + Mandatory = false, + HelpMessage = "Specifies detailed behavior for the rebalance strategy. Currently only applicable when the RebalanceStrategy is set to 'Recreate'.")] + [ValidateSet("CreateBeforeDelete", IgnoreCase = true)] + public string AutomaticZoneRebalanceBehavior { get; set; } - if (this.IsParameterBound(c => c.UpgradePolicyMode)) + [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) { @@ -1245,222 +479,107 @@ private void BuildPatchObject() { 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) + if (this.VirtualMachineScaleSetUpdate.UpgradePolicy.AutomaticOSUpgradePolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetUpdateOSDisk(); + this.VirtualMachineScaleSetUpdate.UpgradePolicy.AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.VhdContainers = this.VhdContainer; + this.VirtualMachineScaleSetUpdate.UpgradePolicy.AutomaticOSUpgradePolicy.EnableAutomaticOSUpgrade = this.AutomaticOSUpgrade; } - if (this.IsParameterBound(c => c.EncryptionAtHost)) + 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.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)) - { - this.UserData = ValidateBase64EncodedString.EncodeStringToBase64(this.UserData); - this.WriteInformation(ValidateBase64EncodedString.UserDataEncodeNotification, new string[] { "PSHOST" }); - } - - if (this.VirtualMachineScaleSet.VirtualMachineProfile == null) + if (this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy == null) { - this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); + this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy = new AutomaticRepairsPolicy(); } - this.VirtualMachineScaleSet.VirtualMachineProfile.UserData = this.UserData; + this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy.GracePeriod = this.AutomaticRepairGracePeriod; } - if (this.IsParameterBound(c => c.OSImageScheduledEventEnabled)) + 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.Enable = this.OSImageScheduledEventEnabled; + this.VirtualMachineScaleSetUpdate.AutomaticRepairsPolicy.Enabled = this.EnableAutomaticRepair; } - if (this.IsParameterBound(c => c.OSImageScheduledEventNotBeforeTimeoutInMinutes)) + 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.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.RepairAction = this.AutomaticRepairAction; } - // SecurityType, includes TrustedLaunch and ConfidentialVM and Standard. - if (this.IsParameterBound(c => c.SecurityType)) + 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(); - } - 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 - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings = null; - } - } - // Only used for SecurityType == TrustedLaunch - if (this.IsParameterBound(c => c.EnableVtpm)) - { - 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.ZoneRebalancingPolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); + this.VirtualMachineScaleSetUpdate.ZoneRebalancingPolicy = new ZoneRebalancingPolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled = this.EnableVtpm; + this.VirtualMachineScaleSetUpdate.ZoneRebalancingPolicy.Enabled = 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.ZoneRebalancingPolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); + this.VirtualMachineScaleSetUpdate.ZoneRebalancingPolicy = new ZoneRebalancingPolicy(); } - 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.ZoneRebalancingPolicy.Strategy = 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.ZoneRebalancingPolicy == null) { - this.VirtualMachineScaleSetUpdate.ResiliencyPolicy = new ResiliencyPolicy(); + this.VirtualMachineScaleSetUpdate.ZoneRebalancingPolicy = new ZoneRebalancingPolicy(); } - this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.ResilientVMCreationPolicy = new ResilientVMCreationPolicy(this.EnableResilientVMCreate); + this.VirtualMachineScaleSetUpdate.ZoneRebalancingPolicy.Behavior = 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.ZoneRebalancingPolicy == null) { - this.VirtualMachineScaleSetUpdate.ResiliencyPolicy = new ResiliencyPolicy(); + this.VirtualMachineScaleSetUpdate.ZoneRebalancingPolicy = new ZoneRebalancingPolicy(); } - this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.ResilientVMDeletionPolicy = new ResilientVMDeletionPolicy(this.EnableResilientVMDelete); + this.VirtualMachineScaleSetUpdate.ZoneRebalancingPolicy.TargetInstanceCount = this.AutomaticZoneRebalanceTargetInstanceCount; } - } - private void BuildPutObject() + // Existing code continues... + } + private void BuildPutObject() { if (this.IsParameterBound(c => c.AutomaticOSUpgrade)) { @@ -2281,6 +1400,42 @@ private void BuildPutObject() } this.VirtualMachineScaleSet.ResiliencyPolicy.ResilientVMDeletionPolicy = new ResilientVMDeletionPolicy(this.EnableResilientVMDelete); } + + if (this.IsParameterBound(c => c.EnableAutomaticZoneRebalancingPolicy)) + { + if (this.VirtualMachineScaleSet.ZoneRebalancingPolicy == null) + { + this.VirtualMachineScaleSet.ZoneRebalancingPolicy = new ZoneRebalancingPolicy(); + } + this.VirtualMachineScaleSet.ZoneRebalancingPolicy.Enabled = this.EnableAutomaticZoneRebalancingPolicy; + } + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceStrategy)) + { + if (this.VirtualMachineScaleSet.ZoneRebalancingPolicy == null) + { + this.VirtualMachineScaleSet.ZoneRebalancingPolicy = new ZoneRebalancingPolicy(); + } + this.VirtualMachineScaleSet.ZoneRebalancingPolicy.Strategy = this.AutomaticZoneRebalanceStrategy; + } + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceBehavior)) + { + if (this.VirtualMachineScaleSet.ZoneRebalancingPolicy == null) + { + this.VirtualMachineScaleSet.ZoneRebalancingPolicy = new ZoneRebalancingPolicy(); + } + this.VirtualMachineScaleSet.ZoneRebalancingPolicy.Behavior = this.AutomaticZoneRebalanceBehavior; + } + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceTargetInstanceCount)) + { + if (this.VirtualMachineScaleSet.ZoneRebalancingPolicy == null) + { + this.VirtualMachineScaleSet.ZoneRebalancingPolicy = new ZoneRebalancingPolicy(); + } + this.VirtualMachineScaleSet.ZoneRebalancingPolicy.TargetInstanceCount = this.AutomaticZoneRebalanceTargetInstanceCount; + } } } } \ No newline at end of file diff --git a/src/Compute/Compute/Manual/PSVirtualMachineScaleSet.cs b/src/Compute/Compute/Manual/PSVirtualMachineScaleSet.cs index 1b33ec808285..c2a38de78717 100644 --- a/src/Compute/Compute/Manual/PSVirtualMachineScaleSet.cs +++ b/src/Compute/Compute/Manual/PSVirtualMachineScaleSet.cs @@ -1,18 +1,18 @@ -// +// // 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 { @@ -20,5 +20,17 @@ public partial class PSVirtualMachineScaleSet { // Gets or sets the FQDN. public string FullyQualifiedDomainName { get; set; } + + // Gets or sets a value indicating whether automatic zone rebalancing policy is enabled. + public bool? EnableAutomaticZoneRebalancingPolicy { get; set; } + + // Gets or sets the strategy/actions taken to balance the scale set. + public string AutomaticZoneRebalanceStrategy { get; set; } + + // Gets or sets detailed behavior for the rebalance strategy. + public string AutomaticZoneRebalanceBehavior { get; set; } + + // Gets or sets the target instance count the zonal scale set aims to reach. + public int? AutomaticZoneRebalanceTargetInstanceCount { get; set; } } } \ No newline at end of file From f8d7a24cb66eb76ab5c560ffedbbd36242805ebb Mon Sep 17 00:00:00 2001 From: PSCmdAssistant Date: Mon, 21 Apr 2025 17:48:11 +0000 Subject: [PATCH 2/2] Test generation and changelog update --- .../VirtualMachineScaleSetTests.cs | 30 ++- .../VirtualMachineScaleSetTests.ps1 | 231 ++++++++++++++++++ .../ScenarioTests/VirtualMachineTests.cs | 9 +- .../ScenarioTests/VirtualMachineTests.ps1 | 60 ++++- src/Compute/Compute/ChangeLog.md | 2 + 5 files changed, 329 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..3e1cdee324c9 100644 --- a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.ps1 +++ b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.ps1 @@ -5789,3 +5789,234 @@ 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"; + + # Validate VMSS Config properties + Assert-IsTrue $vmssConfig.EnableAutomaticZoneRebalancingPolicy; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceStrategy "Recreate"; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + + # 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-IsTrue $vmssGet.EnableAutomaticZoneRebalancingPolicy; + Assert-AreEqual $vmssGet.AutomaticZoneRebalanceStrategy "Recreate"; + Assert-AreEqual $vmssGet.AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + + # Cleanup + Remove-AzResourceGroup -Name $rgname -Force; + } + catch + { + # Cleanup in case of failure + Remove-AzResourceGroup -Name $rgname -Force; + throw $_; + } +} + +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 -Location $loc ` + -EnableAutomaticZoneRebalancingPolicy $true ` + -AutomaticZoneRebalanceStrategy "Recreate" ` + -AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + + Assert-IsNotNull $vmssConfig; + Assert-AreEqual $vmssConfig.EnableAutomaticZoneRebalancingPolicy $true; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceStrategy "Recreate"; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + + # Test New-AzVmss with the new configuration + $vmss = New-AzVmss -ResourceGroupName $rgname -Credential $cred -VMScaleSetName $vmssName -VMScaleSetConfig $vmssConfig; + + Assert-IsNotNull $vmss; + Assert-AreEqual $vmss.OrchestrationMode "Flexible"; + Assert-AreEqual $vmss.EnableAutomaticZoneRebalancingPolicy $true; + Assert-AreEqual $vmss.AutomaticZoneRebalanceStrategy "Recreate"; + Assert-AreEqual $vmss.AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + + # Test Update-AzVmss with new parameters + $updatedVmss = Update-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName ` + -EnableAutomaticZoneRebalancingPolicy $false ` + -AutomaticZoneRebalanceStrategy "TargetScaleOut" ` + -AutomaticZoneRebalanceTargetInstanceCount 5; + + Assert-IsNotNull $updatedVmss; + Assert-AreEqual $updatedVmss.EnableAutomaticZoneRebalancingPolicy $false; + Assert-AreEqual $updatedVmss.AutomaticZoneRebalanceStrategy "TargetScaleOut"; + Assert-AreEqual $updatedVmss.AutomaticZoneRebalanceTargetInstanceCount 5; + } + 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 + $enableAutomaticZoneRebalancingPolicy = $true; + $automaticZoneRebalanceStrategy = "Recreate"; + $automaticZoneRebalanceBehavior = "CreateBeforeDelete"; + $automaticZoneRebalanceTargetInstanceCount = 5; + + $vmssUpdated = Update-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmssGet ` + -EnableAutomaticZoneRebalancingPolicy $enableAutomaticZoneRebalancingPolicy ` + -AutomaticZoneRebalanceStrategy $automaticZoneRebalanceStrategy ` + -AutomaticZoneRebalanceBehavior $automaticZoneRebalanceBehavior ` + -AutomaticZoneRebalanceTargetInstanceCount $automaticZoneRebalanceTargetInstanceCount; + + $vmssGetUpdated = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName; + + # Assertions + Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.ScaleSetPolicy.EnableAutomaticZoneRebalancingPolicy $enableAutomaticZoneRebalancingPolicy; + Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.ScaleSetPolicy.AutomaticZoneRebalanceStrategy $automaticZoneRebalanceStrategy; + Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.ScaleSetPolicy.AutomaticZoneRebalanceBehavior $automaticZoneRebalanceBehavior; + Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.ScaleSetPolicy.AutomaticZoneRebalanceTargetInstanceCount $automaticZoneRebalanceTargetInstanceCount; + } + 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 + $VmssFlex = New-AzVmss ` + -ResourceGroupName $rgname ` + -Name $vmssName ` + -OrchestrationMode 'Flexible' ` + -Location $loc ` + -Credential $cred ` + -DomainNameLabel "scaleset-update-test" ` + -SecurityType "Standard" + + # Update VMSS with new parameters + Update-AzVmss ` + -ResourceGroupName $rgname ` + -VMScaleSetName $vmssName ` + -EnableAutomaticZoneRebalancingPolicy $true ` + -AutomaticZoneRebalanceStrategy 'Recreate' ` + -AutomaticZoneRebalanceBehavior 'CreateBeforeDelete' + + # Validate the updated VMSS properties + $updatedVmss = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName + Assert-AreEqual $true $updatedVmss.EnableAutomaticZoneRebalancingPolicy + Assert-AreEqual 'Recreate' $updatedVmss.AutomaticZoneRebalanceStrategy + Assert-AreEqual 'CreateBeforeDelete' $updatedVmss.AutomaticZoneRebalanceBehavior + + # Test with 'TargetScaleOut' strategy + Update-AzVmss ` + -ResourceGroupName $rgname ` + -VMScaleSetName $vmssName ` + -AutomaticZoneRebalanceStrategy 'TargetScaleOut' ` + -AutomaticZoneRebalanceTargetInstanceCount 5 + + # Validate the updated VMSS properties for 'TargetScaleOut' + $updatedVmssTargetScaleOut = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName + Assert-AreEqual 'TargetScaleOut' $updatedVmssTargetScaleOut.AutomaticZoneRebalanceStrategy + Assert-AreEqual 5 $updatedVmssTargetScaleOut.AutomaticZoneRebalanceTargetInstanceCount + + } finally { + # Cleanup + Remove-AzResourceGroup -Name $rgname -Force -ErrorAction SilentlyContinue + } +} 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..6bf1d0ea06c3 100644 --- a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.ps1 +++ b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.ps1 @@ -7945,4 +7945,62 @@ 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 + + # Create a new VMSS configuration with the new parameters + $vmssConfig = New-AzVmssConfig -VMSSName $vmssName -Location $location -SkuCapacity 2 -SkuName 'Standard_DS1_v2' ` + -EnableAutomaticZoneRebalancingPolicy $true ` + -AutomaticZoneRebalanceStrategy 'Recreate' ` + -AutomaticZoneRebalanceBehavior 'CreateBeforeDelete' ` + -AutomaticZoneRebalanceTargetInstanceCount 5 + + # Validate the new parameters in the VMSS configuration + Assert-AreEqual $vmssConfig.EnableAutomaticZoneRebalancingPolicy $true + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceStrategy 'Recreate' + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceBehavior 'CreateBeforeDelete' + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceTargetInstanceCount 5 + + # Update an existing VMSS with the new parameters + $vmssConfigUpdated = Update-AzVmss -VMSSName $vmssName -Location $location ` + -EnableAutomaticZoneRebalancingPolicy $false ` + -AutomaticZoneRebalanceStrategy 'TargetScaleOut' ` + -AutomaticZoneRebalanceTargetInstanceCount 10 + + # Validate the updated parameters in the VMSS configuration + Assert-AreEqual $vmssConfigUpdated.EnableAutomaticZoneRebalancingPolicy $false + Assert-AreEqual $vmssConfigUpdated.AutomaticZoneRebalanceStrategy 'TargetScaleOut' + Assert-Null $vmssConfigUpdated.AutomaticZoneRebalanceBehavior + Assert-AreEqual $vmssConfigUpdated.AutomaticZoneRebalanceTargetInstanceCount 10 + + # Test invalid values for the new parameters + try { + $vmssConfigInvalid = New-AzVmssConfig -VMSSName $vmssName -Location $location ` + -AutomaticZoneRebalanceStrategy 'InvalidStrategy' + Assert-Fail "Expected an error for invalid AutomaticZoneRebalanceStrategy" + } catch { + Assert-Contains $_.Exception.Message "Invalid value for AutomaticZoneRebalanceStrategy" + } + + try { + $vmssConfigInvalid = New-AzVmssConfig -VMSSName $vmssName -Location $location ` + -AutomaticZoneRebalanceBehavior 'InvalidBehavior' + Assert-Fail "Expected an error for invalid AutomaticZoneRebalanceBehavior" + } catch { + Assert-Contains $_.Exception.Message "Invalid value for AutomaticZoneRebalanceBehavior" + } + + try { + $vmssConfigInvalid = New-AzVmssConfig -VMSSName $vmssName -Location $location ` + -AutomaticZoneRebalanceTargetInstanceCount -1 + Assert-Fail "Expected an error for negative AutomaticZoneRebalanceTargetInstanceCount" + } catch { + Assert-Contains $_.Exception.Message "AutomaticZoneRebalanceTargetInstanceCount must be a positive integer" + } +} diff --git a/src/Compute/Compute/ChangeLog.md b/src/Compute/Compute/ChangeLog.md index e7c5a20c78f3..e88c43e6af5a 100644 --- a/src/Compute/Compute/ChangeLog.md +++ b/src/Compute/Compute/ChangeLog.md @@ -20,6 +20,8 @@ --> ## Upcoming Release +* Added new parameters `EnableAutomaticZoneRebalancingPolicy`, `AutomaticZoneRebalanceStrategy`, `AutomaticZoneRebalanceBehavior`, and `AutomaticZoneRebalanceTargetInstanceCount` to cmdlets `New-AzVmssConfig` and `Update-AzVmss`. + - These parameters enable configuration of automatic zone rebalancing policies and strategies for VM Scale Sets. * 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`.