Skip to content

Commit

Permalink
Merge pull request #2 from andyliuliming/AzureDiskEncryption
Browse files Browse the repository at this point in the history
linux support for AzureDiskEncryption.
  • Loading branch information
Sudhakara Reddy Evuri committed Oct 30, 2015
2 parents 8168544 + 0bf565c commit 7ac47dc
Show file tree
Hide file tree
Showing 11 changed files with 639 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,13 @@
<Compile Include="Extension\AzureDiskEncryption\GetAzureDiskEncryptionStatus.cs" />
<Compile Include="Extension\AzureDiskEncryption\RemoveAzureDiskEncryptionExtension.cs" />
<Compile Include="Extension\AzureDiskEncryption\SetAzureDiskEncryptionExtension.cs" />
<Compile Include="Extension\AzureVMBackup\AzureVMBackupExtensionUtil.cs" />
<Compile Include="Extension\AzureVMBackup\AzureVMBackupException.cs" />
<Compile Include="Extension\AzureVMBackup\AzureVMBackupExtensionProtectedSettings.cs" />
<Compile Include="Extension\AzureVMBackup\AzureVMBackupExtensionPublicSettings.cs" />
<Compile Include="Extension\AzureVMBackup\AzureVMBackupConfig.cs" />
<Compile Include="Extension\AzureVMBackup\RemoveAzureVMBackup.cs" />
<Compile Include="Extension\AzureVMBackup\SetAzureVMBackupExtension.cs" />
<Compile Include="Extension\CustomScript\GetAzureVMCustomScriptExtensionCommand.cs" />
<Compile Include="Extension\CustomScript\CustomScriptExtensionPrivateSettings.cs" />
<Compile Include="Extension\CustomScript\CustomScriptExtensionPublicSettings.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,5 +118,9 @@ public static class ProfileNouns
//AzureDiskEncryption
public const string AzureDiskEncryptionExtension = "AzureRmVMDiskEncryptionExtension";
public const string AzureDiskEncryptionStatus = "AzureRmVmDiskEncryptionStatus";

//AzureVMBackup
public const string AzureVMBackup = "AzureRmVMBackup";
public const string AzureVMBackupExtension = "AzureRmVMBackupExtension";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ namespace Microsoft.Azure.Commands.Compute.Extension.AzureDiskEncryption
/// </summary>
public class AzureDiskEncryptionExtensionContext : PSVirtualMachineExtension
{
public const string LinuxExtensionDefaultPublisher = "Microsoft.OSTCExtensions";
public const string LinuxExtensionDefaultName = "AzureDiskEncryptionForLinux";
public const string LinuxExtensionDefaultVersion = "0.1";

public const string ExtensionDefaultPublisher = "Microsoft.Azure.Security";
public const string ExtensionDefaultName = "AzureDiskEncryption";
public const string ExtensionDefaultVersion = "1.0";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using System.Management.Automation;
using System.Globalization;
using AutoMapper;
using Microsoft.Azure.Commands.Compute.Extension.AzureVMBackup;

namespace Microsoft.Azure.Commands.Compute.Extension.AzureDiskEncryption
{
Expand Down Expand Up @@ -191,8 +192,24 @@ private string GetExtensionStatusMessage()
ErrorCategory.InvalidResult,
null));
}
if (returnedExtension.Publisher.Equals(AzureDiskEncryptionExtensionContext.ExtensionDefaultPublisher, StringComparison.InvariantCultureIgnoreCase) &&
returnedExtension.ExtensionType.Equals(AzureDiskEncryptionExtensionContext.ExtensionDefaultName, StringComparison.InvariantCultureIgnoreCase))
bool publisherMismatch = false;
if (string.Equals(currentOSType, "Linux", StringComparison.InvariantCultureIgnoreCase))
{
if (returnedExtension.Publisher.Equals(AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultPublisher, StringComparison.InvariantCultureIgnoreCase) &&
returnedExtension.ExtensionType.Equals(AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultName, StringComparison.InvariantCultureIgnoreCase))
{
publisherMismatch = true;
}
}
else if(string.Equals(currentOSType,"Windows",StringComparison.InvariantCultureIgnoreCase))
{
if (returnedExtension.Publisher.Equals(AzureDiskEncryptionExtensionContext.ExtensionDefaultPublisher, StringComparison.InvariantCultureIgnoreCase) &&
returnedExtension.ExtensionType.Equals(AzureDiskEncryptionExtensionContext.ExtensionDefaultName, StringComparison.InvariantCultureIgnoreCase))
{
publisherMismatch = true;
}
}
if (publisherMismatch)
{
AzureDiskEncryptionExtensionContext context = new AzureDiskEncryptionExtensionContext(returnedExtension);
if ((context == null) ||
Expand Down Expand Up @@ -293,6 +310,7 @@ private VirtualMachineExtension GetVmExtensionParameters()
string SettingString = GetExtensionPublicSettings();
string ProtectedSettingString = GetExtensionProtectedSettings();


VirtualMachine vmParameters = (this.ComputeClient.ComputeManagementClient.VirtualMachines.Get(this.ResourceGroupName, this.VMName)).VirtualMachine;
if (vmParameters == null)
{
Expand All @@ -302,21 +320,41 @@ private VirtualMachineExtension GetVmExtensionParameters()
null));
}

