Skip to content

Commit 930cadb

Browse files
author
Kamran Khan
committed
Use QueryEncryptionStatus operation for Linux VMs
1 parent 3be1bc1 commit 930cadb

File tree

2 files changed

+71
-1
lines changed

2 files changed

+71
-1
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public static class AzureDiskEncryptionExtensionConstants
2323
public const string aadClientSecretParameterSet = "AAD Client Secret Parameters";
2424
public const string enableEncryptionOperation = "EnableEncryption";
2525
public const string disableEncryptionOperation = "DisableEncryption";
26+
public const string queryEncryptionStatusOperation = "QueryEncryptionStatus";
2627
public const string aadClientIDKey = "AADClientID";
2728
public const string aadClientSecretKey = "AADClientSecret";
2829
public const string aadClientCertThumbprintKey = "AADClientCertThumbprint";

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

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using Microsoft.Azure.Management.Compute.Models;
1919
using Microsoft.Rest.Azure;
2020
using System;
21+
using System.Collections;
2122
using System.Globalization;
2223
using System.Management.Automation;
2324

@@ -54,6 +55,54 @@ public class GetAzureDiskEncryptionStatusCommand : VirtualMachineExtensionBaseCm
5455
HelpMessage = "The extension name. If this parameter is not specified, default values used are AzureDiskEncryption for windows VMs and AzureDiskEncryptionForLinux for Linux VMs")]
5556
[ValidateNotNullOrEmpty]
5657
public string Name { get; set; }
58+
59+
private VirtualMachineExtension GetVmExtensionParameters(VirtualMachine vmParameters, OSType currentOSType)
60+
{
61+
Hashtable publicSettings = new Hashtable();
62+
Hashtable protectedSettings = new Hashtable();
63+
64+
publicSettings.Add(AzureDiskEncryptionExtensionConstants.encryptionOperationKey, AzureDiskEncryptionExtensionConstants.queryEncryptionStatusOperation);
65+
publicSettings.Add(AzureDiskEncryptionExtensionConstants.sequenceVersionKey, Guid.NewGuid().ToString());
66+
67+
if (vmParameters == null)
68+
{
69+
ThrowTerminatingError(new ErrorRecord(new ApplicationException(string.Format(CultureInfo.CurrentUICulture, "Get-AzureDiskEncryptionExtension can enable encryption only on a VM that was already created ")),
70+
"InvalidResult",
71+
ErrorCategory.InvalidResult,
72+
null));
73+
}
74+
75+
VirtualMachineExtension vmExtensionParameters = null;
76+
77+
if (OperatingSystemTypes.Windows.Equals(currentOSType))
78+
{
79+
this.Name = this.Name ?? AzureDiskEncryptionExtensionContext.ExtensionDefaultName;
80+
vmExtensionParameters = new VirtualMachineExtension
81+
{
82+
Location = vmParameters.Location,
83+
Publisher = AzureDiskEncryptionExtensionContext.ExtensionDefaultPublisher,
84+
VirtualMachineExtensionType = this.Name,
85+
TypeHandlerVersion = AzureDiskEncryptionExtensionContext.ExtensionDefaultVersion,
86+
Settings = publicSettings,
87+
ProtectedSettings = protectedSettings
88+
};
89+
}
90+
else if (OperatingSystemTypes.Linux.Equals(currentOSType))
91+
{
92+
this.Name = this.Name ?? AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultName;
93+
vmExtensionParameters = new VirtualMachineExtension
94+
{
95+
Location = vmParameters.Location,
96+
Publisher = AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultPublisher,
97+
VirtualMachineExtensionType = this.Name,
98+
TypeHandlerVersion = AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultVersion,
99+
Settings = publicSettings,
100+
ProtectedSettings = protectedSettings
101+
};
102+
}
103+
104+
return vmExtensionParameters;
105+
}
57106

58107
private string GetExtensionStatusMessage(OSType currentOSType)
59108
{
@@ -284,13 +333,33 @@ public override void ExecuteCmdlet()
284333
EncryptionStatus osVolumeEncrypted = IsOsVolumeEncrypted(vmParameters);
285334
DiskEncryptionSettings osVolumeEncryptionSettings = GetOsVolumeEncryptionSettings(vmParameters);
286335
EncryptionStatus dataVolumesEncrypted = AreDataVolumesEncrypted(vmParameters);
336+
AzureDiskEncryptionStatusContext encryptionStatus = null;
287337

288338
OSType osType = GetOSType(vmParameters);
289339
switch (osType)
290340
{
291341
case OSType.Windows:
342+
encryptionStatus = new AzureDiskEncryptionStatusContext
343+
{
344+
OsVolumeEncrypted = osVolumeEncrypted,
345+
DataVolumesEncrypted = dataVolumesEncrypted,
346+
OsVolumeEncryptionSettings = osVolumeEncryptionSettings,
347+
ProgressMessage = GetExtensionStatusMessage(osType)
348+
};
349+
WriteObject(encryptionStatus);
350+
break;
292351
case OSType.Linux:
293-
AzureDiskEncryptionStatusContext encryptionStatus = new AzureDiskEncryptionStatusContext
352+
VirtualMachine virtualMachineResponse = this.ComputeClient.ComputeManagementClient.VirtualMachines.GetWithInstanceView(
353+
this.ResourceGroupName, VMName).Body;
354+
VirtualMachineExtension parameters = GetVmExtensionParameters(virtualMachineResponse, osType);
355+
356+
this.VirtualMachineExtensionClient.CreateOrUpdateWithHttpMessagesAsync(
357+
this.ResourceGroupName,
358+
this.VMName,
359+
this.Name,
360+
parameters).GetAwaiter().GetResult();
361+
362+
encryptionStatus = new AzureDiskEncryptionStatusContext
294363
{
295364
OsVolumeEncrypted = osVolumeEncrypted,
296365
DataVolumesEncrypted = dataVolumesEncrypted,

0 commit comments

Comments
 (0)