Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5789,3 +5789,234 @@ function Test-EncryptionIdentityNotPartOfAzureVmssConfig{
clean-ResourceGroup $rgName;
}
}

function TestGen-newazvmssconfig
{
# Setup
$rgname = Get-ComputeTestResourceName;
$loc = Get-Location;

try
{
# Common
New-AzResourceGroup -Name $rgname -Location $loc -Force;
$vmssName = 'vmss' + $rgname;

# Create VMSS Config with new parameters
$vmssConfig = New-AzVmssConfig -Location $loc `
-EnableAutomaticZoneRebalancingPolicy $true `
-AutomaticZoneRebalanceStrategy "Recreate" `
-AutomaticZoneRebalanceBehavior "CreateBeforeDelete";

# Validate VMSS Config properties
Assert-IsTrue $vmssConfig.EnableAutomaticZoneRebalancingPolicy;
Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceStrategy "Recreate";
Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceBehavior "CreateBeforeDelete";

# Create VMSS using the config
New-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmssConfig;
$vmssGet = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName;

# Validate VMSS properties after creation
Assert-IsTrue $vmssGet.EnableAutomaticZoneRebalancingPolicy;
Assert-AreEqual $vmssGet.AutomaticZoneRebalanceStrategy "Recreate";
Assert-AreEqual $vmssGet.AutomaticZoneRebalanceBehavior "CreateBeforeDelete";

# Cleanup
Remove-AzResourceGroup -Name $rgname -Force;
}
catch
{
# Cleanup in case of failure
Remove-AzResourceGroup -Name $rgname -Force;
throw $_;
}
}

function TestGen-newazvmss
{
# Setup
$rgname = Get-ComputeTestResourceName;
$loc = Get-Location;

try
{
# Common
New-AzResourceGroup -Name $rgname -Location $loc -Force;

$vmssName = 'vs' + $rgname;
$adminUsername = Get-ComputeTestResourceName;
$password = Get-PasswordForVM;
$adminPassword = $password | ConvertTo-SecureString -AsPlainText -Force;
$cred = New-Object System.Management.Automation.PSCredential ($adminUsername, $adminPassword);

# Test New-AzVmssConfig with new parameters
$vmssConfig = New-AzVmssConfig -Location $loc `
-EnableAutomaticZoneRebalancingPolicy $true `
-AutomaticZoneRebalanceStrategy "Recreate" `
-AutomaticZoneRebalanceBehavior "CreateBeforeDelete";

Assert-IsNotNull $vmssConfig;
Assert-AreEqual $vmssConfig.EnableAutomaticZoneRebalancingPolicy $true;
Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceStrategy "Recreate";
Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceBehavior "CreateBeforeDelete";

# Test New-AzVmss with the new configuration
$vmss = New-AzVmss -ResourceGroupName $rgname -Credential $cred -VMScaleSetName $vmssName -VMScaleSetConfig $vmssConfig;

Assert-IsNotNull $vmss;
Assert-AreEqual $vmss.OrchestrationMode "Flexible";
Assert-AreEqual $vmss.EnableAutomaticZoneRebalancingPolicy $true;
Assert-AreEqual $vmss.AutomaticZoneRebalanceStrategy "Recreate";
Assert-AreEqual $vmss.AutomaticZoneRebalanceBehavior "CreateBeforeDelete";

# Test Update-AzVmss with new parameters
$updatedVmss = Update-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName `
-EnableAutomaticZoneRebalancingPolicy $false `
-AutomaticZoneRebalanceStrategy "TargetScaleOut" `
-AutomaticZoneRebalanceTargetInstanceCount 5;

Assert-IsNotNull $updatedVmss;
Assert-AreEqual $updatedVmss.EnableAutomaticZoneRebalancingPolicy $false;
Assert-AreEqual $updatedVmss.AutomaticZoneRebalanceStrategy "TargetScaleOut";
Assert-AreEqual $updatedVmss.AutomaticZoneRebalanceTargetInstanceCount 5;
}
finally
{
# Cleanup
Remove-AzResourceGroup -Name $rgname -Force -ErrorAction SilentlyContinue;
}
}

function TestGen-updateazvmss
{
# Setup
$rgname = Get-ComputeTestResourceName;
$loc = Get-Location;

try
{
# Common
New-AzResourceGroup -Name $rgname -Location $loc -Force;

$vmssSize = 'Standard_D4s_v3';
$PublisherName = "MicrosoftWindowsServer";
$Offer = "WindowsServer";
$SKU = "2016-datacenter-gensecond";

# NRP
$vnetworkName = 'vnet' + $rgname;
$subnetName = 'subnet' + $rgname;
$subnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix "10.0.0.0/24";
$vnet = New-AzVirtualNetwork -Name $vnetworkName -ResourceGroupName $rgname -Location $loc -AddressPrefix "10.0.0.0/16" -Subnet $subnet;
$vnet = Get-AzVirtualNetwork -Name $vnetworkName -ResourceGroupName $rgname;
$subnetId = $vnet.Subnets[0].Id;

# New VMSS Parameters
$vmssName = 'vmss' + $rgname;
$adminUsername = Get-ComputeTestResourceName;
$adminPassword = Get-PasswordForVM | ConvertTo-SecureString -AsPlainText -Force;

$imgRef = New-Object -TypeName 'Microsoft.Azure.Commands.Compute.Models.PSVirtualMachineImage';
$imgRef.PublisherName = $PublisherName;
$imgRef.Offer = $Offer;
$imgRef.Skus = $SKU;
$imgRef.Version = "latest";

$ipCfg = New-AzVmssIPConfig -Name 'test' -SubnetId $subnetId;

$vmss = New-AzVmssConfig -Location $loc -SkuCapacity 2 -SkuName $vmssSize -UpgradePolicyMode 'Manual' `
| Add-AzVmssNetworkInterfaceConfiguration -Name 'test' -Primary $true -IPConfiguration $ipCfg `
| Set-AzVmssOSProfile -ComputerNamePrefix 'test' -AdminUsername $adminUsername -AdminPassword $adminPassword `
| Set-AzVmssStorageProfile -OsDiskCreateOption 'FromImage' -OsDiskCaching 'ReadOnly' `
-ImageReferenceOffer $imgRef.Offer -ImageReferenceSku $imgRef.Skus -ImageReferenceVersion $imgRef.Version `
-ImageReferencePublisher $imgRef.PublisherName;

# Create VMSS
$result = New-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmss;
$vmssGet = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName;

# Test new parameters for Update-AzVmss
$enableAutomaticZoneRebalancingPolicy = $true;
$automaticZoneRebalanceStrategy = "Recreate";
$automaticZoneRebalanceBehavior = "CreateBeforeDelete";
$automaticZoneRebalanceTargetInstanceCount = 5;

$vmssUpdated = Update-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmssGet `
-EnableAutomaticZoneRebalancingPolicy $enableAutomaticZoneRebalancingPolicy `
-AutomaticZoneRebalanceStrategy $automaticZoneRebalanceStrategy `
-AutomaticZoneRebalanceBehavior $automaticZoneRebalanceBehavior `
-AutomaticZoneRebalanceTargetInstanceCount $automaticZoneRebalanceTargetInstanceCount;

$vmssGetUpdated = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName;

# Assertions
Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.ScaleSetPolicy.EnableAutomaticZoneRebalancingPolicy $enableAutomaticZoneRebalancingPolicy;
Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.ScaleSetPolicy.AutomaticZoneRebalanceStrategy $automaticZoneRebalanceStrategy;
Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.ScaleSetPolicy.AutomaticZoneRebalanceBehavior $automaticZoneRebalanceBehavior;
Assert-AreEqual $vmssGetUpdated.VirtualMachineProfile.ScaleSetPolicy.AutomaticZoneRebalanceTargetInstanceCount $automaticZoneRebalanceTargetInstanceCount;
}
finally
{
# Cleanup
Remove-AzResourceGroup -Name $rgname -Force -ErrorAction SilentlyContinue;
}
}