VirtualMachineExtension vmExtensionParameters = new VirtualMachineExtension
VirtualMachineExtension vmExtensionParameters = null;
if (string.Equals(currentOSType, "Windows", StringComparison.InvariantCultureIgnoreCase))
{
Location = vmParameters.Location,
Name = this.Name,
Type = VirtualMachineExtensionType,
Publisher = AzureDiskEncryptionExtensionContext.ExtensionDefaultPublisher,
ExtensionType = AzureDiskEncryptionExtensionContext.ExtensionDefaultName,
TypeHandlerVersion = (this.TypeHandlerVersion) ?? AzureDiskEncryptionExtensionContext.ExtensionDefaultVersion,
Settings = SettingString,
ProtectedSettings = ProtectedSettingString,
};
vmExtensionParameters = new VirtualMachineExtension
{
Location = vmParameters.Location,
Name = this.Name,
Type = VirtualMachineExtensionType,
Publisher = AzureDiskEncryptionExtensionContext.ExtensionDefaultPublisher,
ExtensionType = AzureDiskEncryptionExtensionContext.ExtensionDefaultName,
TypeHandlerVersion = (this.TypeHandlerVersion) ?? AzureDiskEncryptionExtensionContext.ExtensionDefaultVersion,
Settings = SettingString,
ProtectedSettings = ProtectedSettingString,
};
}
else if (string.Equals(currentOSType, "Linux", StringComparison.InvariantCultureIgnoreCase))
{
vmExtensionParameters = new VirtualMachineExtension
{
Location = vmParameters.Location,
Name = this.Name,
Type = VirtualMachineExtensionType,
Publisher = AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultPublisher,
ExtensionType = AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultName,
TypeHandlerVersion = (this.TypeHandlerVersion) ?? AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultVersion,
Settings = SettingString,
ProtectedSettings = ProtectedSettingString,
};
}

return vmExtensionParameters;
}

private string currentOSType = null;

