Skip to content

Commit 02c411c

Browse files
committed
Update SaveAzureVMImageCommand
1 parent 1311001 commit 02c411c

File tree

5 files changed

+3821
-10
lines changed

5 files changed

+3821
-10
lines changed

src/ResourceManager/Compute/Commands.Compute.Test/Commands.Compute.Test.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@
148148
<Compile Include="ScenarioTests\StorageAccountTests.cs" />
149149
<Compile Include="ScenarioTests\TestVirtualMachineImageList.cs" />
150150
<Compile Include="ScenarioTests\TestVirtualMachineList.cs" />
151+
<Compile Include="ScenarioTests\VirtualMachineCaptureTests.cs" />
151152
<Compile Include="ScenarioTests\VirtualMachineProfileTests.cs" />
152153
<Compile Include="ScenarioTests\AvailabilitySetTests.cs" />
153154
<Compile Include="ScenarioTests\VirtualMachineExtensionTests.cs" />
@@ -271,6 +272,9 @@
271272
<None Include="SessionRecords\Microsoft.Azure.Commands.Compute.Test.ScenarioTests.VirtualMachineTests\TestVirtualMachineList.json">
272273
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
273274
</None>
275+
<None Include="SessionRecords\Microsoft.Azure.Commands.Compute.Test.ScenarioTests.VirtualMachineTests\TestVirtualMachineCapture.json">
276+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
277+
</None>
274278
<None Include="SessionRecords\Microsoft.Azure.Commands.Compute.Test.ScenarioTests.VirtualMachineTests\TestVirtualMachinePIRv2.json">
275279
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
276280
</None>
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// ----------------------------------------------------------------------------------
2+
//
3+
// Copyright Microsoft Corporation
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
// Unless required by applicable law or agreed to in writing, software
9+
// distributed under the License is distributed on an "AS IS" BASIS,
10+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
// ----------------------------------------------------------------------------------
14+
15+
using Microsoft.WindowsAzure.Commands.ScenarioTest;
16+
using Xunit;
17+
18+
namespace Microsoft.Azure.Commands.Compute.Test.ScenarioTests
19+
{
20+
public partial class VirtualMachineTests
21+
{
22+
[Fact]
23+
[Trait(Category.AcceptanceType, Category.CheckIn)]
24+
public void TestVirtualMachineCapture()
25+
{
26+
ComputeTestController.NewInstance.RunPsTest("Test-VirtualMachineCapture");
27+
}
28+
}
29+
}

src/ResourceManager/Compute/Commands.Compute.Test/ScenarioTests/VirtualMachineTests.ps1

Lines changed: 116 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,6 @@ function Validate-VirtualMachineUsage
537537
return $valid;
538538
}
539539

