Skip to content

Commit 5dce666

Browse files
committed
update
1 parent bcfce79 commit 5dce666

File tree

6 files changed

+178
-14
lines changed

6 files changed

+178
-14
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
<Compile Include="ScenarioTests\VirtualMachineExtensionTests.cs" />
154154
<Compile Include="ScenarioTests\VirtualMachineNetworkInterfaceTests.cs" />
155155
<Compile Include="ScenarioTests\TestVirtualMachineSizeAndUsage.cs" />
156+
<Compile Include="ScenarioTests\VirtualMachinePIRv2Tests.cs" />
156157
<Compile Include="ScenarioTests\VirtualMachineTests.cs" />
157158
<Compile Include="Properties\Resources.Designer.cs">
158159
<AutoGen>True</AutoGen>

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ function Get-DefaultCRPImage
150150
{
151151
param([string] $loca = "eastasia", [string] $query = '*Microsoft*Windows*Server')
152152

153-
$result = (Get-AzureVMImagePublisher -Location $loc).Resources | select -ExpandProperty Name | where { $_ -like $query };
153+
$result = (Get-AzureVMImagePublisher -Location $loc) | select -ExpandProperty PublisherName | where { $_ -like $query };
154154
if ($result.Count -eq 1)
155155
{
156156
$defaultPublisher = $result;
@@ -160,7 +160,7 @@ function Get-DefaultCRPImage
160160
$defaultPublisher = $result[0];
161161
}
162162

163-
$result = (Get-AzureVMImageOffer -Location $loc -PublisherName $defaultPublisher).Resources | select -ExpandProperty Name | where { $_ -like '*Windows*' };
163+
$result = (Get-AzureVMImageOffer -Location $loc -PublisherName $defaultPublisher) | select -ExpandProperty Offer | where { $_ -like '*Windows*' };
164164
if ($result.Count -eq 1)
165165
{
166166
$defaultOffer = $result;
@@ -170,7 +170,7 @@ function Get-DefaultCRPImage
170170
$defaultOffer = $result[0];
171171
}
172172

173-
$result = (Get-AzureVMImageSku -Location $loc -PublisherName $defaultPublisher -Offer $defaultOffer).Resources | select -ExpandProperty Name;
173+
$result = (Get-AzureVMImageSku -Location $loc -PublisherName $defaultPublisher -Offer $defaultOffer) | select -ExpandProperty Skus;
174174
if ($result.Count -eq 1)
175175
{
176176
$defaultSku = $result;
@@ -180,7 +180,7 @@ function Get-DefaultCRPImage
180180
$defaultSku = $result[0];
181181
}
182182

183-
$result = (Get-AzureVMImage -Location $loc -Offer $defaultOffer -PublisherName $defaultPublisher -Skus $defaultSku).Resources | select -ExpandProperty Name;
183+
$result = (Get-AzureVMImageVersion -Location $loc -Offer $defaultOffer -PublisherName $defaultPublisher -Skus $defaultSku) | select -ExpandProperty Version;
184184
if ($result.Count -eq 1)
185185
{
186186
$defaultVersion = $result;
@@ -190,7 +190,7 @@ function Get-DefaultCRPImage
190190
$defaultVersion = $result[0];
191191
}
192192

193-
$vmimg = (Get-AzureVMImage -Location $loc -Offer $defaultOffer -PublisherName $defaultPublisher -Skus $defaultSku -Version $defaultVersion).VirtualMachineImage;
193+
$vmimg = Get-AzureVMImage -Location $loc -Offer $defaultOffer -PublisherName $defaultPublisher -Skus $defaultSku -Version $defaultVersion;
194194

195195
return $vmimg;
196196
}
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(Skip = "TODO: Record")]
23+
[Trait(Category.AcceptanceType, Category.CheckIn)]
24+
public void TestVirtualMachinePIRv2()
25+
{
26+
ComputeTestController.NewInstance.RunPsTest("Test-VirtualMachinePIRv2");
27+
}
28+
}
29+
}

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

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,3 +536,112 @@ function Validate-VirtualMachineUsage
536536

