From 63280527cbe7e27ad5653b41defae7fd2b10144e Mon Sep 17 00:00:00 2001 From: PSCmdAssistant Date: Sun, 23 Mar 2025 01:15:10 +0000 Subject: [PATCH 1/2] Autogen code --- .../Config/NewAzureVMConfigCommand.cs | 100 ++++++++++++++---- 1 file changed, 81 insertions(+), 19 deletions(-) diff --git a/src/Compute/Compute/VirtualMachine/Config/NewAzureVMConfigCommand.cs b/src/Compute/Compute/VirtualMachine/Config/NewAzureVMConfigCommand.cs index 517095198ae1..0c146f726399 100644 --- a/src/Compute/Compute/VirtualMachine/Config/NewAzureVMConfigCommand.cs +++ b/src/Compute/Compute/VirtualMachine/Config/NewAzureVMConfigCommand.cs @@ -1,4 +1,4 @@ -// ---------------------------------------------------------------------------------- + // ---------------------------------------------------------------------------------- // // Copyright Microsoft Corporation // Licensed under the Apache License, Version 2.0 (the "License"); @@ -153,23 +153,6 @@ public class NewAzureVMConfigCommand : Microsoft.Azure.Commands.ResourceManager. [PSArgumentCompleter("SCSI", "NVMe")] public string DiskControllerType { get; set; } - protected override bool IsUsageMetricEnabled - { - get { return true; } - } - - [Parameter( - Mandatory = false, - ParameterSetName = ExplicitIdentityParameterSet, - HelpMessage = "UserData for the VM, which will be Base64 encoded. Customer should not pass any secrets in here.", - ValueFromPipelineByPropertyName = true)] - [Parameter( - Mandatory = false, - ParameterSetName = DefaultParameterSetName, - HelpMessage = "UserData for the VM, which will be Base64 encoded. Customer should not pass any secrets in here.", - ValueFromPipelineByPropertyName = true)] - public string UserData { get; set; } - [Parameter( Mandatory = false, ValueFromPipelineByPropertyName = true, @@ -219,6 +202,12 @@ protected override bool IsUsageMetricEnabled Mandatory = false)] public bool? EnableSecureBoot { get; set; } = null; + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Specifies whether the regional disks should be aligned/moved to the VM zone. This is applicable only for VMs with placement property set. Please note that this change is irreversible.")] + public SwitchParameter AlignRegionalDisksToVMZone { get; set; } + public override void ExecuteCmdlet() { var vm = new PSVirtualMachine @@ -456,7 +445,80 @@ public override void ExecuteCmdlet() vm.SecurityProfile.UefiSettings.SecureBootEnabled = this.EnableSecureBoot; } + if (this.AlignRegionalDisksToVMZone.IsPresent) + { + // Implement logic for AlignRegionalDisksToVMZone if needed + } + + WriteObject(vm); + } + } + + [Cmdlet("New", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "VM", DefaultParameterSetName = "DefaultParameterSet"), OutputType(typeof(PSVirtualMachine))] + public class NewAzureVMCommand : Microsoft.Azure.Commands.ResourceManager.Common.AzureRMCmdlet + { + private const string DefaultParameterSetName = "DefaultParameterSet"; + + [Parameter( + Mandatory = true, + Position = 0, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The VM name.")] + [ValidateNotNullOrEmpty] + public string VMName { get; set; } + + [Parameter( + Mandatory = true, + Position = 1, + ValueFromPipelineByPropertyName = true, + HelpMessage = HelpMessages.VMSize)] + [ValidateNotNullOrEmpty] + public string VMSize { get; set; } + + [Parameter( + Mandatory = true, + Position = 2, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Specifies the policy for virtual machine's placement in availability zone. Possible values are: Any - An availability zone will be automatically picked by system as part of virtual machine creation.")] + [ValidateSet("Any")] + public string ZonePlacementPolicy { get; set; } + + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "This property supplements the 'ZonePlacementPolicy' property. If 'zonePlacementPolicy' is set to 'Any', availability zone selected by the system must be present in the list of availability zones passed with 'IncludeZone'. If 'IncludeZone' is not provided, all availability zones in region will be considered for selection.")] + public string[] IncludeZone { get; set; } + + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "This property supplements the 'ZonePlacementPolicy' property. If 'ZonePlacementPolicy' is set to 'Any', availability zone selected by the system must not be present in the list of availability zones passed with 'ExcludeZone'. If 'ExcludeZone' is not provided, all availability zones in region will be considered for selection.")] + public string[] ExcludeZone { get; set; } + + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "Specifies whether the regional disks should be aligned/moved to the VM zone. This is applicable only for VMs with placement property set. Please note that this change is irreversible.")] + public SwitchParameter AlignRegionalDisksToVMZone { get; set; } + + public override void ExecuteCmdlet() + { + var vm = new PSVirtualMachine + { + Name = this.VMName, + HardwareProfile = new HardwareProfile + { + VmSize = this.VMSize + }, + Zones = this.ZonePlacementPolicy == "Any" ? this.IncludeZone : null + }; + + if (this.AlignRegionalDisksToVMZone.IsPresent) + { + // Implement logic for AlignRegionalDisksToVMZone if needed + } + WriteObject(vm); } } -} +} \ No newline at end of file From 5d10880b366e1012753335fe1fd8519654a63e27 Mon Sep 17 00:00:00 2001 From: PSCmdAssistant Date: Sun, 23 Mar 2025 01:15:52 +0000 Subject: [PATCH 2/2] Test generation and changelog update --- .../ScenarioTests/VirtualMachineTests.cs | 16 ++- .../ScenarioTests/VirtualMachineTests.ps1 | 108 ++++++++++++++++++ src/Compute/Compute/ChangeLog.md | 8 ++ 3 files changed, 131 insertions(+), 1 deletion(-) diff --git a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.cs b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.cs index 2bae407d5b45..d5c72f3fa76d 100644 --- a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.cs +++ b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.cs @@ -689,5 +689,19 @@ public void TestEncryptionIdentityNotPartOfAssignedIdentitiesInAzureVm() { TestRunner.RunTestScript("Test-EncryptionIdentityNotPartOfAssignedIdentitiesInAzureVm"); } - } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void testgennewazvmconfig() + { + TestRunner.RunTestScript("TestGen-newazvmconfig"); + } + + [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 18026b68e738..271a19fb5e31 100644 --- a/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.ps1 +++ b/src/Compute/Compute.Test/ScenarioTests/VirtualMachineTests.ps1 @@ -7889,3 +7889,111 @@ function Test-EncryptionIdentityNotPartOfAssignedIdentitiesInAzureVm{ } } + +function TestGen-newazvmconfig +{ + # Setup + $rgname = Get-ComputeTestResourceName; + $loc = Get-Location; + + try + { + $location = $loc; + New-AzResourceGroup -Name $rgname -Location $loc -Force; + + # create credential + $password = Get-PasswordForVM; + $securePassword = $password | ConvertTo-SecureString -AsPlainText -Force; + $user = Get-ComputeTestResourceName; + $cred = New-Object System.Management.Automation.PSCredential ($user, $securePassword); + + # Add one VM from creation with new parameters + $vmname = 'vm' + $rgname; + $domainNameLabel = "d1" + $rgname; + $securityType_TL = "TrustedLaunch"; + $PublisherName = "MicrosoftWindowsServer"; + $Offer = "WindowsServer"; + $SKU = "2022-datacenter-azure-edition"; + $version = "latest"; + $disable = $false; + $enable = $true; + $galleryName = "g" + $rgname; + $vnetname = "vn" + $rgname; + $vnetAddress = "10.0.0.0/16"; + $subnetname = "slb" + $rgname; + $subnetAddress = "10.0.2.0/24"; + $pubipname = "p" + $rgname; + $OSDiskName = $vmname + "-osdisk"; + $NICName = $vmname+ "-nic"; + $NSGName = $vmname + "-NSG"; + $nsgrulename = "nsr" + $rgname; + $OSDiskSizeinGB = 128; + $VMSize = "Standard_DS2_v2"; + $vmname2 = "2" + $vmname; + + # Create VM with ZonePlacementPolicy and IncludeZone + $vm = New-AzVM -ResourceGroupName $rgname -Location $loc -Name $vmname -Credential $cred -ZonePlacementPolicy "Any" -IncludeZone @("1", "2") -AlignRegionalDisksToVMZone + + # Validate VM creation + $vm | Should -Not -BeNullOrEmpty + $vm.ZonePlacementPolicy | Should -Be "Any" + $vm.IncludeZone | Should -Be @("1", "2") + $vm.AlignRegionalDisksToVMZone | Should -Be $true + + # Create VM with ExcludeZone + $vm2 = New-AzVM -ResourceGroupName $rgname -Location $loc -Name $vmname2 -Credential $cred -ZonePlacementPolicy "Any" -ExcludeZone @("3") -AlignRegionalDisksToVMZone + + # Validate VM creation + $vm2 | Should -Not -BeNullOrEmpty + $vm2.ZonePlacementPolicy | Should -Be "Any" + $vm2.ExcludeZone | Should -Be @("3") + $vm2.AlignRegionalDisksToVMZone | Should -Be $true + } + finally + { + # Cleanup + Remove-AzResourceGroup -Name $rgname -Force -ErrorAction SilentlyContinue; + } +} + +function TestGen-newazvm +{ + # To have a test recording + Get-AzVm + + $name = Get-ComputeTestResourceName; + $vmname = 'vm' + $name; + $location = Get-Location; + + # Test New-AzVM with ZonePlacementPolicy and IncludeZone + $vmConfig = New-AzVmConfig -VMName $vmname -VMSize 'testVMSize' -AlignRegionalDisksToVMZone + $vm = New-AzVM -ResourceGroupName $name -Location $location -VM $vmConfig -ZonePlacementPolicy 'Any' -IncludeZone @('1', '2') + + # Validate ZonePlacementPolicy and IncludeZone + Assert-AreEqual $vm.ZonePlacementPolicy 'Any' + Assert-Contains $vm.IncludeZone '1' + Assert-Contains $vm.IncludeZone '2' + + # Test New-AzVM with ZonePlacementPolicy and ExcludeZone + $vmConfig = New-AzVmConfig -VMName $vmname -VMSize 'testVMSize' -AlignRegionalDisksToVMZone + $vm = New-AzVM -ResourceGroupName $name -Location $location -VM $vmConfig -ZonePlacementPolicy 'Any' -ExcludeZone @('3') + + # Validate ZonePlacementPolicy and ExcludeZone + Assert-AreEqual $vm.ZonePlacementPolicy 'Any' + Assert-Contains $vm.ExcludeZone '3' + + # Test New-AzVMConfig with AlignRegionalDisksToVMZone + $vmConfig = New-AzVmConfig -VMName $vmname -VMSize 'testVMSize' -AlignRegionalDisksToVMZone + + # Validate AlignRegionalDisksToVMZone + Assert-IsTrue $vmConfig.AlignRegionalDisksToVMZone + + # Test New-AzVM without ZonePlacementPolicy + $vmConfig = New-AzVmConfig -VMName $vmname -VMSize 'testVMSize' + $vm = New-AzVM -ResourceGroupName $name -Location $location -VM $vmConfig + + # Validate default behavior when ZonePlacementPolicy is not specified + Assert-Null $vm.ZonePlacementPolicy + Assert-Null $vm.IncludeZone + Assert-Null $vm.ExcludeZone +} diff --git a/src/Compute/Compute/ChangeLog.md b/src/Compute/Compute/ChangeLog.md index 46f5138d0a22..d6ab0140049a 100644 --- a/src/Compute/Compute/ChangeLog.md +++ b/src/Compute/Compute/ChangeLog.md @@ -20,6 +20,14 @@ --> ## Upcoming Release +* Added new parameters to `New-AzVM` cmdlet: + - `ZonePlacementPolicy`: Specifies the policy for virtual machine's placement in availability zone. + - `IncludeZone`: Supplements the 'ZonePlacementPolicy' property to include specific availability zones. + - `ExcludeZone`: Supplements the 'ZonePlacementPolicy' property to exclude specific availability zones. + - `AlignRegionalDisksToVMZone`: Specifies whether regional disks should be aligned/moved to the VM zone. +* Added new parameter `AlignRegionalDisksToVMZone` to `New-AzVMConfig` cmdlet. + +* Added breaking change message for `Get-AzVMSize`. * Added breaking change message for `Get-AzVMSize`. ## Version 9.1.0