From cda4de0e5a21dbe63e05c558a9b9795e85039c15 Mon Sep 17 00:00:00 2001 From: PSCmdAssistant Date: Wed, 7 May 2025 16:11:43 +0000 Subject: [PATCH 1/2] Autogen code --- .../Config/NewAzureRmVmssConfigCommand.cs | 85 +- .../VirtualMachineScaleSetUpdateMethod.cs | 1096 ++--------------- .../Manual/PSVirtualMachineScaleSet.cs | 28 +- 3 files changed, 227 insertions(+), 982 deletions(-) diff --git a/src/Compute/Compute/Generated/VirtualMachineScaleSet/Config/NewAzureRmVmssConfigCommand.cs b/src/Compute/Compute/Generated/VirtualMachineScaleSet/Config/NewAzureRmVmssConfigCommand.cs index d7121bc377c0..1959d303e4d7 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"); @@ -23,15 +23,14 @@ using System.Collections; using System.Collections.Generic; using System.Linq; -using System.Xml; using System.Management.Automation; +using System.Xml; using Microsoft.Azure.Commands.Compute.Automation.Models; +using Microsoft.Azure.Commands.Compute.Common; using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters; using Microsoft.Azure.Management.Compute.Models; -using Microsoft.WindowsAzure.Commands.Common.CustomAttributes; using Microsoft.WindowsAzure.Commands.Utilities.Common; using CM = Microsoft.Azure.Commands.Compute.Models; -using Microsoft.Azure.Commands.Compute.Common; namespace Microsoft.Azure.Commands.Compute.Automation { @@ -387,6 +386,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 = "Specifies whether Automatic Zone Rebalance should be enabled on the virtual machine scale set. The default value is false.")] + public SwitchParameter EnableAutomaticZoneRebalance { get; set; } + + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Specifies the strategy for Automatic Zone Rebalance.")] + [PSArgumentCompleter("Recreate", "TargetScaleOut")] + public string AutomaticZoneRebalanceStrategy { get; set; } + + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Specifies the behavior for Automatic Zone Rebalance.")] + [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")) @@ -463,6 +488,58 @@ private void Run() vResiliencyPolicy.ResilientVMDeletionPolicy = new ResilientVMDeletionPolicy(this.EnableResilientVMDelete.ToBool()); } + if (this.EnableAutomaticZoneRebalance.IsPresent) + { + if (vResiliencyPolicy == null) + { + vResiliencyPolicy = new ResiliencyPolicy(); + } + if (vResiliencyPolicy.AutomaticZoneRebalancingPolicy == null) + { + vResiliencyPolicy.AutomaticZoneRebalancingPolicy = new AutomaticZoneRebalancingPolicy(); + } + vResiliencyPolicy.AutomaticZoneRebalancingPolicy.Enabled = this.EnableAutomaticZoneRebalance.IsPresent; + } + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceStrategy)) + { + if (vResiliencyPolicy == null) + { + vResiliencyPolicy = new ResiliencyPolicy(); + } + if (vResiliencyPolicy.AutomaticZoneRebalancingPolicy == null) + { + vResiliencyPolicy.AutomaticZoneRebalancingPolicy = new AutomaticZoneRebalancingPolicy(); + } + vResiliencyPolicy.AutomaticZoneRebalancingPolicy.RebalanceStrategy = this.AutomaticZoneRebalanceStrategy; + } + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceBehavior)) + { + if (vResiliencyPolicy == null) + { + vResiliencyPolicy = new ResiliencyPolicy(); + } + if (vResiliencyPolicy.AutomaticZoneRebalancingPolicy == null) + { + vResiliencyPolicy.AutomaticZoneRebalancingPolicy = new AutomaticZoneRebalancingPolicy(); + } + vResiliencyPolicy.AutomaticZoneRebalancingPolicy.RebalanceBehavior = this.AutomaticZoneRebalanceBehavior; + } + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceTargetInstanceCount)) + { + if (vResiliencyPolicy == null) + { + vResiliencyPolicy = new ResiliencyPolicy(); + } + if (vResiliencyPolicy.AutomaticZoneRebalancingPolicy == null) + { + vResiliencyPolicy.AutomaticZoneRebalancingPolicy = new AutomaticZoneRebalancingPolicy(); + } + vResiliencyPolicy.AutomaticZoneRebalancingPolicy.TargetInstanceCount = this.AutomaticZoneRebalanceTargetInstanceCount; + } + if (this.IsParameterBound(c => c.SkuTier)) { if (vSku == null) diff --git a/src/Compute/Compute/Generated/VirtualMachineScaleSet/VirtualMachineScaleSetUpdateMethod.cs b/src/Compute/Compute/Generated/VirtualMachineScaleSet/VirtualMachineScaleSetUpdateMethod.cs index a4797ba02b3c..347f407b45bd 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"); @@ -23,15 +23,14 @@ using System.Collections; using System.Collections.Generic; using System.Linq; -using System.Xml; using System.Management.Automation; +using System.Xml; using Microsoft.Azure.Commands.Compute.Automation.Models; +using Microsoft.Azure.Commands.Compute.Common; using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters; using Microsoft.Azure.Management.Compute; using Microsoft.Azure.Management.Compute.Models; -using Microsoft.WindowsAzure.Commands.Common.CustomAttributes; using Microsoft.WindowsAzure.Commands.Utilities.Common; -using Microsoft.Azure.Commands.Compute.Common; namespace Microsoft.Azure.Commands.Compute.Automation { @@ -411,831 +410,69 @@ public override void ExecuteCmdlet() [Parameter( 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; - } - - 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; - } + 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; } - 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, + 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.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 = "Array of VM sizes for the scale set.", + ValueFromPipelineByPropertyName = true)] + public string[] SkuProfileVmSize { 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 = "Allocation strategy for the SKU profile.", + ValueFromPipelineByPropertyName = true)] + [ValidateSet("LowestPrice", "CapacityOptimized")] + public string SkuProfileAllocationStrategy { 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 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.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 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.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, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Specifies whether Automatic Zone Rebalance should be enabled on the virtual machine scale set. The default value is false.")] + public bool EnableAutomaticZoneRebalancingPolicy { 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, + 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.")] + [ValidateSet("Recreate", "TargetScaleOut")] + public string AutomaticZoneRebalanceStrategy { get; set; } - if (this.IsParameterBound(c => c.UpgradePolicyMode)) + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + 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; } + + [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; } + } +} + private void BuildPatchObject() + { + if (this.IsParameterBound(c => c.AutomaticOSUpgrade)) { if (this.VirtualMachineScaleSetUpdate == null) { @@ -1245,195 +482,104 @@ 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.ResiliencyPolicy == null) { - 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; + this.VirtualMachineScaleSetUpdate.ResiliencyPolicy = new ResiliencyPolicy(); } - else + if (this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.AutomaticZoneRebalancingPolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings = null; + this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.AutomaticZoneRebalancingPolicy = new AutomaticZoneRebalancingPolicy(); } + this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.AutomaticZoneRebalancingPolicy.Enabled = this.EnableAutomaticZoneRebalancingPolicy; } - // Only used for SecurityType == TrustedLaunch - if (this.IsParameterBound(c => c.EnableVtpm)) + + 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) + if (this.VirtualMachineScaleSetUpdate.ResiliencyPolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile = new SecurityProfile(); + this.VirtualMachineScaleSetUpdate.ResiliencyPolicy = new ResiliencyPolicy(); } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings == null) + if (this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.AutomaticZoneRebalancingPolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); + this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.AutomaticZoneRebalancingPolicy = new AutomaticZoneRebalancingPolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled = this.EnableVtpm; + this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.AutomaticZoneRebalancingPolicy.RebalanceStrategy = this.AutomaticZoneRebalanceStrategy; } - // Only used for SecurityType == TrustedLaunch - if (this.IsParameterBound(c => c.EnableSecureBoot)) + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceBehavior)) { if (this.VirtualMachineScaleSetUpdate == null) { this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile == null) + if (this.VirtualMachineScaleSetUpdate.ResiliencyPolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile = new SecurityProfile(); + this.VirtualMachineScaleSetUpdate.ResiliencyPolicy = new ResiliencyPolicy(); } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings == null) + if (this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.AutomaticZoneRebalancingPolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); + this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.AutomaticZoneRebalancingPolicy = new AutomaticZoneRebalancingPolicy(); } - 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.ResiliencyPolicy.AutomaticZoneRebalancingPolicy.RebalanceBehavior = this.AutomaticZoneRebalanceBehavior; } - // New Feature Implementation - if (this.IsParameterBound(c => c.EnableResilientVMCreate)) + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceTargetInstanceCount)) { if (this.VirtualMachineScaleSetUpdate == null) { @@ -1443,24 +589,14 @@ private void BuildPatchObject() { this.VirtualMachineScaleSetUpdate.ResiliencyPolicy = new ResiliencyPolicy(); } - this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.ResilientVMCreationPolicy = new ResilientVMCreationPolicy(this.EnableResilientVMCreate); - } - - if (this.IsParameterBound(c => c.EnableResilientVMDelete)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.ResiliencyPolicy == null) + if (this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.AutomaticZoneRebalancingPolicy == null) { - this.VirtualMachineScaleSetUpdate.ResiliencyPolicy = new ResiliencyPolicy(); + this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.AutomaticZoneRebalancingPolicy = new AutomaticZoneRebalancingPolicy(); } - this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.ResilientVMDeletionPolicy = new ResilientVMDeletionPolicy(this.EnableResilientVMDelete); + this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.AutomaticZoneRebalancingPolicy.TargetInstanceCount = this.AutomaticZoneRebalanceTargetInstanceCount; } } - - private void BuildPutObject() + private void BuildPutObject() { if (this.IsParameterBound(c => c.AutomaticOSUpgrade)) { @@ -2281,6 +1417,42 @@ private void BuildPutObject() } this.VirtualMachineScaleSet.ResiliencyPolicy.ResilientVMDeletionPolicy = new ResilientVMDeletionPolicy(this.EnableResilientVMDelete); } + + void InitializeAutomaticZoneRebalancingPolicy() + { + if (this.VirtualMachineScaleSet.ResiliencyPolicy == null) + { + this.VirtualMachineScaleSet.ResiliencyPolicy = new ResiliencyPolicy(); + } + if (this.VirtualMachineScaleSet.ResiliencyPolicy.AutomaticZoneRebalancingPolicy == null) + { + this.VirtualMachineScaleSet.ResiliencyPolicy.AutomaticZoneRebalancingPolicy = new AutomaticZoneRebalancingPolicy(); + } + } + + if (this.IsParameterBound(c => c.EnableAutomaticZoneRebalancingPolicy)) + { + InitializeAutomaticZoneRebalancingPolicy(); + this.VirtualMachineScaleSet.ResiliencyPolicy.AutomaticZoneRebalancingPolicy.Enabled = this.EnableAutomaticZoneRebalancingPolicy; + } + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceStrategy)) + { + InitializeAutomaticZoneRebalancingPolicy(); + this.VirtualMachineScaleSet.ResiliencyPolicy.AutomaticZoneRebalancingPolicy.RebalanceStrategy = this.AutomaticZoneRebalanceStrategy; + } + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceBehavior)) + { + InitializeAutomaticZoneRebalancingPolicy(); + this.VirtualMachineScaleSet.ResiliencyPolicy.AutomaticZoneRebalancingPolicy.RebalanceBehavior = this.AutomaticZoneRebalanceBehavior; + } + + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceTargetInstanceCount)) + { + InitializeAutomaticZoneRebalancingPolicy(); + this.VirtualMachineScaleSet.ResiliencyPolicy.AutomaticZoneRebalancingPolicy.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..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 31a02145f638448b4f08e272ab892332fb26cd89 Mon Sep 17 00:00:00 2001 From: PSCmdAssistant Date: Wed, 7 May 2025 16:13:00 +0000 Subject: [PATCH 2/2] Test generation and changelog update --- .../VirtualMachineScaleSetTests.cs | 30 ++- .../VirtualMachineScaleSetTests.ps1 | 242 ++++++++++++++++++ .../ScenarioTests/VirtualMachineTests.cs | 9 +- .../ScenarioTests/VirtualMachineTests.ps1 | 45 +++- src/Compute/Compute/ChangeLog.md | 1 + 5 files changed, 324 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..c236de54132b 100644 --- a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.ps1 +++ b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.ps1 @@ -5789,3 +5789,245 @@ 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 + Assert-IsNotNull $vmssConfig; + 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 + Assert-IsNotNull $vmssGet; + 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 -Location $loc ` + -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; + + # Test with Recreate strategy and CreateBeforeDelete behavior + $rebalanceStrategy = "Recreate"; + $rebalanceBehavior = "CreateBeforeDelete"; + + $vmssUpdatedRecreate = Update-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmssGetUpdated ` + -AutomaticZoneRebalanceStrategy $rebalanceStrategy ` + -AutomaticZoneRebalanceBehavior $rebalanceBehavior; + + $vmssGetRecreate = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName; + + # Assertions + Assert-AreEqual $vmssGetRecreate.VirtualMachineProfile.AutomaticZoneRebalancingPolicy.Strategy $rebalanceStrategy; + Assert-AreEqual $vmssGetRecreate.VirtualMachineProfile.AutomaticZoneRebalancingPolicy.Behavior $rebalanceBehavior; + } + 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-AzVmss ` + -ResourceGroupName $rgname ` + -Name $vmssName ` + -Location $loc ` + -Credential $cred ` + -SkuCapacity 2 ` + -SkuName "Standard_DS1_v2"; + + # Update VMSS with new parameters + $VmssUpdated = Update-AzVmss ` + -ResourceGroupName $rgname ` + -VMScaleSetName $vmssName ` + -EnableAutomaticZoneRebalancingPolicy $true ` + -AutomaticZoneRebalanceStrategy "Recreate" ` + -AutomaticZoneRebalanceBehavior "CreateBeforeDelete" ` + -AutomaticZoneRebalanceTargetInstanceCount 5; + + # Validate updates + Assert-AreEqual $true $VmssUpdated.EnableAutomaticZoneRebalancingPolicy; + Assert-AreEqual "Recreate" $VmssUpdated.AutomaticZoneRebalanceStrategy; + Assert-AreEqual "CreateBeforeDelete" $VmssUpdated.AutomaticZoneRebalanceBehavior; + Assert-AreEqual 5 $VmssUpdated.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..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..008d01f93395 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 cmdlets `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`.