protected override void ProcessRecord()
{
base.ProcessRecord();
Expand All @@ -326,11 +364,42 @@ protected override void ProcessRecord()
if (this.Force.IsPresent ||
this.ShouldContinue(Properties.Resources.EnableAzureDiskEncryptionConfirmation, Properties.Resources.EnableAzureDiskEncryptionCaption))
{
VirtualMachine virtualMachineResponse = this.ComputeClient.ComputeManagementClient.VirtualMachines.GetWithInstanceView(this.ResourceGroupName, VMName).VirtualMachine;
currentOSType = virtualMachineResponse.StorageProfile.OSDisk.OperatingSystemType;
if(string.Equals(currentOSType,"Linux",StringComparison.InvariantCultureIgnoreCase))
{
try
{
AzureVMBackupExtensionUtil azureBackupExtensionUtil = new AzureVMBackupExtensionUtil();
AzureVMBackupConfig vmConfig = new AzureVMBackupConfig();
vmConfig.ResourceGroupName = ResourceGroupName;
vmConfig.VMName = VMName;
vmConfig.VirtualMachineExtensionType = VirtualMachineExtensionType;
string tag = string.Format("{0}{1}", "AzureEnc", Guid.NewGuid().ToString());
// this would create shapshot only for Linux box. and we should wait for the snapshot found.
azureBackupExtensionUtil.CreateSnapshotForDisks(vmConfig, tag, this);
WriteInformation(new InformationRecord(string.Format("one snapshot for disks are created with tag,{0}",tag), string.Empty));
}
catch (AzureVMBackupException e)
{
ThrowTerminatingError(new ErrorRecord(new ApplicationException(string.Format(CultureInfo.CurrentUICulture, e.ToString())),
"InvalidResult",
ErrorCategory.InvalidResult,
null));
}
}
VirtualMachineExtension parameters = GetVmExtensionParameters();
this.VirtualMachineExtensionClient.CreateOrUpdate(this.ResourceGroupName,
this.VMName,
parameters);
var op = UpdateVmEncryptionSettings();
WriteObject(Mapper.Map<PSComputeLongRunningOperation>(op));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Microsoft.Azure.Commands.Compute.Extension.AzureVMBackup
{
public class AzureVMBackupConfig
{
public string ResourceGroupName { get; set; }
public string VMName { get; set; }
public string ExtensionName { get; set; }
public string VirtualMachineExtensionType { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Microsoft.Azure.Commands.Compute.Extension.AzureVMBackup
{
public class AzureVMBackupErrorCodes
{
public const int TimeOut = 1;
public const int OSNotSupported = 2;
public const int WrongBlobUriFormat = 3;
}

public class AzureVMBackupException : Exception
{
public AzureVMBackupException(int errorCode,string message):base(message)
{
this.AzureVMBackupErrorCode = errorCode;
}
public int AzureVMBackupErrorCode { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// ----------------------------------------------------------------------------------
//
// Copyright Microsoft Corporation
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ----------------------------------------------------------------------------------

using System.Collections.Generic;
namespace Microsoft.Azure.Commands.Compute.Extension.AzureDiskEncryption
{
public class AzureVMBackupBlobSasUris
{
public AzureVMBackupBlobSasUris()
{
blobSASUri = new List<string>();
}
public List<string> blobSASUri { get; set; }
}

public class AzureVMBackupExtensionProtectedSettings
{
public string logsBlobUri { get; set; }
public string objectStr { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// ----------------------------------------------------------------------------------
//
// Copyright Microsoft Corporation
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ----------------------------------------------------------------------------------

using System.Collections.Generic;
namespace Microsoft.Azure.Commands.Compute.Extension.AzureDiskEncryption
{
public class AzureVMBackupMetadata
{
public AzureVMBackupMetadata()
{
backupMetadata = new List<AzureVMBackupMetadataItem>();
}
public List<AzureVMBackupMetadataItem> backupMetadata { get; set; }
}

public class AzureVMBackupMetadataItem
{
public string Key { get; set; }
public string Value { get; set; }
}

public class AzureVMBackupExtensionPublicSettings
{
public string locale { get; set; }
public string taskId { get; set; }
public string commandToExecute { get; set; }
public string objectStr { get; set; }
public string commandStartTimeUTCTicks { get; set; }
}
}
Loading

0 comments on commit 7ac47dc

Please sign in to comment.