Skip to content

Commit a4c06f9

Browse files
author
Sudhakara Reddy Evuri
committed
Set the extension default Name, add tests
1 parent 3c43e22 commit a4c06f9

File tree

4 files changed

+123
-126
lines changed

4 files changed

+123
-126
lines changed

src/ResourceManager/Compute/Commands.Compute.Test/ScenarioTests/VirtualMachineExtensionTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ public void TestVirtualMachineAccessExtension()
5454
ComputeTestController.NewInstance.RunPsTest("Test-VirtualMachineAccessExtension");
5555
}
5656

57-
[Fact]
58-
[Trait(Category.AcceptanceType, Category.CheckIn)]
57+
[Fact(Skip = "TODO: only works for live mode")]
58+
[Trait(Category.RunType, Category.LiveOnly)]
5959
public void TestAzureDiskEncryptionExtension()
6060
{
6161
ComputeTestController.NewInstance.RunPsTest("Test-AzureDiskEncryptionExtension");

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

Lines changed: 83 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -797,139 +797,120 @@ Test AzureDiskEncryption extension
797797
#>
798798
function Test-AzureDiskEncryptionExtension
799799
{
800-
# Setup
801-
$rgname = Get-ComputeTestResourceName
800+
# This test should be run in Live mode only not in Playback mode
801+
#Pre-requisites to be filled in before running this test. The AAD app should belong to the directory as the user running the test.
802+
$aadClientID = "";
803+
$aadClientSecret = "";
804+
#Fill in VM admin user and password
805+
$adminUser = "";
806+
$adminPassword = "";
807+
808+
#Resource group variables
809+
$rgName = "detestrg";
810+
$loc = "South Central US";
811+
812+
#KeyVault config variables
813+
$vaultName = "detestvault";
814+
$kekName = "dstestkek";
815+
816+
#VM config variables
817+
$vmName = "detestvm";
818+
$vmsize = 'Standard_D2';
819+
$imagePublisher = "MicrosoftWindowsServer";
820+
$imageOffer = "WindowsServer";
821+
$imageSku ="2012-R2-Datacenter";
822+
823+
#Storage config variables
824+
$storageAccountName = "deteststore";
825+
$stotype = 'Standard_LRS';
826+
$vhdContainerName = "vhds";
827+
$osDiskName = 'osdisk' + $vmName;
828+
$dataDiskName = 'datadisk' + $vmName;
829+
$osDiskCaching = 'ReadWrite';
830+
831+
#Network config variables
832+
$vnetName = "detestvnet";
833+
$subnetName = "detestsubnet";
834+
$publicIpName = 'pubip' + $vmName;
835+
$nicName = 'nic' + $vmName;
836+
837+
838+
#Disk encryption variables
839+
$keyEncryptionAlgorithm = "RSA-OAEP";
840+
$volumeType = "All";
802841

803842
try
804843
{
805-
# Common
806-
$loc = "South Central US";
844+
Login-AzureRmAccount;
845+
# Create new resource group
807846
New-AzureRmResourceGroup -Name $rgname -Location $loc -Force;
808847

809-
# VM Profile & Hardware
810-
$vmsize = 'Standard_D2';
811-
$vmname = 'vm' + $rgname;
848+
# Create new KeyVault
849+
$keyVault = New-AzureRmKeyVault -VaultName $vaultName -ResourceGroupName $rgname -Location $loc -Sku standard;
850+
$keyVault = Get-AzureRmKeyVault -VaultName $vaultName -ResourceGroupName $rgname
851+
#set enabledForDiskEncryption
852+
Write-Host 'Press go to https://resources.azure.com and set enabledForDiskEncryption flag on KeyVault. [ENTER] to continue or [CTRL-C] to abort...'
853+
Read-Host
854+
#set permissions to AAD app to write secrets and keys
855+
Set-AzureRmKeyVaultAccessPolicy -VaultName $vaultName -ServicePrincipalName $aadClientID -PermissionsToKeys all -PermissionsToSecrets all
856+
#create a key in KeyVault to use as Kek
857+
$kek = Add-AzureKeyVaultKey -VaultName $vaultName -Name $kekName -Destination "Software"
858+
859+
$diskEncryptionKeyVaultUrl = $keyVault.VaultUri;
860+
$keyVaultResourceId = $keyVault.ResourceId;
861+
$keyEncryptionKeyUrl = $kek.Key.kid;
862+
863+
# VM Profile & Hardware
812864
$p = New-AzureRmVMConfig -VMName $vmname -VMSize $vmsize;
813-
Assert-AreEqual $p.HardwareProfile.VirtualMachineSize $vmsize;
814865

815866
# NRP
816-
$subnet = New-AzureRmVirtualNetworkSubnetConfig -Name ('subnet' + $rgname) -AddressPrefix "10.0.0.0/24";
817-
$vnet = New-AzureRmVirtualNetwork -Force -Name ('vnet' + $rgname) -ResourceGroupName $rgname -Location $loc -AddressPrefix "10.0.0.0/16" -DnsServer "10.1.1.1" -Subnet $subnet;
818-
$vnet = Get-AzureRmVirtualNetwork -Name ('vnet' + $rgname) -ResourceGroupName $rgname;
867+
$subnet = New-AzureRmVirtualNetworkSubnetConfig -Name ($subnetName) -AddressPrefix "10.0.0.0/24";
868+
$vnet = New-AzureRmVirtualNetwork -Force -Name ($vnetName) -ResourceGroupName $rgname -Location $loc -AddressPrefix "10.0.0.0/16" -Subnet $subnet;
869+
$vnet = Get-AzureRmVirtualNetwork -Name ($vnetName) -ResourceGroupName $rgname;
819870
$subnetId = $vnet.Subnets[0].Id;
820-
$pubip = New-AzureRmPublicIpAddress -Force -Name ('pubip' + $rgname) -ResourceGroupName $rgname -Location $loc -AllocationMethod Dynamic -DomainNameLabel ('pubip' + $rgname);
821-
$pubip = Get-AzureRmPublicIpAddress -Name ('pubip' + $rgname) -ResourceGroupName $rgname;
871+
$pubip = New-AzureRmPublicIpAddress -Force -Name ($publicIpName) -ResourceGroupName $rgname -Location $loc -AllocationMethod Dynamic -DomainNameLabel ($publicIpName);
872+
$pubip = Get-AzureRmPublicIpAddress -Name ($publicIpName) -ResourceGroupName $rgname;
822873
$pubipId = $pubip.Id;
823-
$nic = New-AzureRmNetworkInterface -Force -Name ('nic' + $rgname) -ResourceGroupName $rgname -Location $loc -SubnetId $subnetId -PublicIpAddressId $pubip.Id;
824-
$nic = Get-AzureRmNetworkInterface -Name ('nic' + $rgname) -ResourceGroupName $rgname;
874+
$nic = New-AzureRmNetworkInterface -Force -Name ($nicName) -ResourceGroupName $rgname -Location $loc -SubnetId $subnetId -PublicIpAddressId $pubip.Id;
875+
$nic = Get-AzureRmNetworkInterface -Name ($nicName) -ResourceGroupName $rgname;
825876
$nicId = $nic.Id;
826877

827878
$p = Add-AzureRmVMNetworkInterface -VM $p -Id $nicId;
828-
Assert-AreEqual $p.NetworkProfile.NetworkInterfaces.Count 1;
829-
Assert-AreEqual $p.NetworkProfile.NetworkInterfaces[0].ReferenceUri $nicId;
830879

831880
# Storage Account (SA)
832-
$stoname = 'sto' + $rgname;
833-
$stotype = 'Standard_LRS';
834-
New-AzureRmStorageAccount -ResourceGroupName $rgname -Name $stoname -Location $loc -Type $stotype;
835-
Retry-IfException { $global:stoaccount = Get-AzureRmStorageAccount -ResourceGroupName $rgname -Name $stoname; }
836-
$stokey = (Get-AzureRmStorageAccountKey -ResourceGroupName $rgname -Name $stoname).Key1;
881+
New-AzureRmStorageAccount -ResourceGroupName $rgname -Name $storageAccountName -Location $loc -Type $stotype;
882+
$stokey = (Get-AzureRmStorageAccountKey -ResourceGroupName $rgname -Name $storageAccountName).Key1;
837883

838-
$osDiskName = 'osDisk';
839-
$osDiskCaching = 'ReadWrite';
840-
$osDiskVhdUri = "https://$stoname.blob.core.windows.net/test/os.vhd";
841-
$dataDiskVhdUri1 = "https://$stoname.blob.core.windows.net/test/data1.vhd";
842-
$dataDiskVhdUri2 = "https://$stoname.blob.core.windows.net/test/data2.vhd";
884+
$osDiskVhdUri = "https://$storageAccountName.blob.core.windows.net/$vhdContainerName/$osDiskName.vhd";
885+
$dataDiskVhdUri = "https://$storageAccountName.blob.core.windows.net/$vhdContainerName/$dataDiskName.vhd";
843886

844887
$p = Set-AzureRmVMOSDisk -VM $p -Name $osDiskName -VhdUri $osDiskVhdUri -Caching $osDiskCaching -CreateOption FromImage;
845-
846-
$p = Add-AzureRmVMDataDisk -VM $p -Name 'testDataDisk1' -Caching 'ReadOnly' -DiskSizeInGB 10 -Lun 1 -VhdUri $dataDiskVhdUri1 -CreateOption Empty;
847-
$p = Add-AzureRmVMDataDisk -VM $p -Name 'testDataDisk2' -Caching 'ReadOnly' -DiskSizeInGB 11 -Lun 2 -VhdUri $dataDiskVhdUri2 -CreateOption Empty;
888+
$p = Add-AzureRmVMDataDisk -VM $p -Name $dataDiskName -Caching 'ReadOnly' -DiskSizeInGB 2 -Lun 1 -VhdUri $dataDiskVhdUri -CreateOption Empty;
848889

849890
# OS & Image
850-
$user = "rdtest";
851-
$password = 'rdPa$$w0rd';
852-
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force;
853-
$cred = New-Object System.Management.Automation.PSCredential ($user, $securePassword);
854-
$computerName = $vmname;
855-
$vhdContainer = "https://$stoname.blob.core.windows.net/test";
891+
$securePassword = ConvertTo-SecureString $adminPassword -AsPlainText -Force;
892+
$cred = New-Object System.Management.Automation.PSCredential ($adminUser, $securePassword);
893+
$computerName = $vmName;
894+
$vhdContainer = "https://$storageAccountName.blob.core.windows.net/$vhdContainerName";
856895

857896
$p = Set-AzureRmVMOperatingSystem -VM $p -Windows -ComputerName $computerName -Credential $cred -ProvisionVMAgent;
897+
$p = Set-AzureRmVMSourceImage -VM $p -PublisherName $imagePublisher -Offer $imageOffer -Skus $imageSku -Version "latest";
858898

859-
$imgRef = Get-DefaultCRPWindowsImageOffline;
860-
$p = ($imgRef | Set-AzureRmVMSourceImage -VM $p);
861-
862-
Assert-AreEqual $p.OSProfile.AdminUsername $user;
863-
Assert-AreEqual $p.OSProfile.ComputerName $computerName;
864-
Assert-AreEqual $p.OSProfile.AdminPassword $password;
865-
Assert-AreEqual $p.OSProfile.WindowsConfiguration.ProvisionVMAgent $true;
866899

867900
# Virtual Machine
868-
# TODO: Still need to do retry for New-AzureRmVM for SA, even it's returned in Get-.
869901
New-AzureRmVM -ResourceGroupName $rgname -Location $loc -VM $p;
870902

871-
# Virtual Machine Extension
872-
$extname = 'ADETestExtension';
873-
$extver = '1.2';
874-
$user2 = "Bar12";
875-
$password2 = 'FoO@123' + $rgname;
876-
$aadClientID = '97f847ef-9e1e-4c7c-9ae7-1c0f7c78f761';
877-
$aadClientSecret = '';
878-
$diskEncryptionKeyVaultUrl = 'https://sureddvaultsc2.vault.azure.net'
879-
$diskEncryptionKeyVaultId = '/subscriptions/0ee9d577-9bc4-4a32-a4e8-c29981025378/resourceGroups/sureddrgsc2/providers/Microsoft.KeyVault/vaults/sureddvaultsc2';
880-
$volumeType = 'All';
881-
882-
# Set custom script extension
883-
Set-AzureRmVMDiskEncryptionExtension -ResourceGroupName $rgname -Location $loc -VMName $vmname -Name $extname -TypeHandlerVersion $extver -AadClientID $aadClientID -AadClientSecret $aadClientSecret -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $diskEncryptionKeyVaultId -VolumeType $volumeType;
884-
885-
$publisher = 'Microsoft.Azure.Security';
886-
$exttype = 'ADETest';
887-
888-
# Get VM Extension
889-
$ext = Get-AzureRmVMAccessExtension -ResourceGroupName $rgname -VMName $vmname -Name $extname;
890-
Assert-AreEqual $ext.ResourceGroupName $rgname;
891-
Assert-AreEqual $ext.Name $extname;
892-
Assert-AreEqual $ext.Publisher $publisher;
893-
Assert-AreEqual $ext.ExtensionType $exttype;
894-
Assert-AreEqual $ext.TypeHandlerVersion $extver;
895-
#Assert-AreEqual $ext.UserName $user2;
896-
Assert-NotNull $ext.ProvisioningState;
897-
#Assert-True {$ext.PublicSettings.Contains("UserName")};
898-
899-
$ext = Get-AzureRmVMAccessExtension -ResourceGroupName $rgname -VMName $vmname -Name $extname -Status;
900-
Assert-AreEqual $ext.ResourceGroupName $rgname;
901-
Assert-AreEqual $ext.Name $extname;
902-
Assert-AreEqual $ext.Publisher $publisher;
903-
Assert-AreEqual $ext.ExtensionType $exttype;
904-
Assert-AreEqual $ext.TypeHandlerVersion $extver;
905-
Assert-NotNull $ext.ProvisioningState;
906-
Assert-NotNull $ext.Statuses;
907-
#Assert-True {$ext.PublicSettings.Contains("UserName")};
908-
Assert-NotNull $ext.Statuses[0].Message;
909-
910-
# Get VM
911-
$vm1 = Get-AzureRmVM -Name $vmname -ResourceGroupName $rgname;
912-
Assert-AreEqual $vm1.Name $vmname;
913-
Assert-AreEqual $vm1.NetworkProfile.NetworkInterfaces.Count 1;
914-
Assert-AreEqual $vm1.NetworkProfile.NetworkInterfaces[0].ReferenceUri $nicId;
915-
916-
Assert-AreEqual $vm1.OSProfile.AdminUsername $user;
917-
Assert-AreEqual $vm1.OSProfile.ComputerName $computerName;
918-
Assert-AreEqual $vm1.HardwareProfile.VirtualMachineSize $vmsize;
919-
920-
# Check Extensions in VM
921-
Assert-AreEqual $vm1.Extensions.Count 1;
922-
Assert-AreEqual $vm1.Extensions[0].Name $extname;
923-
Assert-AreEqual $vm1.Extensions[0].Type 'Microsoft.Compute/virtualMachines/extensions';
924-
Assert-AreEqual $vm1.Extensions[0].Publisher $publisher;
925-
Assert-AreEqual $vm1.Extensions[0].ExtensionType $exttype;
926-
Assert-AreEqual $vm1.Extensions[0].TypeHandlerVersion $extver;
927-
Assert-NotNull $vm1.Extensions[0].Settings;
903+
#Enable encryption on the VM
904+
Set-AzureRmVMDiskEncryptionExtension -ResourceGroupName $rgname -VMName $vmName -AadClientID $aadClientID -AadClientSecret $aadClientSecret -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $keyVaultResourceId -KeyEncryptionKeyUrl $keyEncryptionKeyUrl -KeyEncryptionKeyVaultId $keyVaultResourceId -Force;
905+
#Get encryption status
906+
$encryptionStatus = Get-AzureRmVmDiskEncryptionStatus -ResourceGroupName $rgname -VMName $vmName;
907+
#Remove AzureDiskEncryption extension
908+
Remove-AzureRmVMDiskEncryptionExtension -ResourceGroupName $rgname -VMName $vmName;
928909

929910
}
930911
finally
931912
{
932913
# Cleanup
933-
Clean-ResourceGroup $rgname
914+
Remove-AzureRmResourceGroup -Name $rgname -Force;
934915
}
935916
}

src/ResourceManager/Compute/Commands.Compute/Extension/AzureDiskEncryption/RemoveAzureDiskEncryptionExtension.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414

1515
using Microsoft.Azure.Commands.Compute.Common;
1616
using Microsoft.Azure.Management.Compute;
17+
using Microsoft.Azure.Management.Compute.Models;
1718
using System.Management.Automation;
19+
using System;
1820

1921
namespace Microsoft.Azure.Commands.Compute.Extension.AzureDiskEncryption
2022
{
@@ -42,10 +44,10 @@ public class RemoveAzureDiskEncryptionExtensionCommand : VirtualMachineExtension
4244

4345
[Alias("ExtensionName")]
4446
[Parameter(
45-
Mandatory = true,
47+
Mandatory = false,
4648
Position = 2,
4749
ValueFromPipelineByPropertyName = true,
48-
HelpMessage = "The extension name.")]
50+
HelpMessage = "The extension name. If this parameter is not specified, default values used are AzureDiskEncryption for windows VMs and AzureDiskEncryptionForLinux for Linux VMs")]
4951
[ValidateNotNullOrEmpty]
5052
public string Name { get; set; }
5153

@@ -59,6 +61,18 @@ protected override void ProcessRecord()
5961

6062
ExecuteClientAction(() =>
6163
{
64+
VirtualMachine virtualMachineResponse = (this.ComputeClient.ComputeManagementClient.VirtualMachines.Get(this.ResourceGroupName, this.VMName)).VirtualMachine;
65+
66+
string currentOSType = virtualMachineResponse.StorageProfile.OSDisk.OperatingSystemType;
67+
if (string.Equals(currentOSType, "Windows", StringComparison.InvariantCultureIgnoreCase))
68+
{
69+
this.Name = this.Name ?? AzureDiskEncryptionExtensionContext.ExtensionDefaultName;
70+
}
71+
else if (string.Equals(currentOSType, "Linux", StringComparison.InvariantCultureIgnoreCase))
72+
{
73+
this.Name = this.Name ?? AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultName;
74+
}
75+
6276
if (this.Force.IsPresent
6377
|| this.ShouldContinue(Properties.Resources.VirtualMachineExtensionRemovalConfirmation, Properties.Resources.VirtualMachineExtensionRemovalCaption))
6478
{

0 commit comments

Comments
 (0)