function TestGen-updateazvm {
# Setup
$rgname = Get-ComputeTestResourceName

try {
# Common
$loc = Get-Location
New-AzResourceGroup -Name $rgname -Location $loc -Force

# New VMSS Parameters
$vmssName = 'vmssUpdateTest' + $rgname
$adminUsername = 'TestUser'
$adminPassword = $PLACEHOLDER
$securePassword = ConvertTo-SecureString $adminPassword -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($adminUsername, $securePassword)

# Create VMSS
$VmssFlex = New-AzVmss `
-ResourceGroupName $rgname `
-Name $vmssName `
-OrchestrationMode 'Flexible' `
-Location $loc `
-Credential $cred `
-DomainNameLabel "scaleset-update-test" `
-SecurityType "Standard"

# Update VMSS with new parameters
Update-AzVmss `
-ResourceGroupName $rgname `
-VMScaleSetName $vmssName `
-EnableAutomaticZoneRebalancingPolicy $true `
-AutomaticZoneRebalanceStrategy 'Recreate' `
-AutomaticZoneRebalanceBehavior 'CreateBeforeDelete'

# Validate the updated VMSS properties
$updatedVmss = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName
Assert-AreEqual $true $updatedVmss.EnableAutomaticZoneRebalancingPolicy
Assert-AreEqual 'Recreate' $updatedVmss.AutomaticZoneRebalanceStrategy
Assert-AreEqual 'CreateBeforeDelete' $updatedVmss.AutomaticZoneRebalanceBehavior

# Test with 'TargetScaleOut' strategy
Update-AzVmss `
-ResourceGroupName $rgname `
-VMScaleSetName $vmssName `
-AutomaticZoneRebalanceStrategy 'TargetScaleOut' `
-AutomaticZoneRebalanceTargetInstanceCount 5

# Validate the updated VMSS properties for 'TargetScaleOut'
$updatedVmssTargetScaleOut = Get-AzVmss -ResourceGroupName $rgname -VMScaleSetName $vmssName
Assert-AreEqual 'TargetScaleOut' $updatedVmssTargetScaleOut.AutomaticZoneRebalanceStrategy
Assert-AreEqual 5 $updatedVmssTargetScaleOut.AutomaticZoneRebalanceTargetInstanceCount

} finally {
# Cleanup
Remove-AzResourceGroup -Name $rgname -Force -ErrorAction SilentlyContinue
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -695,5 +695,12 @@ public void TestVirtualMachinePlacement()
{
TestRunner.RunTestScript("Test-VirtualMachinePlacement");
}
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void testgennewazvm()
{
TestRunner.RunTestScript("TestGen-newazvm");
}
}
}
60 changes: 59 additions & 1 deletion src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -7945,4 +7945,62 @@ function Test-VirtualMachinePlacement
# Cleanup
Clean-ResourceGroup $rgname;
}
}
}
function TestGen-newazvm {
# To have a test recording
Get-AzVm

$name = Get-ComputeTestResourceName
$vmssName = 'vmss' + $name
$location = Get-Location

# Create a new VMSS configuration with the new parameters
$vmssConfig = New-AzVmssConfig -VMSSName $vmssName -Location $location -SkuCapacity 2 -SkuName 'Standard_DS1_v2' `
-EnableAutomaticZoneRebalancingPolicy $true `
-AutomaticZoneRebalanceStrategy 'Recreate' `
-AutomaticZoneRebalanceBehavior 'CreateBeforeDelete' `
-AutomaticZoneRebalanceTargetInstanceCount 5

# Validate the new parameters in the VMSS configuration
Assert-AreEqual $vmssConfig.EnableAutomaticZoneRebalancingPolicy $true
Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceStrategy 'Recreate'
Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceBehavior 'CreateBeforeDelete'
Assert-AreEqual $vmssConfig.AutomaticZoneRebalanceTargetInstanceCount 5

# Update an existing VMSS with the new parameters
$vmssConfigUpdated = Update-AzVmss -VMSSName $vmssName -Location $location `
-EnableAutomaticZoneRebalancingPolicy $false `
-AutomaticZoneRebalanceStrategy 'TargetScaleOut' `
-AutomaticZoneRebalanceTargetInstanceCount 10

# Validate the updated parameters in the VMSS configuration
Assert-AreEqual $vmssConfigUpdated.EnableAutomaticZoneRebalancingPolicy $false
Assert-AreEqual $vmssConfigUpdated.AutomaticZoneRebalanceStrategy 'TargetScaleOut'
Assert-Null $vmssConfigUpdated.AutomaticZoneRebalanceBehavior
Assert-AreEqual $vmssConfigUpdated.AutomaticZoneRebalanceTargetInstanceCount 10

# Test invalid values for the new parameters
try {
$vmssConfigInvalid = New-AzVmssConfig -VMSSName $vmssName -Location $location `
-AutomaticZoneRebalanceStrategy 'InvalidStrategy'
Assert-Fail "Expected an error for invalid AutomaticZoneRebalanceStrategy"
} catch {
Assert-Contains $_.Exception.Message "Invalid value for AutomaticZoneRebalanceStrategy"
}

