Skip to content

Commit 2f087e4

Browse files
SethuramSSethuram SVeryEarly
authored
Fix incorrect parameter mapping in Get-AzApplyUpdate (#26869)
* Fix incorrect parameter mapping in Get-AzApplyUpdate * Update ChangeLog.md * Add Az.Compute module for tests * Add Get-AzApplyUpdate test for VM * Fix Az.Compute and Az.Network module references --------- Co-authored-by: Sethuram S <[email protected]> Co-authored-by: Yabo Hu <[email protected]>
1 parent e6dcb6f commit 2f087e4

File tree

9 files changed

+5250
-7
lines changed

9 files changed

+5250
-7
lines changed

src/Maintenance/Maintenance.Test/ScenarioTests/Common.ps1

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,15 @@ function Get-RandomVirtualMachineName
3030
return getAssetName
3131
}
3232

33+
<#
34+
.SYNOPSIS
35+
Gets dedicated host name
36+
#>
37+
function Get-RandomDedicatedHostGroupName
38+
{
39+
return getAssetName
40+
}
41+
3342
<#
3443
.SYNOPSIS
3544
Gets dedicated host name
@@ -87,3 +96,104 @@ function Clean-ResourceGroup($rgname)
8796
Remove-AzResourceGroup -Name $rgname -Force
8897
}
8998
}
99+
100+
<#
101+
.SYNOPSIS
102+
Creates a new virtual machine
103+
#>
104+
function New-VirtualMachine(
105+
[string] $virtualMachineName,
106+
[string] $resourceGroupName,
107+
[string] $location)
108+
{
109+
$vmLocalAdminUser = "LocalAdminUser"
110+
$vmLocalAdminSecurePassword = ConvertTo-SecureString -String ([guid]::NewGuid()) -AsPlainText -Force
111+
$credential = New-Object System.Management.Automation.PSCredential($vmLocalAdminUser, $vmLocalAdminSecurePassword);
112+
$patchMode = "AutomaticByPlatform"
113+
$patchSettings = New-Object `
114+
-TypeName Microsoft.Azure.Management.Compute.Models.WindowsVMGuestPatchAutomaticByPlatformSettings `
115+
-Property @{BypassPlatformSafetyChecksOnUserSchedule = $true}
116+
$sku = "Standard_D2s_v3"
117+
$computerName = $virtualMachineName
118+
$networkName = "Net$virtualMachineName"
119+
$nicName = "Nic$virtualMachineName"
120+
$subnetName = "Subnet$virtualMachineName"
121+
$subnetAddressPrefix = "10.0.0.0/24"
122+
$vnetAddressPrefix = "10.0.0.0/16"
123+
$securityType = "Standard"
124+
$imagePublisher = "MicrosoftVisualStudio"
125+
$imageOffer = "Windows"
126+
$imageSku = "Windows-10-N-x64"
127+
$imageVersion = "latest"
128+
129+
$subnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix $subnetAddressPrefix
130+
$vnet = New-AzVirtualNetwork `
131+
-Name $networkName `
132+
-ResourceGroupName $resourceGroupName `
133+
-Location $location `
134+
-AddressPrefix $vnetAddressPrefix `
135+
-Subnet $subnet
136+
$nic = New-AzNetworkInterface `
137+
-Name $nicName `
138+
-ResourceGroupName $resourceGroupName `
139+
-Location $location `
140+
-SubnetId $vnet.Subnets[0].Id
141+
142+
$vmConfig = New-AzVMConfig `
143+
-VMName $virtualMachineName `
144+
-VMSize $sku `
145+
-SecurityType $securityType
146+
Set-AzVMOperatingSystem `
147+
-VM $vmConfig `
148+
-Windows `
149+
-ComputerName $computerName `
150+
-Credential $credential `
151+
-ProvisionVMAgent `
152+
-EnableAutoUpdate `
153+
-PatchMode $patchMode `
154+
| Out-Null
155+
Set-AzVMSourceImage `
156+
-VM $vmConfig `
157+
-PublisherName $imagePublisher `
158+
-Offer $imageOffer `
159+
-Skus $imageSku `
160+
-Version $imageVersion `
161+
| Out-Null
162+
Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id | Out-Null
163+
164+
New-AzVM -ResourceGroupName $resourceGroupName -Location $location -VM $vmConfig | Out-Null
165+
$virtualMachine = Get-AzVM -ResourceGroupName $resourceGroupName -Name $virtualMachineName
166+
$virtualMachine.OSProfile.WindowsConfiguration.PatchSettings.AutomaticByPlatformSettings = $patchSettings
167+
Update-AzVM -VM $virtualMachine -ResourceGroupName $ResourceGroupName | Out-Null
168+
169+
return $virtualMachine.Id
170+
}
171+
172+
<#
173+
.SYNOPSIS
174+
Creates a new dedicated host
175+
#>
176+
function New-DedicatedHost(
177+
[string] $dedicatedHostName,
178+
[string] $dedicatedHostGroupName,
179+
[string] $resourceGroupName,
180+
[string] $location)
181+
{
182+
$sku = "Dsv3-Type3"
183+
$platformFaultDomain = 1
184+
185+
$dedicatedHostGroup = New-AzHostGroup `
186+
-Name $dedicatedHostGroupName `
187+
-ResourceGroupName $resourceGroupName `
188+
-Location $location `
189+
-PlatformFaultDomain $platformFaultDomain
190+
191+
$dedicatedHost = New-AzHost `
192+
-HostGroupName $dedicatedHostGroup.Name `
193+
-Location $location `
194+
-Name $dedicatedHostName `
195+
-ResourceGroupName $resourceGroupName `
196+
-Sku $sku
197+
198+
return $dedicatedHost.Id
199+
}

src/Maintenance/Maintenance.Test/ScenarioTests/MaintenanceTestRunner.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ protected MaintenanceTestRunner(ITestOutputHelper output)
3535
.WithNewRmModules(helper => new[]
3636
{
3737
helper.RMProfileModule,
38-
helper.GetRMModulePath("Az.Maintenance.psd1")
38+
helper.GetRMModulePath("Az.Maintenance.psd1"),
39+
helper.GetRMModulePath("Az.Compute.psd1"),
40+
helper.GetRMModulePath("Az.Network.psd1")
3941
})
4042
.WithNewRecordMatcherArguments(
4143
userAgentsToIgnore: new Dictionary<string, string>

src/Maintenance/Maintenance.Test/ScenarioTests/MaintenanceTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,19 @@ public void TestAzApplyUpdateCancelConfiguration()
8585
{
8686
TestRunner.RunTestScript("Test-AzApplyUpdateCancelConfiguration");
8787
}
88+
89+
[Fact]
90+
[Trait(Category.AcceptanceType, Category.CheckIn)]
91+
public void TestGetAzApplyUpdateWithParentResource()
92+
{
93+
TestRunner.RunTestScript("Test-GetAzApplyUpdateWithParentResource");
94+
}
95+
96+
[Fact]
97+
[Trait(Category.AcceptanceType, Category.CheckIn)]
98+
public void TestGetAzApplyUpdateWithoutParentResource()
99+
{
100+
TestRunner.RunTestScript("Test-GetAzApplyUpdateWithoutParentResource");
101+
}
88102
}
89103
}

src/Maintenance/Maintenance.Test/ScenarioTests/MaintenanceTests.ps1

Lines changed: 170 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,7 @@ function Test-AzMaintenanceUpdate
609609

610610
<#
611611
.SYNOPSIS
612-
Test New-AzMaintenanceConfiguration, Get-AzApplyUpdate, Remove-AzMaintenanceConfiguration
612+
Test New-AzMaintenanceConfiguration, New-AzApplyUpdate, Remove-AzMaintenanceConfiguration
613613
#>
614614
function Test-AzApplyUpdateCancelConfiguration
615615
{
@@ -660,7 +660,175 @@ function Test-AzApplyUpdateCancelConfiguration
660660
# Cleanup
661661
Clean-ResourceGroup $resourceGroupName
662662
}
663-
}
663+
}
664+
665+
<#
666+
.SYNOPSIS
667+
Test New-AzMaintenanceConfiguration, New-AzConfigurationAssignment, Get-AzApplyUpdate
668+
#>
669+
function Test-GetAzApplyUpdateWithParentResource
670+
{
671+
$actualStartTime = (Get-Date -AsUTC).AddMinutes(12)
672+
$resourceGroupName = Get-RandomResourceGroupName
673+
$maintenanceConfigurationName = Get-RandomMaintenanceConfigurationName
674+
$dedicatedHostGroupName = Get-RandomDedicatedHostGroupName
675+
$dedicatedHostName = Get-RandomDedicatedHostName
676+
$location = "eastus"
677+
$maintenanceScope = "Host"
678+
$duration = "02:00"
679+
$actualStartDateTime = $actualStartTime.ToString("yyyy-MM-dd HH:mm")
680+
$startDateTime = [Microsoft.Azure.Test.HttpRecorder.HttpMockServer]::GetVariable("startDateTime", $actualStartDateTime)
681+
$expirationDateTime = "9999-12-31 00:00"
682+
$recurEvery = "Day"
683+
$timezone = "UTC"
684+
$providerName = "Microsoft.Compute"
685+
$resourceType = "hosts"
686+
$resourceParentType = "hostGroups"
687+
$applyUpdateName = "default"
688+
689+
try
690+
{
691+
New-AzResourceGroup -Name $resourceGroupName -Location $location
692+
693+
$dedicatedHostId = New-DedicatedHost $dedicatedHostName $dedicatedHostGroupName $resourceGroupName $location
694+
695+
### Host maintenance config
696+
$maintenanceConfiguration = New-AzMaintenanceConfiguration `
697+
-ResourceGroupName $resourceGroupName `
698+
-Name $maintenanceConfigurationName `
699+
-MaintenanceScope $maintenanceScope `
700+
-Location $location `
701+
-Timezone $timezone `
702+
-StartDateTime $startDateTime `
703+
-ExpirationDateTime $expirationDateTime `
704+
-Duration $duration `
705+
-RecurEvery $recurEvery
706+
707+
Assert-AreEqual $maintenanceConfiguration.Name $maintenanceConfigurationName
708+
709+
### Wait few minutes so that the resource is available for configuration assignment
710+
Start-TestSleep -Seconds (15 * 60)
711+
712+
### Create configuration assignment
713+
$configurationAssignment = New-AzConfigurationAssignment `
714+
-ResourceGroupName $resourceGroupName `
715+
-Location $location `
716+
-ResourceName $dedicatedHostName `
717+
-ResourceType $resourceType `
718+
-ResourceParentName $dedicatedHostGroupName `
719+
-ResourceParentType $resourceParentType `
720+
-ProviderName $providerName `
721+
-ConfigurationAssignmentName $maintenanceConfigurationName `
722+
-MaintenanceConfigurationId $maintenanceConfiguration.Id
723+
724+
Assert-AreEqual $configurationAssignment.Name $maintenanceConfigurationName
725+
726+
### Make Get-AzApplyUpdate call
727+
$applyUpdateResponse = Get-AzApplyUpdate `
728+
-ResourceGroupName $resourceGroupName `
729+
-ProviderName $providerName `
730+
-ResourceType $resourceType `
731+
-ResourceName $dedicatedHostName `
732+
-ResourceParentType $resourceParentType `
733+
-ResourceParentName $dedicatedHostGroupName `
734+
-ApplyUpdateName $applyUpdateName
735+
736+
Assert-AreEqual $applyUpdateResponse.ResourceId $dedicatedHostId
737+
}
738+
finally
739+
{
740+
Clean-ResourceGroup $resourceGroupName
741+
}
742+
}
743+
744+
<#
745+
.SYNOPSIS
746+
Test New-AzMaintenanceConfiguration, New-AzConfigurationAssignment, Get-AzApplyUpdate
747+
#>
748+
function Test-GetAzApplyUpdateWithoutParentResource
749+
{
750+
$actualStartTime = (Get-Date -AsUTC).AddMinutes(12)
751+
$resourceGroupName = Get-RandomResourceGroupName
752+
$maintenanceConfigurationName = Get-RandomMaintenanceConfigurationName
753+
$virtualMachineName = Get-RandomVirtualMachineName
754+
$location = "westus"
755+
$maintenanceScope = "InGuestPatch"
756+
$duration = "02:00"
757+
$actualStartDateTime = $actualStartTime.ToString("yyyy-MM-dd HH:mm")
758+
$startDateTime = [Microsoft.Azure.Test.HttpRecorder.HttpMockServer]::GetVariable("startDateTime", $actualStartDateTime)
759+
$expirationDateTime = "9999-12-31 00:00"
760+
$recurEvery = "Day"
761+
$timezone = "UTC"
762+
$extensionProperty = @{"inGuestPatchMode"="User"}
763+
$rebootOption = "IfRequired";
764+
$windowsParameterClassificationToInclude = "FeaturePack","ServicePack";
765+
$windowsParameterKbNumberToInclude = "KB123456","KB123466";
766+
$windowsParameterKbNumberToExclude = "KB123456","KB123466";
767+
$linuxParameterClassificationToInclude = "Other";
768+
$linuxParameterPackageNameMaskToInclude = "apt","httpd";
769+
$linuxParameterPackageNameMaskToExclude = "ppt","userpk";
770+
$providerName = "Microsoft.Compute"
771+
$resourceType = "virtualmachines"
772+
$applyUpdateName = "default"
773+
774+
try
775+
{
776+
New-AzResourceGroup -Name $resourceGroupName -Location $location
777+
778+
$virtualMachineId = New-VirtualMachine $virtualMachineName $resourceGroupName $location
779+
780+
### InGuestPatch maintenance config
781+
$maintenanceConfiguration = New-AzMaintenanceConfiguration `
782+
-ResourceGroupName $resourceGroupName `
783+
-Name $maintenanceConfigurationName `
784+
-MaintenanceScope $maintenanceScope `
785+
-Location $location `
786+
-Timezone $timezone `
787+
-StartDateTime $startDateTime `
788+
-ExpirationDateTime $expirationDateTime `
789+
-Duration $duration `
790+
-RecurEvery $recurEvery `
791+
-ExtensionProperty $extensionProperty `
792+
-InstallPatchRebootSetting $rebootOption `
793+
-WindowParameterClassificationToInclude $windowsParameterClassificationToInclude `
794+
-WindowParameterKbNumberToInclude $windowsParameterKbNumberToInclude `
795+
-WindowParameterKbNumberToExclude $windowsParameterKbNumberToExclude `
796+
-LinuxParameterPackageNameMaskToInclude $linuxParameterPackageNameMaskToInclude `
797+
-LinuxParameterClassificationToInclude $linuxParameterClassificationToInclude `
798+
-LinuxParameterPackageNameMaskToExclude $linuxParameterPackageNameMaskToExclude
799+
800+
Assert-AreEqual $maintenanceConfiguration.Name $maintenanceConfigurationName
801+
802+
### Wait few minutes so that the resource is available for configuration assignment
803+
Start-TestSleep -Seconds (15 * 60)
804+
805+
### Create configuration assignment
806+
$configurationAssignment = New-AzConfigurationAssignment `
807+
-ResourceGroupName $resourceGroupName `
808+
-Location $location `
809+
-ResourceName $virtualMachineName `
810+
-ResourceType $resourceType `
811+
-ProviderName $providerName `
812+
-ConfigurationAssignmentName $maintenanceConfigurationName `
813+
-MaintenanceConfigurationId $maintenanceConfiguration.Id
814+
815+
Assert-AreEqual $configurationAssignment.Name $maintenanceConfigurationName
816+
817+
### Make Get-AzApplyUpdate call
818+
$applyUpdateResponse = Get-AzApplyUpdate `
819+
-ResourceGroupName $resourceGroupName `
820+
-ProviderName $providerName `
821+
-ResourceType $resourceType `
822+
-ResourceName $virtualMachineName `
823+
-ApplyUpdateName $applyUpdateName
824+
825+
Assert-AreEqual $applyUpdateResponse.ResourceId $virtualMachineId
826+
}
827+
finally
828+
{
829+
Clean-ResourceGroup $resourceGroupName
830+
}
831+
}
664832

665833
<#
666834
.SYNOPSIS

0 commit comments

Comments
 (0)