537537
return $valid;
538538
}
539+
540+
541+
<#
542+
.SYNOPSIS
543+
Test Virtual Machines with PIR v2
544+
#>
545+
function Test-VirtualMachinePIRv2
546+
{
547+
# Setup
548+
$rgname = Get-ComputeTestResourceName
549+
550+
try
551+
{
552+
# Common
553+
$loc = 'eastasia';
554+
New-AzureResourceGroup -Name $rgname -Location $loc;
555+
556+
# VM Profile & Hardware
557+
$vmsize = 'Standard_A4';
558+
$vmname = 'vm' + $rgname;
559+
$p = New-AzureVMConfig -VMName $vmname -VMSize $vmsize;
560+
Assert-AreEqual $p.HardwareProfile.VirtualMachineSize $vmsize;
561+
562+
# NRP
563+
$subnet = New-AzureVirtualNetworkSubnetConfig -Name ('subnet' + $rgname) -AddressPrefix "10.0.0.0/24";
564+
$vnet = New-AzureVirtualNetwork -Force -Name ('vnet' + $rgname) -ResourceGroupName $rgname -Location $loc -AddressPrefix "10.0.0.0/16" -DnsServer "10.1.1.1" -Subnet $subnet;
565+
$vnet = Get-AzureVirtualNetwork -Name ('vnet' + $rgname) -ResourceGroupName $rgname;
566+
$subnetId = $vnet.Subnets[0].Id;
567+
$pubip = New-AzurePublicIpAddress -Force -Name ('pubip' + $rgname) -ResourceGroupName $rgname -Location $loc -AllocationMethod Dynamic -DomainNameLabel ('pubip' + $rgname);
568+
$pubip = Get-AzurePublicIpAddress -Name ('pubip' + $rgname) -ResourceGroupName $rgname;
569+
$pubipId = $pubip.Id;
570+
$nic = New-AzureNetworkInterface -Force -Name ('nic' + $rgname) -ResourceGroupName $rgname -Location $loc -SubnetId $subnetId -PublicIpAddressId $pubip.Id;
571+
$nic = Get-AzureNetworkInterface -Name ('nic' + $rgname) -ResourceGroupName $rgname;
572+
$nicId = $nic.Id;
573+
574+
$p = Add-AzureVMNetworkInterface -VM $p -Id $nicId;
575+
Assert-AreEqual $p.NetworkProfile.NetworkInterfaces.Count 1;
576+
Assert-AreEqual $p.NetworkProfile.NetworkInterfaces[0].ReferenceUri $nicId;
577+
578+
# Storage Account (SA)
579+
$stoname = 'sto' + $rgname;
580+
$stotype = 'Standard_GRS';
581+
New-AzureStorageAccount -ResourceGroupName $rgname -Name $stoname -Location $loc -Type $stotype;
582+
$stoaccount = Get-AzureStorageAccount -ResourceGroupName $rgname -Name $stoname;
583+
584+
$osDiskName = 'osDisk';
585+
$osDiskCaching = 'ReadWrite';
586+
$osDiskVhdUri = "https://$stoname.blob.core.windows.net/test/os.vhd";
587+
$dataDiskVhdUri1 = "https://$stoname.blob.core.windows.net/test/data1.vhd";
588+
$dataDiskVhdUri2 = "https://$stoname.blob.core.windows.net/test/data2.vhd";
589+
$dataDiskVhdUri3 = "https://$stoname.blob.core.windows.net/test/data3.vhd";
590+
591+
$p = Set-AzureVMOSDisk -VM $p -Name $osDiskName -VhdUri $osDiskVhdUri -Caching $osDiskCaching -CreateOption FromImage;
592+
593+
$p = Add-AzureVMDataDisk -VM $p -Name 'testDataDisk1' -Caching 'ReadOnly' -DiskSizeInGB 10 -Lun 1 -VhdUri $dataDiskVhdUri1 -CreateOption Empty;
594+
$p = Add-AzureVMDataDisk -VM $p -Name 'testDataDisk2' -Caching 'ReadOnly' -DiskSizeInGB 11 -Lun 2 -VhdUri $dataDiskVhdUri2 -CreateOption Empty;
595+
$p = Add-AzureVMDataDisk -VM $p -Name 'testDataDisk3' -Caching 'ReadOnly' -DiskSizeInGB 12 -Lun 3 -VhdUri $dataDiskVhdUri3 -CreateOption Empty;
596+
$p = Remove-AzureVMDataDisk -VM $p -Name 'testDataDisk3';
597+
598+
Assert-AreEqual $p.StorageProfile.OSDisk.Caching $osDiskCaching;
599+
Assert-AreEqual $p.StorageProfile.OSDisk.Name $osDiskName;
600+
Assert-AreEqual $p.StorageProfile.OSDisk.VirtualHardDisk.Uri $osDiskVhdUri;
601+
Assert-AreEqual $p.StorageProfile.DataDisks.Count 2;
602+
Assert-AreEqual $p.StorageProfile.DataDisks[0].Caching 'ReadOnly';
603+
Assert-AreEqual $p.StorageProfile.DataDisks[0].DiskSizeGB 10;
604+
Assert-AreEqual $p.StorageProfile.DataDisks[0].Lun 1;
605+
Assert-AreEqual $p.StorageProfile.DataDisks[0].VirtualHardDisk.Uri $dataDiskVhdUri1;
606+
Assert-AreEqual $p.StorageProfile.DataDisks[1].Caching 'ReadOnly';
607+
Assert-AreEqual $p.StorageProfile.DataDisks[1].DiskSizeGB 11;
608+
Assert-AreEqual $p.StorageProfile.DataDisks[1].Lun 2;
609+
Assert-AreEqual $p.StorageProfile.DataDisks[1].VirtualHardDisk.Uri $dataDiskVhdUri2;
610+
611+
# OS & Image
612+
$user = "Foo12";
613+
$password = 'BaR@123' + $rgname;
614+
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force;
615+
$cred = New-Object System.Management.Automation.PSCredential ($user, $securePassword);
616+
$computerName = 'test';
617+
$vhdContainer = "https://$stoname.blob.core.windows.net/test";
618+
$img = 'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-201503.01-en.us-127GB.vhd';
619+
620+
# $p.StorageProfile.OSDisk = $null;
621+
$p = Set-AzureVMOperatingSystem -VM $p -Windows -ComputerName $computerName -Credential $cred;
622+
623+
Assert-AreEqual $p.OSProfile.AdminUsername $user;
624+
Assert-AreEqual $p.OSProfile.ComputerName $computerName;
625+
Assert-AreEqual $p.OSProfile.AdminPassword $password;
626+
627+
# Image Reference;
628+
$p.StorageProfile.SourceImage = $null;
629+
$imgRef = Get-DefaultCRPImage;
630+
$p = Set-AzureVMSourceImage -VM $p -ImageReference $imgRef;
631+
632+
# TODO: Remove Data Disks for now
633+
$p.StorageProfile.DataDisks = $null;
634+
635+
# Virtual Machine
636+
# TODO: Still need to do retry for New-AzureVM for SA, even it's returned in Get-.
637+
New-AzureVM -ResourceGroupName $rgname -Location $loc -Name $vmname -VM $p;
638+
639+
# Remove
640+
Remove-AzureVM -Name $vmname2 -ResourceGroupName $rgname -Force;
641+
}
642+
finally
643+
{
644+
# Cleanup
645+
Clean-ResourceGroup $rgname
646+
}
647+
}