try {
$vmssConfigInvalid = New-AzVmssConfig -VMSSName $vmssName -Location $location `
-AutomaticZoneRebalanceBehavior 'InvalidBehavior'
Assert-Fail "Expected an error for invalid AutomaticZoneRebalanceBehavior"
} catch {
Assert-Contains $_.Exception.Message "Invalid value for AutomaticZoneRebalanceBehavior"
}

try {
$vmssConfigInvalid = New-AzVmssConfig -VMSSName $vmssName -Location $location `
-AutomaticZoneRebalanceTargetInstanceCount -1
Assert-Fail "Expected an error for negative AutomaticZoneRebalanceTargetInstanceCount"
} catch {
Assert-Contains $_.Exception.Message "AutomaticZoneRebalanceTargetInstanceCount must be a positive integer"
}
}
2 changes: 2 additions & 0 deletions src/Compute/Compute/ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

-->
## Upcoming Release
* Added new parameters `EnableAutomaticZoneRebalancingPolicy`, `AutomaticZoneRebalanceStrategy`, `AutomaticZoneRebalanceBehavior`, and `AutomaticZoneRebalanceTargetInstanceCount` to cmdlets `New-AzVmssConfig` and `Update-AzVmss`.
- These parameters enable configuration of automatic zone rebalancing policies and strategies for VM Scale Sets.
* Added new cmdlets `Add-AzVmssSkuProfileVMSize` and `Remove-AzVmssSkuProfileVMSize` to add and remove VM sizes to and from the VMSS SkuProfile.
* Added new parameters `ZonePlacementPolicy`, `IncludeZone`, `ExcludeZone`, and `AlignRegionalDisksToVMZone` to cmdlets `New-AzVM` and `New-AzVmConfig`
* Added new parameter `AlignRegionalDisksToVMZone` to cmdlet `Update-AzVM`.
Expand Down
Loading