540-
541540
<#
542541
.SYNOPSIS
543542
Test Virtual Machines with PIR v2
@@ -645,3 +644,119 @@ function Test-VirtualMachinePIRv2
645644
Clean-ResourceGroup $rgname
646645
}
647646
}
647+
648+
<#
649+
.SYNOPSIS
650+
Test Virtual Machines Capture
651+
#>
652+
function Test-VirtualMachineCapture
653+
{
654+
# Setup
655+
$rgname = Get-ComputeTestResourceName
656+
657+
try
658+
{
659+
# Common
660+
$loc = 'eastasia';
661+
New-AzureResourceGroup -Name $rgname -Location $loc;
662+
663+
# VM Profile & Hardware
664+
$vmsize = 'Standard_A4';
665+
$vmname = 'vm' + $rgname;
666+
$p = New-AzureVMConfig -VMName $vmname -VMSize $vmsize;
667+
Assert-AreEqual $p.HardwareProfile.VirtualMachineSize $vmsize;
668+
669+
# NRP
670+
$subnet = New-AzureVirtualNetworkSubnetConfig -Name ('subnet' + $rgname) -AddressPrefix "10.0.0.0/24";
671+
$vnet = New-AzureVirtualNetwork -Force -Name ('vnet' + $rgname) -ResourceGroupName $rgname -Location $loc -AddressPrefix "10.0.0.0/16" -DnsServer "10.1.1.1" -Subnet $subnet;
672+
$vnet = Get-AzureVirtualNetwork -Name ('vnet' + $rgname) -ResourceGroupName $rgname;
673+
$subnetId = $vnet.Subnets[0].Id;
674+
$pubip = New-AzurePublicIpAddress -Force -Name ('pubip' + $rgname) -ResourceGroupName $rgname -Location $loc -AllocationMethod Dynamic -DomainNameLabel ('pubip' + $rgname);
675+
$pubip = Get-AzurePublicIpAddress -Name ('pubip' + $rgname) -ResourceGroupName $rgname;
676+
$pubipId = $pubip.Id;
677+
$nic = New-AzureNetworkInterface -Force -Name ('nic' + $rgname) -ResourceGroupName $rgname -Location $loc -SubnetId $subnetId -PublicIpAddressId $pubip.Id;
678+
$nic = Get-AzureNetworkInterface -Name ('nic' + $rgname) -ResourceGroupName $rgname;
679+
$nicId = $nic.Id;
680+
681+
$p = Add-AzureVMNetworkInterface -VM $p -Id $nicId;
682+
Assert-AreEqual $p.NetworkProfile.NetworkInterfaces.Count 1;
683+
Assert-AreEqual $p.NetworkProfile.NetworkInterfaces[0].ReferenceUri $nicId;
684+
685+
# Storage Account (SA)
686+
$stoname = 'sto' + $rgname;
687+
$stotype = 'Standard_GRS';
688+
New-AzureStorageAccount -ResourceGroupName $rgname -Name $stoname -Location $loc -Type $stotype;
689+
$stoaccount = Get-AzureStorageAccount -ResourceGroupName $rgname -Name $stoname;
690+
691+
$osDiskName = 'osDisk';
692+
$osDiskCaching = 'ReadWrite';
693+
$osDiskVhdUri = "https://$stoname.blob.core.windows.net/test/os.vhd";
694+
$dataDiskVhdUri1 = "https://$stoname.blob.core.windows.net/test/data1.vhd";
695+
$dataDiskVhdUri2 = "https://$stoname.blob.core.windows.net/test/data2.vhd";
696+
$dataDiskVhdUri3 = "https://$stoname.blob.core.windows.net/test/data3.vhd";
697+
698+
$p = Set-AzureVMOSDisk -VM $p -Name $osDiskName -VhdUri $osDiskVhdUri -Caching $osDiskCaching -CreateOption FromImage;
699+
700+
$p = Add-AzureVMDataDisk -VM $p -Name 'testDataDisk1' -Caching 'ReadOnly' -DiskSizeInGB 10 -Lun 1 -VhdUri $dataDiskVhdUri1 -CreateOption Empty;
701+
$p = Add-AzureVMDataDisk -VM $p -Name 'testDataDisk2' -Caching 'ReadOnly' -DiskSizeInGB 11 -Lun 2 -VhdUri $dataDiskVhdUri2 -CreateOption Empty;
702+
$p = Add-AzureVMDataDisk -VM $p -Name 'testDataDisk3' -Caching 'ReadOnly' -DiskSizeInGB 12 -Lun 3 -VhdUri $dataDiskVhdUri3 -CreateOption Empty;
703+
$p = Remove-AzureVMDataDisk -VM $p -Name 'testDataDisk3';
704+
705+
Assert-AreEqual $p.StorageProfile.OSDisk.Caching $osDiskCaching;
706+
Assert-AreEqual $p.StorageProfile.OSDisk.Name $osDiskName;
707+
Assert-AreEqual $p.StorageProfile.OSDisk.VirtualHardDisk.Uri $osDiskVhdUri;
708+
Assert-AreEqual $p.StorageProfile.DataDisks.Count 2;
709+
Assert-AreEqual $p.StorageProfile.DataDisks[0].Caching 'ReadOnly';
710+
Assert-AreEqual $p.StorageProfile.DataDisks[0].DiskSizeGB 10;
711+
Assert-AreEqual $p.StorageProfile.DataDisks[0].Lun 1;
712+
Assert-AreEqual $p.StorageProfile.DataDisks[0].VirtualHardDisk.Uri $dataDiskVhdUri1;
713+
Assert-AreEqual $p.StorageProfile.DataDisks[1].Caching 'ReadOnly';
714+
Assert-AreEqual $p.StorageProfile.DataDisks[1].DiskSizeGB 11;
715+
Assert-AreEqual $p.StorageProfile.DataDisks[1].Lun 2;
716+
Assert-AreEqual $p.StorageProfile.DataDisks[1].VirtualHardDisk.Uri $dataDiskVhdUri2;
717+
718+
# OS & Image
719+
$user = "Foo12";
720+
$password = 'BaR@123' + $rgname;
721+
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force;
722+
$cred = New-Object System.Management.Automation.PSCredential ($user, $securePassword);
723+
$computerName = 'test';
724+
$vhdContainer = "https://$stoname.blob.core.windows.net/test";
725+
$img = 'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-201503.01-en.us-127GB.vhd';
726+
727+
# $p.StorageProfile.OSDisk = $null;
728+
$p = Set-AzureVMOperatingSystem -VM $p -Windows -ComputerName $computerName -Credential $cred;
729+
730+
Assert-AreEqual $p.OSProfile.AdminUsername $user;
731+
Assert-AreEqual $p.OSProfile.ComputerName $computerName;
732+
Assert-AreEqual $p.OSProfile.AdminPassword $password;
733+
734+
# Image Reference;
735+
$p.StorageProfile.SourceImage = $null;
736+
$imgRef = Get-DefaultCRPImage;
737+
$p = Set-AzureVMSourceImage -VM $p -ImageReference $imgRef;
738+
739+
# TODO: Remove Data Disks for now
740+
$p.StorageProfile.DataDisks = $null;
741+
742+
# Virtual Machine
743+
# TODO: Still need to do retry for New-AzureVM for SA, even it's returned in Get-.
744+
New-AzureVM -ResourceGroupName $rgname -Location $loc -Name $vmname -VM $p;
745+
746+
# Stop the VM before Capture
747+
Stop-AzureVM -ResourceGroupName $rgname -Name $vmname -Force;
748+
749+
Set-AzureVM -Generalize -ResourceGroupName $rgname -Name $vmname;
750+
751+
$dest = Get-ComputeTestResourceName;
752+
Save-AzureVMImage -ResourceGroupName $rgname -VMName $vmname -DestinationContainerName $dest -VHDNamePrefix 'pslib' -Overwrite;
753+
754+
# Remove
755+
Remove-AzureVM -ResourceGroupName $rgname -Name $vmname -Force;
756+
}
757+
finally
758+
{
759+
# Cleanup
760+
Clean-ResourceGroup $rgname
761+
}
762+
}

0 commit comments

Comments
 (0)