src/ResourceManager/Compute/Commands.Compute/Common/ConstantStringTypes.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public static class HelpMessages
2121
public const string VMComputerName = "The virtual machine's omputer name.";
2222
public const string VMCredential = "The virtual machine's credential.";
2323
public const string VMSourceImageName = "The virtual machine's source image name.";
24+
public const string VMImageReference = "The virtual machine's image reference.";
2425
public const string VMVHDContainer = "The virtual machine's Vhd container.";
2526
public const string VMOSDiskName = "The virtual machine OS disk's name.";
2627
public const string VMOSDiskVhdUri = "The virtual machine OS disk's Vhd Uri.";

src/ResourceManager/Compute/Commands.Compute/VirtualMachine/Config/SetAzureVMSourceImage.cs

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@
2222

2323
namespace Microsoft.Azure.Commands.Compute
2424
{
25-
[Cmdlet(
26-
VerbsCommon.Set,
27-
ProfileNouns.SourceImage),
28-
OutputType(
29-
typeof(PSVirtualMachine))]
25+
[Cmdlet(VerbsCommon.Set, ProfileNouns.SourceImage, DefaultParameterSetName = ImageReferenceParameterSet),
26+
OutputType(typeof(PSVirtualMachine))]
3027
public class SetAzureVMSourceImageCommand : AzurePSCmdlet
3128
{
29+
protected const string ImageReferenceParameterSet = "ImageReferenceParameterSet";
30+
protected const string SourceImageParameterSet = "SourceImageParameterSet";
31+
3232
[Alias("VMProfile")]
3333
[Parameter(
3434
Mandatory = true,
@@ -41,12 +41,23 @@ public class SetAzureVMSourceImageCommand : AzurePSCmdlet
4141

4242
[Alias("SourceImageName", "ImageName")]
4343
[Parameter(
44+
ParameterSetName = SourceImageParameterSet,
4445
Mandatory = true,
4546
Position = 1,
4647
ValueFromPipelineByPropertyName = true,
4748
HelpMessage = HelpMessages.VMSourceImageName)]
4849
[ValidateNotNullOrEmpty]
4950
public string Name { get; set; }
51+
52+
[Alias("ImageConfig", "Image")]
53+
[Parameter(
54+
ParameterSetName = ImageReferenceParameterSet,
55+
Mandatory = true,
56+
Position = 1,
57+
ValueFromPipelineByPropertyName = true,
58+
HelpMessage = HelpMessages.VMImageReference)]
59+
[ValidateNotNullOrEmpty]
60+
public PSVirtualMachineImage ImageReference { get; set; }
5061

5162
public override void ExecuteCmdlet()
5263
{
@@ -55,11 +66,24 @@ public override void ExecuteCmdlet()
5566
this.VM.StorageProfile = new StorageProfile();
5667
}
5768

58-
this.VM.StorageProfile.SourceImage = string.IsNullOrEmpty(this.Name) ? null :
59-
new SourceImageReference
69+
if (this.ParameterSetName == SourceImageParameterSet)
70+
{
71+
this.VM.StorageProfile.SourceImage = string.IsNullOrEmpty(this.Name) ? null :
72+
new SourceImageReference
73+
{
74+
ReferenceUri = this.Name
75+
}.Normalize(this.Profile.Context.Subscription.Id.ToString());
76+
}
77+
else if (this.ParameterSetName == ImageReferenceParameterSet)
78+
{
79+
this.VM.StorageProfile.ImageReference = new ImageReference
6080
{
61-
ReferenceUri = this.Name
62-
}.Normalize(this.Profile.Context.Subscription.Id.ToString());
81+
Publisher = ImageReference.PublisherName,
82+
Offer = ImageReference.Offer,
83+
Sku = ImageReference.Skus,
84+
Version = ImageReference.Version
85+
};
86+
}
6387

6488
WriteObject(this.VM);
6589
}

0 commit comments

Comments
 (0)