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..ad2eb7cafc26 100644 --- a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.ps1 +++ b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineScaleSetTests.ps1 @@ -5789,3 +5789,240 @@ function Test-EncryptionIdentityNotPartOfAzureVmssConfig{ clean-ResourceGroup $rgName; } } + +function TestGen-newazvmssconfig +{ + # Setup + $rgname = Get-ComputeTestResourceName; + $loc = Get-Location; + + try + { + # Common + New-AzResourceGroup -Name $rgname -Location $loc -Force; + $vmssName = 'vmss' + $rgname; + + # Create VMSS Config with new parameters + $vmssConfig = New-AzVmssConfig -Location $loc ` + -EnableAutomaticZoneRebalancingPolicy $true ` + -AutomaticZoneRebalanceStrategy "Recreate" ` + -AutomaticZoneRebalanceBehavior "CreateBeforeDelete" ` + -AutomaticZoneRebalanceTargetInstanceCount 5; + + # Validate VMSS Config properties + Assert-IsTrue $vmssConfig.EnableAutomaticZoneRebalancingPolicy; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceStrategy "Recreate"; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceTargetInstanceCount 5; + + # Create VMSS using the config + New-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmssConfig; + $vmssGet = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName; + + # Validate VMSS properties after creation + Assert-IsTrue $vmssGet.EnableAutomaticZoneRebalancingPolicy; + Assert-AreEqual $vmssGet.AutomaticZoneRebalanceStrategy "Recreate"; + Assert-AreEqual $vmssGet.AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + Assert-AreEqual $vmssGet.AutomaticZoneRebalanceTargetInstanceCount 5; + } + finally + { + # Cleanup + Remove-AzResourceGroup -Name $rgname -Force -ErrorAction SilentlyContinue; + } +} + +function TestGen-newazvmss +{ + # Setup + $rgname = Get-ComputeTestResourceName; + $loc = Get-Location; + + try + { + # Common + New-AzResourceGroup -Name $rgname -Location $loc -Force; + + $vmssName = 'vs' + $rgname; + $adminUsername = Get-ComputeTestResourceName; + $password = Get-PasswordForVM; + $adminPassword = $password | ConvertTo-SecureString -AsPlainText -Force; + $cred = New-Object System.Management.Automation.PSCredential ($adminUsername, $adminPassword); + + # Test New-AzVmssConfig with new parameters + $vmssConfig = New-AzVmssConfig -EnableAutomaticZoneRebalancingPolicy $true ` + -AutomaticZoneRebalanceStrategy "Recreate" ` + -AutomaticZoneRebalanceBehavior "CreateBeforeDelete" ` + -AutomaticZoneRebalanceTargetInstanceCount 5; + + Assert-IsNotNull $vmssConfig; + Assert-AreEqual $vmssConfig.EnableAutomaticZoneRebalancingPolicy $true; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceStrategy "Recreate"; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceTargetInstanceCount 5; + + # Test New-AzVmss with the new configuration + $vmss = New-AzVmss -ResourceGroupName $rgname -Credential $cred -VMScaleSetName $vmssName -VMScaleSetConfig $vmssConfig; + + Assert-IsNotNull $vmss; + Assert-AreEqual $vmss.VirtualMachineScaleSetName $vmssName; + Assert-AreEqual $vmss.EnableAutomaticZoneRebalancingPolicy $true; + Assert-AreEqual $vmss.AutomaticZoneRebalanceStrategy "Recreate"; + Assert-AreEqual $vmss.AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + Assert-AreEqual $vmss.AutomaticZoneRebalanceTargetInstanceCount 5; + + # Test Update-AzVmss with new parameters + $vmssUpdated = Update-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName ` + -EnableAutomaticZoneRebalancingPolicy $false ` + -AutomaticZoneRebalanceStrategy "TargetScaleOut" ` + -AutomaticZoneRebalanceTargetInstanceCount 10; + + Assert-IsNotNull $vmssUpdated; + Assert-AreEqual $vmssUpdated.EnableAutomaticZoneRebalancingPolicy $false; + Assert-AreEqual $vmssUpdated.AutomaticZoneRebalanceStrategy "TargetScaleOut"; + Assert-AreEqual $vmssUpdated.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 ` + -EnableAutomaticZoneRebalancingPolicy $true ` + -AutomaticZoneRebalanceStrategy 'Recreate' ` + -AutomaticZoneRebalanceBehavior 'CreateBeforeDelete'; + + # Create VMSS + $result = New-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmss; + $vmssGet = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName; + + # Assert initial configuration + Assert-AreEqual $vmssGet.VirtualMachineProfile.AutomaticZoneRebalancingPolicy $true; + Assert-AreEqual $vmssGet.VirtualMachineProfile.AutomaticZoneRebalanceStrategy 'Recreate'; + Assert-AreEqual $vmssGet.VirtualMachineProfile.AutomaticZoneRebalanceBehavior 'CreateBeforeDelete'; + + # Test update functionality + Update-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmssGet ` + -EnableAutomaticZoneRebalancingPolicy $false ` + -AutomaticZoneRebalanceStrategy 'TargetScaleOut' ` + -AutomaticZoneRebalanceTargetInstanceCount 5; + + $vmssGetUpdated = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName; + + # Assert updated configuration + Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.AutomaticZoneRebalancingPolicy $false; + Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.AutomaticZoneRebalanceStrategy 'TargetScaleOut'; + Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.AutomaticZoneRebalanceTargetInstanceCount 5; + } + finally + { + # Cleanup + Remove-AzResourceGroup -Name $rgname -Force -AsJob; + } +} + +function TestGen-updateazvm +{ + # Setup + $rgname = Get-ComputeTestResourceName + + try + { + # Common + $loc = Get-Location; + New-AzResourceGroup -Name $rgname -Location $loc -Force; + + # New VMSS Parameters + $vmssName = 'vmssUpdateTest' + $rgname; + $adminUsername = 'TestUser'; + $adminPassword = $PLACEHOLDER; + $securePassword = ConvertTo-SecureString $adminPassword -AsPlainText -Force; + $cred = New-Object System.Management.Automation.PSCredential ($adminUsername, $securePassword); + + # Create VMSS + $Vmss = New-AzVmssConfig ` + -Location $loc ` + -SkuCapacity 2 ` + -SkuName "Standard_DS1_v2" ` + -EnableAutomaticZoneRebalancingPolicy $true ` + -AutomaticZoneRebalanceStrategy "Recreate" ` + -AutomaticZoneRebalanceBehavior "CreateBeforeDelete"; + + $Vmss = New-AzVmss ` + -ResourceGroupName $rgname ` + -Location $loc ` + -Credential $cred ` + -VMScaleSet $Vmss ` + -Name $vmssName; + + # Validate VMSS creation with new parameters + $createdVmss = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName; + Assert-AreEqual $true $createdVmss.EnableAutomaticZoneRebalancingPolicy; + Assert-AreEqual "Recreate" $createdVmss.AutomaticZoneRebalanceStrategy; + Assert-AreEqual "CreateBeforeDelete" $createdVmss.AutomaticZoneRebalanceBehavior; + + # Update VMSS with new parameters + $updatedVmss = Update-AzVmss ` + -ResourceGroupName $rgname ` + -VMScaleSetName $vmssName ` + -EnableAutomaticZoneRebalancingPolicy $false ` + -AutomaticZoneRebalanceStrategy "TargetScaleOut" ` + -AutomaticZoneRebalanceTargetInstanceCount 5; + + # Validate VMSS update + $updatedVmssDetails = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName; + Assert-AreEqual $false $updatedVmssDetails.EnableAutomaticZoneRebalancingPolicy; + Assert-AreEqual "TargetScaleOut" $updatedVmssDetails.AutomaticZoneRebalanceStrategy; + Assert-AreEqual 5 $updatedVmssDetails.AutomaticZoneRebalanceTargetInstanceCount; + + } + finally + { + # Cleanup + Remove-AzResourceGroup -Name $rgname -Force -Confirm:$false; + } +} 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..44bdffa77be1 100644 --- a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.ps1 +++ b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.ps1 @@ -7945,4 +7945,53 @@ 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 -VMScaleSetName $vmssName -SkuCapacity 2 -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 -VMScaleSetName $vmssName ` + -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 -VMScaleSetName $vmssName ` + -AutomaticZoneRebalanceBehavior 'CreateBeforeDelete'; + + # Validate partial Update-AzVmss + Assert-AreEqual $vmssConfigPartialUpdate.AutomaticZoneRebalanceBehavior 'CreateBeforeDelete' + + # Test New-AzVmssConfig without new parameters + $vmssConfigDefault = New-AzVmssConfig -VMScaleSetName $vmssName -SkuCapacity 2 -Location $location; + + # Validate default New-AzVmssConfig + Assert-Null $vmssConfigDefault.EnableAutomaticZoneRebalancingPolicy + Assert-Null $vmssConfigDefault.AutomaticZoneRebalanceStrategy + Assert-Null $vmssConfigDefault.AutomaticZoneRebalanceBehavior + Assert-Null $vmssConfigDefault.AutomaticZoneRebalanceTargetInstanceCount +} diff --git a/src/Compute/Compute/ChangeLog.md b/src/Compute/Compute/ChangeLog.md index e7c5a20c78f3..df946f2b6bd9 100644 --- a/src/Compute/Compute/ChangeLog.md +++ b/src/Compute/Compute/ChangeLog.md @@ -20,6 +20,7 @@ --> ## Upcoming Release +* Added parameters `EnableAutomaticZoneRebalancingPolicy`, `AutomaticZoneRebalanceStrategy`, `AutomaticZoneRebalanceBehavior`, and `AutomaticZoneRebalanceTargetInstanceCount` to `New-AzVmssConfig` and `Update-AzVmss`. * Added new cmdlets `Add-AzVmssSkuProfileVMSize` and `Remove-AzVmssSkuProfileVMSize` to add and remove VM sizes to and from the VMSS SkuProfile. * Added new parameters `ZonePlacementPolicy`, `IncludeZone`, `ExcludeZone`, and `AlignRegionalDisksToVMZone` to cmdlets `New-AzVM` and `New-AzVmConfig` * Added new parameter `AlignRegionalDisksToVMZone` to cmdlet `Update-AzVM`. diff --git a/src/Compute/Compute/Generated/VirtualMachineScaleSet/Config/NewAzureRmVmssConfigCommand.cs b/src/Compute/Compute/Generated/VirtualMachineScaleSet/Config/NewAzureRmVmssConfigCommand.cs index d7121bc377c0..c146efc588f8 100644 --- a/src/Compute/Compute/Generated/VirtualMachineScaleSet/Config/NewAzureRmVmssConfigCommand.cs +++ b/src/Compute/Compute/Generated/VirtualMachineScaleSet/Config/NewAzureRmVmssConfigCommand.cs @@ -1,4 +1,4 @@ -// + // // Copyright (c) Microsoft and contributors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -387,6 +387,32 @@ public partial class NewAzureRmVmssConfigCommand : Microsoft.Azure.Commands.Reso HelpMessage = "Specifies whether resilient VM deletion should be enabled on the virtual machine scale set. The default value is false.")] public SwitchParameter EnableResilientVMDelete { get; set; } + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Whether Auto AZ Balance will be applied for this VMSS.")] + public bool? EnableAutomaticZoneRebalancingPolicy { get; set; } + + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Specifies the strategy/actions taken to balance the scale set. 'Recreate' replaces VMs by creating new ones with the same SKU without preserving disk, IPs or VM configuration. 'TargetScaleOut' helps grow the scale set in a zonally balanced manner to achieve a target instance count.")] + [PSArgumentCompleter("Recreate", "TargetScaleOut")] + public string AutomaticZoneRebalanceStrategy { get; set; } + + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Specifies detailed behavior for the rebalance strategy. Currently only applicable when the RebalanceStrategy is set to 'Recreate'.")] + [PSArgumentCompleter("CreateBeforeDelete")] + public string AutomaticZoneRebalanceBehavior { get; set; } + + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The target instance count the zonal scale set aims to reach. Only applicable when the RebalanceStrategy is set to 'TargetScaleOut'.")] + public int? AutomaticZoneRebalanceTargetInstanceCount { get; set; } + protected override void ProcessRecord() { if (ShouldProcess("VirtualMachineScaleSet", "New")) @@ -436,631 +462,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; - } - - if (this.IsParameterBound(c => c.PlanPublisher)) - { - if (vPlan == null) - { - vPlan = new Plan(); - } - vPlan.Publisher = this.PlanPublisher; - } - - if (this.IsParameterBound(c => c.PlanProduct)) - { - if (vPlan == null) - { - vPlan = new Plan(); - } - vPlan.Product = this.PlanProduct; - } - - if (this.IsParameterBound(c => c.PlanPromotionCode)) - { - if (vPlan == null) - { - vPlan = new Plan(); - } - vPlan.PromotionCode = this.PlanPromotionCode; - } - - if (this.IsParameterBound(c => c.UpgradePolicyMode)) - { - if (vUpgradePolicy == null) - { - vUpgradePolicy = new UpgradePolicy(); - } - vUpgradePolicy.Mode = this.UpgradePolicyMode; - } + // ZoneRebalancingPolicy + ZoneRebalancingPolicy vZoneRebalancingPolicy = null; - if (this.IsParameterBound(c => c.RollingUpgradePolicy)) + if (this.IsParameterBound(c => c.EnableAutomaticZoneRebalancingPolicy)) { - if (vUpgradePolicy == null) + if (vZoneRebalancingPolicy == null) { - vUpgradePolicy = new UpgradePolicy(); + vZoneRebalancingPolicy = new ZoneRebalancingPolicy(); } - vUpgradePolicy.RollingUpgradePolicy = this.RollingUpgradePolicy; + vZoneRebalancingPolicy.Enabled = this.EnableAutomaticZoneRebalancingPolicy; } - if (this.EnableAutomaticOSUpgrade.IsPresent) + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceStrategy)) { - if (vUpgradePolicy == null) + if (vZoneRebalancingPolicy == null) { - vUpgradePolicy = new UpgradePolicy(); + vZoneRebalancingPolicy = new ZoneRebalancingPolicy(); } - if (vUpgradePolicy.AutomaticOSUpgradePolicy == null) - { - vUpgradePolicy.AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy(); - } - vUpgradePolicy.AutomaticOSUpgradePolicy.EnableAutomaticOSUpgrade = this.EnableAutomaticOSUpgrade.IsPresent; + vZoneRebalancingPolicy.Strategy = this.AutomaticZoneRebalanceStrategy; } - if (this.EnableAutomaticRepair.IsPresent) + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceBehavior)) { - if (vAutomaticRepairsPolicy == null) + if (vZoneRebalancingPolicy == null) { - vAutomaticRepairsPolicy = new AutomaticRepairsPolicy(); + vZoneRebalancingPolicy = new ZoneRebalancingPolicy(); } - vAutomaticRepairsPolicy.Enabled = this.EnableAutomaticRepair.IsPresent; + vZoneRebalancingPolicy.Behavior = this.AutomaticZoneRebalanceBehavior; } - if (this.EncryptionAtHost.IsPresent) + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceTargetInstanceCount)) { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityProfile == null) - { - vVirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - vVirtualMachineProfile.SecurityProfile.EncryptionAtHost = this.EncryptionAtHost; - } - - if (this.IsParameterBound(c => c.CapacityReservationGroupId)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.CapacityReservation == null) - { - vVirtualMachineProfile.CapacityReservation = new CapacityReservationProfile(); - } - vVirtualMachineProfile.CapacityReservation.CapacityReservationGroup = new SubResource(this.CapacityReservationGroupId); - } - - if (this.IsParameterBound(c => c.AutomaticRepairGracePeriod)) - { - if (vAutomaticRepairsPolicy == null) - { - vAutomaticRepairsPolicy = new AutomaticRepairsPolicy(); - } - vAutomaticRepairsPolicy.GracePeriod = this.AutomaticRepairGracePeriod; - } - - if (this.IsParameterBound(c => c.DisableAutoRollback)) - { - if (vUpgradePolicy == null) - { - vUpgradePolicy = new UpgradePolicy(); - } - if (vUpgradePolicy.AutomaticOSUpgradePolicy == null) - { - vUpgradePolicy.AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy(); - } - vUpgradePolicy.AutomaticOSUpgradePolicy.DisableAutomaticRollback = this.DisableAutoRollback; - } - - if (this.IsParameterBound(c => c.OsProfile)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - vVirtualMachineProfile.OsProfile = this.OsProfile; - } - - if (this.IsParameterBound(c => c.StorageProfile)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - vVirtualMachineProfile.StorageProfile = this.StorageProfile; - } - - if (this.IsParameterBound(c => c.HealthProbeId)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.NetworkProfile == null) - { - vVirtualMachineProfile.NetworkProfile = new VirtualMachineScaleSetNetworkProfile(); - } - if (vVirtualMachineProfile.NetworkProfile.HealthProbe == null) - { - vVirtualMachineProfile.NetworkProfile.HealthProbe = new ApiEntityReference(); - } - vVirtualMachineProfile.NetworkProfile.HealthProbe.Id = this.HealthProbeId; - } - - if (this.IsParameterBound(c => c.NetworkInterfaceConfiguration)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.NetworkProfile == null) - { - vVirtualMachineProfile.NetworkProfile = new VirtualMachineScaleSetNetworkProfile(); - } - vVirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations = this.NetworkInterfaceConfiguration; - } - - if (this.IsParameterBound(c => c.SecurityType)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityProfile == null) - { - vVirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - vVirtualMachineProfile.SecurityProfile.SecurityType = this.SecurityType; - if (vVirtualMachineProfile.SecurityProfile.SecurityType != null - && vVirtualMachineProfile.SecurityProfile.SecurityType.ToLower() == ConstantValues.TrustedLaunchSecurityType || vVirtualMachineProfile.SecurityProfile.SecurityType.ToLower() == ConstantValues.ConfidentialVMSecurityType) - { - if (vVirtualMachineProfile.SecurityProfile.UefiSettings == null) - { - vVirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); - } - vVirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled = vVirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled == null ? true : this.EnableVtpm; - vVirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled = vVirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled == null ? true : this.EnableSecureBoot; - } - } - - if (this.IsParameterBound(c => c.EnableVtpm)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityProfile == null) - { - vVirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - if (vVirtualMachineProfile.SecurityProfile.UefiSettings == null) - { - vVirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); - } - vVirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled = this.EnableVtpm; - } - - if (this.IsParameterBound(c => c.EnableSecureBoot)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityProfile == null) - { - vVirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - if (vVirtualMachineProfile.SecurityProfile.UefiSettings == null) - { - vVirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); - } - vVirtualMachineProfile.SecurityProfile.UefiSettings.SecureBootEnabled = this.EnableSecureBoot; - } - if (this.IsParameterBound(c => c.BootDiagnostic)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.DiagnosticsProfile == null) - { - vVirtualMachineProfile.DiagnosticsProfile = new DiagnosticsProfile(); - } - vVirtualMachineProfile.DiagnosticsProfile.BootDiagnostics = this.BootDiagnostic; - } - - if (this.IsParameterBound(c => c.Extension)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.ExtensionProfile == null) - { - vVirtualMachineProfile.ExtensionProfile = new PSVirtualMachineScaleSetExtensionProfile(); - } - vVirtualMachineProfile.ExtensionProfile.Extensions = this.Extension; - } - - if (this.IsParameterBound(c => c.LicenseType)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - vVirtualMachineProfile.LicenseType = this.LicenseType; - } - - if (this.IsParameterBound(c => c.Priority)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - vVirtualMachineProfile.Priority = this.Priority; - } - - - if (this.IsParameterBound(c => c.EvictionPolicy)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - vVirtualMachineProfile.EvictionPolicy = this.EvictionPolicy; - } - - if (this.IsParameterBound(c => c.MaxPrice)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.BillingProfile == null) - { - vVirtualMachineProfile.BillingProfile = new BillingProfile(); - } - vVirtualMachineProfile.BillingProfile.MaxPrice = this.MaxPrice; - } - - if (this.TerminateScheduledEvents.IsPresent) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile = new TerminateNotificationProfile(); - } - vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile.Enable = this.TerminateScheduledEvents.IsPresent; - } - - if (this.IsParameterBound(c => c.TerminateScheduledEventNotBeforeTimeoutInMinutes)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile = new TerminateNotificationProfile(); - } - vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile.NotBeforeTimeout = XmlConvert.ToString(new TimeSpan(0, this.TerminateScheduledEventNotBeforeTimeoutInMinutes, 0)); - } - - if (this.IsParameterBound(c => c.ProximityPlacementGroupId)) - { - if (vProximityPlacementGroup == null) - { - vProximityPlacementGroup = new SubResource(); - } - vProximityPlacementGroup.Id = this.ProximityPlacementGroupId; - } - - if (this.EnableUltraSSD.IsPresent) - { - if (vAdditionalCapabilities == null) - { - vAdditionalCapabilities = new AdditionalCapabilities(true); - } - } - - if (this.IsParameterBound(c => c.ScaleInPolicy)) - { - if (vScaleInPolicy == null) - { - vScaleInPolicy = new ScaleInPolicy(); - } - vScaleInPolicy.Rules = this.ScaleInPolicy; - } - - if (this.IsParameterBound(c => c.IdentityType)) - { - if (vIdentity == null) - { - vIdentity = new VirtualMachineScaleSetIdentity(); - } - vIdentity.Type = this.IdentityType; - } - - if (this.IsParameterBound(c => c.IdentityId)) - { - if (vIdentity == null) - { - vIdentity = new VirtualMachineScaleSetIdentity(); - } - - vIdentity.UserAssignedIdentities = new Dictionary(); - - foreach (var id in this.IdentityId) - { - vIdentity.UserAssignedIdentities.Add(id, new UserAssignedIdentitiesValue()); - } - } - - if (this.IsParameterBound(c => c.EncryptionIdentity)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityProfile == null) - { - vVirtualMachineProfile.SecurityProfile = new SecurityProfile(); - } - - if (vVirtualMachineProfile.SecurityProfile.EncryptionIdentity == null) - { - vVirtualMachineProfile.SecurityProfile.EncryptionIdentity = new EncryptionIdentity(); - } - - if (String.IsNullOrEmpty(vVirtualMachineProfile.SecurityProfile.EncryptionIdentity.UserAssignedIdentityResourceId) || - !vVirtualMachineProfile.SecurityProfile.EncryptionIdentity.UserAssignedIdentityResourceId.Equals( - this.EncryptionIdentity, StringComparison.OrdinalIgnoreCase)) - { - vVirtualMachineProfile.SecurityProfile.EncryptionIdentity.UserAssignedIdentityResourceId = this.EncryptionIdentity; - } - } - - if (this.IsParameterBound(c => c.EdgeZone)) - { - vExtendedLocation = new CM.PSExtendedLocation(this.EdgeZone); - } - - if (this.IsParameterBound(c => c.UserData)) - { - if (!ValidateBase64EncodedString.ValidateStringIsBase64Encoded(this.UserData)) - { - this.UserData = ValidateBase64EncodedString.EncodeStringToBase64(this.UserData); - this.WriteInformation(ValidateBase64EncodedString.UserDataEncodeNotification, new string[] { "PSHOST" }); - } - - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - vVirtualMachineProfile.UserData = this.UserData; - } - - if (this.IsParameterBound(c => c.AutomaticRepairAction)) - { - if (vAutomaticRepairsPolicy == null) - { - vAutomaticRepairsPolicy = new AutomaticRepairsPolicy(); - } - vAutomaticRepairsPolicy.RepairAction = this.AutomaticRepairAction; - } - - if (this.IsParameterBound(c => c.BaseRegularPriorityCount)) - { - if (vPriorityMixPolicy == null) - { - vPriorityMixPolicy = new PriorityMixPolicy(); - } - vPriorityMixPolicy.BaseRegularPriorityCount = this.BaseRegularPriorityCount; - } - - if (this.IsParameterBound(c => c.RegularPriorityPercentage)) - { - if (vPriorityMixPolicy == null) - { - vPriorityMixPolicy = new PriorityMixPolicy(); - } - vPriorityMixPolicy.RegularPriorityPercentageAboveBase = this.RegularPriorityPercentage; - } - - if (this.IsParameterBound(c => c.SkuProfileVmSize)) - { - if (vSkuProfile == null) - { - vSkuProfile = new SkuProfile(); - vSkuProfile.VmSizes = new List(); - } - foreach (string vmSize in this.SkuProfileVmSize) - { - vSkuProfile.VmSizes.Add(new SkuProfileVMSize() - { - Name = vmSize, - }); - } - - if (this.IsParameterBound(c => c.SkuProfileAllocationStrategy)) - { - vSkuProfile.AllocationStrategy = this.SkuProfileAllocationStrategy; - } - else - { - vSkuProfile.AllocationStrategy = "LowestPrice"; - } - - if (!this.IsParameterBound(c => c.SkuName)) - { - if (vSku == null) - { - vSku = new Sku(); - } - vSku.Name = VmSizeMix; - } - } - - if (this.IsParameterBound(c => c.ImageReferenceId)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - - if (vVirtualMachineProfile.StorageProfile == null) - { - vVirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetStorageProfile(); - } - - if (vVirtualMachineProfile.StorageProfile.ImageReference == null) - { - vVirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); - } - vVirtualMachineProfile.StorageProfile.ImageReference.Id = this.ImageReferenceId; - } - - if (this.IsParameterBound(c => c.SharedGalleryImageId)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - - if (vVirtualMachineProfile.StorageProfile == null) - { - vVirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetStorageProfile(); - } - - if (vVirtualMachineProfile.StorageProfile.ImageReference == null) - { - vVirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); - } - vVirtualMachineProfile.StorageProfile.ImageReference.SharedGalleryImageId = this.SharedGalleryImageId; - } - - if (this.IsParameterBound(c => c.OSImageScheduledEventEnabled)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile = new OSImageNotificationProfile(); - } - vVirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile.Enable = this.OSImageScheduledEventEnabled; - } - - if (this.IsParameterBound(c => c.OSImageScheduledEventNotBeforeTimeoutInMinutes)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (vVirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile == null) - { - vVirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile = new OSImageNotificationProfile(); - } - vVirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile.NotBeforeTimeout = this.OSImageScheduledEventNotBeforeTimeoutInMinutes; - } - - if (this.IsParameterBound(c => c.SecurityPostureId)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityPostureReference == null) - { - vVirtualMachineProfile.SecurityPostureReference = new SecurityPostureReference(); - } - vVirtualMachineProfile.SecurityPostureReference.Id = this.SecurityPostureId; - } - - if (this.IsParameterBound(c => c.SecurityPostureExcludeExtension)) - { - if (vVirtualMachineProfile == null) - { - vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - if (vVirtualMachineProfile.SecurityPostureReference == null) + 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 +525,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..0f4e88f53468 100644 --- a/src/Compute/Compute/Generated/VirtualMachineScaleSet/VirtualMachineScaleSetUpdateMethod.cs +++ b/src/Compute/Compute/Generated/VirtualMachineScaleSet/VirtualMachineScaleSetUpdateMethod.cs @@ -1,4 +1,4 @@ -// + // // Copyright (c) Microsoft and contributors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -444,7 +444,30 @@ public override void ExecuteCmdlet() HelpMessage = "Specifies whether resilient VM deletion should be enabled on the virtual machine scale set. The default value is false.")] public bool EnableResilientVMDelete { get; set; } - private void BuildPatchObject() + [Parameter( + Mandatory = false, + HelpMessage = "Whether Auto AZ Balance will be applied for this VMSS.")] + public bool EnableAutomaticZoneRebalancingPolicy { get; set; } + + [Parameter( + Mandatory = false, + HelpMessage = "Specifies the strategy/actions taken to balance the scale set. 'Recreate' replaces VMs by creating new ones with the same SKU without preserving disk, IPs or VM configuration. 'TargetScaleOut' helps grow the scale set in a zonally balanced manner to achieve a target instance count.")] + [ValidateSet("Recreate", "TargetScaleOut")] + public string AutomaticZoneRebalanceStrategy { get; set; } + + [Parameter( + Mandatory = false, + HelpMessage = "Specifies detailed behavior for the rebalance strategy. Currently only applicable when the RebalanceStrategy is set to 'Recreate'.")] + [ValidateSet("CreateBeforeDelete")] + public string AutomaticZoneRebalanceBehavior { get; set; } + + [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)) { @@ -502,977 +525,107 @@ private void BuildPatchObject() 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.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.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference == null) + if (this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy = new ZoneRebalancePolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference.Id = this.ImageReferenceId; + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy.EnableAutomaticZoneRebalancing = this.EnableAutomaticZoneRebalancingPolicy; } - if (this.IsParameterBound(c => c.SharedGalleryImageId)) + 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.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference == null) + if (this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy = new ZoneRebalancePolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference.SharedGalleryImageId = this.SharedGalleryImageId; + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy.RebalanceStrategy = this.AutomaticZoneRebalanceStrategy; } - - if (this.IsParameterBound(c => c.ImageReferenceOffer)) + 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.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference == null) + if (this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy = new ZoneRebalancePolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference.Offer = this.ImageReferenceOffer; + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy.RebalanceBehavior = this.AutomaticZoneRebalanceBehavior; } - if (this.IsParameterBound(c => c.ImageReferencePublisher)) + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceTargetInstanceCount)) { 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) + if (this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy = new ZoneRebalancePolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference.Publisher = this.ImageReferencePublisher; + this.VirtualMachineScaleSetUpdate.ZoneRebalancePolicy.TargetInstanceCount = this.AutomaticZoneRebalanceTargetInstanceCount; } - - if (this.IsParameterBound(c => c.ImageReferenceSku)) + } + private void BuildPutObject() + { + if (this.IsParameterBound(c => c.AutomaticOSUpgrade)) { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) + if (this.VirtualMachineScaleSet.UpgradePolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); + this.VirtualMachineScaleSet.UpgradePolicy = new UpgradePolicy(); } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference == null) + if (this.VirtualMachineScaleSet.UpgradePolicy.AutomaticOSUpgradePolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference = new ImageReference(); + this.VirtualMachineScaleSet.UpgradePolicy.AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference.Sku = this.ImageReferenceSku; + this.VirtualMachineScaleSet.UpgradePolicy.AutomaticOSUpgradePolicy.EnableAutomaticOSUpgrade = this.AutomaticOSUpgrade; } - if (this.IsParameterBound(c => c.ImageReferenceVersion)) + if (this.IsParameterBound(c => c.EnableAutomaticZoneRebalancingPolicy)) { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) + if (this.VirtualMachineScaleSet.ZoneBalancePolicy == 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.VirtualMachineScaleSet.ZoneBalancePolicy = new ZoneBalancePolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.ImageReference.Version = this.ImageReferenceVersion; + this.VirtualMachineScaleSet.ZoneBalancePolicy.EnableAutomaticZoneRebalancingPolicy = this.EnableAutomaticZoneRebalancingPolicy; } - if (this.IsParameterBound(c => c.ImageUri)) + 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.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) + if (this.VirtualMachineScaleSet.ZoneBalancePolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.Image = new VirtualHardDisk(); + this.VirtualMachineScaleSet.ZoneBalancePolicy = new ZoneBalancePolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.Image.Uri = this.ImageUri; + this.VirtualMachineScaleSet.ZoneBalancePolicy.AutomaticZoneRebalanceStrategy = this.AutomaticZoneRebalanceStrategy; } - if (this.IsParameterBound(c => c.LicenseType)) + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceBehavior)) { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) + if (this.VirtualMachineScaleSet.ZoneBalancePolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); + this.VirtualMachineScaleSet.ZoneBalancePolicy = new ZoneBalancePolicy(); } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.LicenseType = this.LicenseType; + this.VirtualMachineScaleSet.ZoneBalancePolicy.AutomaticZoneRebalanceBehavior = this.AutomaticZoneRebalanceBehavior; } - if (this.IsParameterBound(c => c.ManagedDiskStorageAccountType)) + if (this.IsParameterBound(c => c.AutomaticZoneRebalanceTargetInstanceCount)) { - 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.VirtualMachineScaleSet.ZoneBalancePolicy == null) { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetUpdateOSDisk(); + this.VirtualMachineScaleSet.ZoneBalancePolicy = new ZoneBalancePolicy(); } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk = new VirtualMachineScaleSetManagedDiskParameters(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk.StorageAccountType = this.ManagedDiskStorageAccountType; - } - - if (this.IsParameterBound(c => c.MaxBatchInstancePercent)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy = new UpgradePolicy(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy = new RollingUpgradePolicy(); - } - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy.MaxBatchInstancePercent = this.MaxBatchInstancePercent; - } - - if (this.IsParameterBound(c => c.MaxPrice)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.BillingProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.BillingProfile = new BillingProfile(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.BillingProfile.MaxPrice = this.MaxPrice; - } - - if (this.IsParameterBound(c => c.MaxUnhealthyInstancePercent)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy = new UpgradePolicy(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy = new RollingUpgradePolicy(); - } - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyInstancePercent = this.MaxUnhealthyInstancePercent; - } - - if (this.IsParameterBound(c => c.MaxUnhealthyUpgradedInstancePercent)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy = new UpgradePolicy(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy = new RollingUpgradePolicy(); - } - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy.MaxUnhealthyUpgradedInstancePercent = this.MaxUnhealthyUpgradedInstancePercent; - } - - if (this.IsParameterBound(c => c.OsDiskCaching)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetUpdateOSDisk(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.Caching = this.OsDiskCaching; - } - - if (this.IsParameterBound(c => c.OsDiskWriteAccelerator)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetUpdateOSDisk(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.WriteAcceleratorEnabled = this.OsDiskWriteAccelerator; - } - - if (this.IsParameterBound(c => c.Overprovision)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - this.VirtualMachineScaleSetUpdate.Overprovision = this.Overprovision; - } - - if (this.IsParameterBound(c => c.PauseTimeBetweenBatches)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy = new UpgradePolicy(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy = new RollingUpgradePolicy(); - } - this.VirtualMachineScaleSetUpdate.UpgradePolicy.RollingUpgradePolicy.PauseTimeBetweenBatches = this.PauseTimeBetweenBatches; - } - - if (this.IsParameterBound(c => c.PlanName)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Plan == null) - { - this.VirtualMachineScaleSetUpdate.Plan = new Plan(); - } - this.VirtualMachineScaleSetUpdate.Plan.Name = this.PlanName; - } - - if (this.IsParameterBound(c => c.PlanProduct)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Plan == null) - { - this.VirtualMachineScaleSetUpdate.Plan = new Plan(); - } - this.VirtualMachineScaleSetUpdate.Plan.Product = this.PlanProduct; - } - - if (this.IsParameterBound(c => c.PlanPromotionCode)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Plan == null) - { - this.VirtualMachineScaleSetUpdate.Plan = new Plan(); - } - this.VirtualMachineScaleSetUpdate.Plan.PromotionCode = this.PlanPromotionCode; - } - - if (this.IsParameterBound(c => c.PlanPublisher)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Plan == null) - { - this.VirtualMachineScaleSetUpdate.Plan = new Plan(); - } - this.VirtualMachineScaleSetUpdate.Plan.Publisher = this.PlanPublisher; - } - - if (this.IsParameterBound(c => c.ProvisionVMAgent)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile = new VirtualMachineScaleSetUpdateOSProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration = new WindowsConfiguration(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration.ProvisionVMAgent = this.ProvisionVMAgent; - } - - if (this.IsParameterBound(c => c.ProximityPlacementGroupId)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.ProximityPlacementGroup == null) - { - this.VirtualMachineScaleSetUpdate.ProximityPlacementGroup = new SubResource(); - } - this.VirtualMachineScaleSetUpdate.ProximityPlacementGroup.Id = this.ProximityPlacementGroupId; - } - - if (this.IsParameterBound(c => c.ScaleInPolicy)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.ScaleInPolicy == null) - { - this.VirtualMachineScaleSetUpdate.ScaleInPolicy = new ScaleInPolicy(); - } - this.VirtualMachineScaleSetUpdate.ScaleInPolicy.Rules = this.ScaleInPolicy; - } - - if (this.IsParameterBound(c => c.ScaleInPolicyForceDeletion)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.ScaleInPolicy == null) - { - this.VirtualMachineScaleSetUpdate.ScaleInPolicy = new ScaleInPolicy(); - } - this.VirtualMachineScaleSetUpdate.ScaleInPolicy.ForceDeletion = this.ScaleInPolicyForceDeletion; - } - - if (this.IsParameterBound(c => c.SinglePlacementGroup)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - this.VirtualMachineScaleSetUpdate.SinglePlacementGroup = this.SinglePlacementGroup; - } - - if (this.IsParameterBound(c => c.SkipExtensionsOnOverprovisionedVMs)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - this.VirtualMachineScaleSetUpdate.DoNotRunExtensionsOnOverprovisionedVMs = this.SkipExtensionsOnOverprovisionedVMs; - } - - if (this.IsParameterBound(c => c.SkuCapacity)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Sku == null) - { - this.VirtualMachineScaleSetUpdate.Sku = new Sku(); - } - this.VirtualMachineScaleSetUpdate.Sku.Capacity = this.SkuCapacity; - } - - if (this.IsParameterBound(c => c.SkuName)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Sku == null) - { - this.VirtualMachineScaleSetUpdate.Sku = new Sku(); - } - this.VirtualMachineScaleSetUpdate.Sku.Name = this.SkuName; - } - - if (this.IsParameterBound(c => c.SkuTier)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.Sku == null) - { - this.VirtualMachineScaleSetUpdate.Sku = new Sku(); - } - this.VirtualMachineScaleSetUpdate.Sku.Tier = this.SkuTier; - } - - if (this.IsParameterBound(c => c.Tag)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - this.VirtualMachineScaleSetUpdate.Tags = this.Tag.Cast().ToDictionary(ht => (string)ht.Key, ht => (string)ht.Value); - } - - if (this.IsParameterBound(c => c.TerminateScheduledEventNotBeforeTimeoutInMinutes)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile = new TerminateNotificationProfile(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile.NotBeforeTimeout = XmlConvert.ToString(new TimeSpan(0, this.TerminateScheduledEventNotBeforeTimeoutInMinutes, 0)); - } - - if (this.IsParameterBound(c => c.TerminateScheduledEvents)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile = new TerminateNotificationProfile(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile.Enable = this.TerminateScheduledEvents; - } - - if (this.IsParameterBound(c => c.TimeZone)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile = new VirtualMachineScaleSetUpdateOSProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration = new WindowsConfiguration(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.OsProfile.WindowsConfiguration.TimeZone = this.TimeZone; - } - - if (this.IsParameterBound(c => c.UltraSSDEnabled)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.AdditionalCapabilities == null) - { - this.VirtualMachineScaleSetUpdate.AdditionalCapabilities = new AdditionalCapabilities(); - } - this.VirtualMachineScaleSetUpdate.AdditionalCapabilities.UltraSSDEnabled = this.UltraSSDEnabled; - } - - if (this.IsParameterBound(c => c.UpgradePolicyMode)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.UpgradePolicy == null) - { - this.VirtualMachineScaleSetUpdate.UpgradePolicy = new UpgradePolicy(); - } - this.VirtualMachineScaleSetUpdate.UpgradePolicy.Mode = this.UpgradePolicyMode; - } - - if (this.IsParameterBound(c => c.VhdContainer)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile = new VirtualMachineScaleSetUpdateVMProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile = new VirtualMachineScaleSetUpdateStorageProfile(); - } - if (this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk == null) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk = new VirtualMachineScaleSetUpdateOSDisk(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.StorageProfile.OsDisk.VhdContainers = this.VhdContainer; - } - - if (this.IsParameterBound(c => c.EncryptionAtHost)) - { - 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) - { - this.VirtualMachineScaleSet.VirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); - } - this.VirtualMachineScaleSet.VirtualMachineProfile.UserData = this.UserData; - } - - if (this.IsParameterBound(c => c.OSImageScheduledEventEnabled)) - { - 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) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile = new OSImageNotificationProfile(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile.Enable = this.OSImageScheduledEventEnabled; - } - - if (this.IsParameterBound(c => c.OSImageScheduledEventNotBeforeTimeoutInMinutes)) - { - 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) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile = new OSImageNotificationProfile(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.ScheduledEventsProfile.OsImageNotificationProfile.NotBeforeTimeout = this.OSImageScheduledEventNotBeforeTimeoutInMinutes; - } - - // SecurityType, includes TrustedLaunch and ConfidentialVM and Standard. - if (this.IsParameterBound(c => c.SecurityType)) - { - 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) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); - } - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings.VTpmEnabled = this.EnableVtpm; - } - // Only used for SecurityType == TrustedLaunch - if (this.IsParameterBound(c => c.EnableSecureBoot)) - { - 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) - { - this.VirtualMachineScaleSetUpdate.VirtualMachineProfile.SecurityProfile.UefiSettings = new UefiSettings(); - } - 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); - } - - // New Feature Implementation - if (this.IsParameterBound(c => c.EnableResilientVMCreate)) - { - if (this.VirtualMachineScaleSetUpdate == null) - { - this.VirtualMachineScaleSetUpdate = new VirtualMachineScaleSetUpdate(); - } - if (this.VirtualMachineScaleSetUpdate.ResiliencyPolicy == null) - { - 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) - { - this.VirtualMachineScaleSetUpdate.ResiliencyPolicy = new ResiliencyPolicy(); - } - this.VirtualMachineScaleSetUpdate.ResiliencyPolicy.ResilientVMDeletionPolicy = new ResilientVMDeletionPolicy(this.EnableResilientVMDelete); - } - } - - private void BuildPutObject() - { - if (this.IsParameterBound(c => c.AutomaticOSUpgrade)) - { - if (this.VirtualMachineScaleSet.UpgradePolicy == null) - { - this.VirtualMachineScaleSet.UpgradePolicy = new UpgradePolicy(); - } - if (this.VirtualMachineScaleSet.UpgradePolicy.AutomaticOSUpgradePolicy == null) - { - this.VirtualMachineScaleSet.UpgradePolicy.AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy(); - } - this.VirtualMachineScaleSet.UpgradePolicy.AutomaticOSUpgradePolicy.EnableAutomaticOSUpgrade = this.AutomaticOSUpgrade; + this.VirtualMachineScaleSet.ZoneBalancePolicy.AutomaticZoneRebalanceTargetInstanceCount = this.AutomaticZoneRebalanceTargetInstanceCount; } if (this.IsParameterBound(c => c.BootDiagnosticsEnabled)) 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