Skip to content

Commit 03099e3

Browse files
author
Sudhakara Reddy Evuri
committed
Merging Linux extension changes
2 parents 7d02de6 + 7ac47dc commit 03099e3

11 files changed

+640
-12
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,13 @@
210210
<Compile Include="Extension\AzureDiskEncryption\GetAzureDiskEncryptionStatus.cs" />
211211
<Compile Include="Extension\AzureDiskEncryption\RemoveAzureDiskEncryptionExtension.cs" />
212212
<Compile Include="Extension\AzureDiskEncryption\SetAzureDiskEncryptionExtension.cs" />
213+
<Compile Include="Extension\AzureVMBackup\AzureVMBackupExtensionUtil.cs" />
214+
<Compile Include="Extension\AzureVMBackup\AzureVMBackupException.cs" />
215+
<Compile Include="Extension\AzureVMBackup\AzureVMBackupExtensionProtectedSettings.cs" />
216+
<Compile Include="Extension\AzureVMBackup\AzureVMBackupExtensionPublicSettings.cs" />
217+
<Compile Include="Extension\AzureVMBackup\AzureVMBackupConfig.cs" />
218+
<Compile Include="Extension\AzureVMBackup\RemoveAzureVMBackup.cs" />
219+
<Compile Include="Extension\AzureVMBackup\SetAzureVMBackupExtension.cs" />
213220
<Compile Include="Extension\CustomScript\GetAzureVMCustomScriptExtensionCommand.cs" />
214221
<Compile Include="Extension\CustomScript\CustomScriptExtensionPrivateSettings.cs" />
215222
<Compile Include="Extension\CustomScript\CustomScriptExtensionPublicSettings.cs" />

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,5 +118,10 @@ public static class ProfileNouns
118118
//AzureDiskEncryption
119119
public const string AzureDiskEncryptionExtension = "AzureRmVMDiskEncryptionExtension";
120120
public const string AzureDiskEncryptionStatus = "AzureRmVMDiskEncryptionStatus";
121+
122+
//AzureVMBackup
123+
public const string AzureVMBackup = "AzureRmVMBackup";
124+
public const string AzureVMBackupExtension = "AzureRmVMBackupExtension";
125+
121126
}
122127
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ namespace Microsoft.Azure.Commands.Compute.Extension.AzureDiskEncryption
99
/// </summary>
1010
public class AzureDiskEncryptionExtensionContext : PSVirtualMachineExtension
1111
{
12+
public const string LinuxExtensionDefaultPublisher = "Microsoft.OSTCExtensions";
13+
public const string LinuxExtensionDefaultName = "AzureDiskEncryptionForLinux";
14+
public const string LinuxExtensionDefaultVersion = "0.1";
15+
1216
public const string ExtensionDefaultPublisher = "Microsoft.Azure.Security";
1317
public const string ExtensionDefaultName = "AzureDiskEncryption";
1418
public const string ExtensionDefaultVersion = "1.0";

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

Lines changed: 81 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Management.Automation;
99
using System.Globalization;
1010
using AutoMapper;
11+
using Microsoft.Azure.Commands.Compute.Extension.AzureVMBackup;
1112

1213
namespace Microsoft.Azure.Commands.Compute.Extension.AzureDiskEncryption
1314
{
@@ -191,8 +192,24 @@ private string GetExtensionStatusMessage()
191192
ErrorCategory.InvalidResult,
192193
null));
193194
}
194-
if (returnedExtension.Publisher.Equals(AzureDiskEncryptionExtensionContext.ExtensionDefaultPublisher, StringComparison.InvariantCultureIgnoreCase) &&
195-
returnedExtension.ExtensionType.Equals(AzureDiskEncryptionExtensionContext.ExtensionDefaultName, StringComparison.InvariantCultureIgnoreCase))
195+
bool publisherMismatch = false;
196+
if (string.Equals(currentOSType, "Linux", StringComparison.InvariantCultureIgnoreCase))
197+
{
198+
if (returnedExtension.Publisher.Equals(AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultPublisher, StringComparison.InvariantCultureIgnoreCase) &&
199+
returnedExtension.ExtensionType.Equals(AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultName, StringComparison.InvariantCultureIgnoreCase))
200+
{
201+
publisherMismatch = true;
202+
}
203+
}
204+
else if(string.Equals(currentOSType,"Windows",StringComparison.InvariantCultureIgnoreCase))
205+
{
206+
if (returnedExtension.Publisher.Equals(AzureDiskEncryptionExtensionContext.ExtensionDefaultPublisher, StringComparison.InvariantCultureIgnoreCase) &&
207+
returnedExtension.ExtensionType.Equals(AzureDiskEncryptionExtensionContext.ExtensionDefaultName, StringComparison.InvariantCultureIgnoreCase))
208+
{
209+
publisherMismatch = true;
210+
}
211+
}
212+
if (publisherMismatch)
196213
{
197214
AzureDiskEncryptionExtensionContext context = new AzureDiskEncryptionExtensionContext(returnedExtension);
198215
if ((context == null) ||
@@ -293,6 +310,7 @@ private VirtualMachineExtension GetVmExtensionParameters()
293310
string SettingString = GetExtensionPublicSettings();
294311
string ProtectedSettingString = GetExtensionProtectedSettings();
295312

313+
296314
VirtualMachine vmParameters = (this.ComputeClient.ComputeManagementClient.VirtualMachines.Get(this.ResourceGroupName, this.VMName)).VirtualMachine;
297315
if (vmParameters == null)
298316
{
@@ -302,21 +320,41 @@ private VirtualMachineExtension GetVmExtensionParameters()
302320
null));
303321
}
304322

305-
VirtualMachineExtension vmExtensionParameters = new VirtualMachineExtension
323+
VirtualMachineExtension vmExtensionParameters = null;
324+
if (string.Equals(currentOSType, "Windows", StringComparison.InvariantCultureIgnoreCase))
306325
{
307-
Location = vmParameters.Location,
308-
Name = this.Name,
309-
Type = VirtualMachineExtensionType,
310-
Publisher = AzureDiskEncryptionExtensionContext.ExtensionDefaultPublisher,
311-
ExtensionType = AzureDiskEncryptionExtensionContext.ExtensionDefaultName,
312-
TypeHandlerVersion = (this.TypeHandlerVersion) ?? AzureDiskEncryptionExtensionContext.ExtensionDefaultVersion,
313-
Settings = SettingString,
314-
ProtectedSettings = ProtectedSettingString,
315-
};
326+
vmExtensionParameters = new VirtualMachineExtension
327+
{
328+
Location = vmParameters.Location,
329+
Name = this.Name,
330+
Type = VirtualMachineExtensionType,
331+
Publisher = AzureDiskEncryptionExtensionContext.ExtensionDefaultPublisher,
332+
ExtensionType = AzureDiskEncryptionExtensionContext.ExtensionDefaultName,
333+
TypeHandlerVersion = (this.TypeHandlerVersion) ?? AzureDiskEncryptionExtensionContext.ExtensionDefaultVersion,
334+
Settings = SettingString,
335+
ProtectedSettings = ProtectedSettingString,
336+
};
337+
}
338+
else if (string.Equals(currentOSType, "Linux", StringComparison.InvariantCultureIgnoreCase))
339+
{
340+
vmExtensionParameters = new VirtualMachineExtension
341+
{
342+
Location = vmParameters.Location,
343+
Name = this.Name,
344+
Type = VirtualMachineExtensionType,
345+
Publisher = AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultPublisher,
346+
ExtensionType = AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultName,
347+
TypeHandlerVersion = (this.TypeHandlerVersion) ?? AzureDiskEncryptionExtensionContext.LinuxExtensionDefaultVersion,
348+
Settings = SettingString,
349+
ProtectedSettings = ProtectedSettingString,
350+
};
351+
}
316352

317353
return vmExtensionParameters;
318354
}
319355

356+
private string currentOSType = null;
357+
320358
protected override void ProcessRecord()
321359
{
322360
base.ProcessRecord();
@@ -326,11 +364,42 @@ protected override void ProcessRecord()
326364
if (this.Force.IsPresent ||
327365
this.ShouldContinue(Properties.Resources.EnableAzureDiskEncryptionConfirmation, Properties.Resources.EnableAzureDiskEncryptionCaption))
328366
{
367+
VirtualMachine virtualMachineResponse = this.ComputeClient.ComputeManagementClient.VirtualMachines.GetWithInstanceView(this.ResourceGroupName, VMName).VirtualMachine;
368+
369+
currentOSType = virtualMachineResponse.StorageProfile.OSDisk.OperatingSystemType;
370+
371+
if(string.Equals(currentOSType,"Linux",StringComparison.InvariantCultureIgnoreCase))
372+
{
373+
try
374+
{
375+
AzureVMBackupExtensionUtil azureBackupExtensionUtil = new AzureVMBackupExtensionUtil();
376+
AzureVMBackupConfig vmConfig = new AzureVMBackupConfig();
377+
vmConfig.ResourceGroupName = ResourceGroupName;
378+
vmConfig.VMName = VMName;
379+
vmConfig.VirtualMachineExtensionType = VirtualMachineExtensionType;
380+
string tag = string.Format("{0}{1}", "AzureEnc", Guid.NewGuid().ToString());
381+
// this would create shapshot only for Linux box. and we should wait for the snapshot found.
382+
azureBackupExtensionUtil.CreateSnapshotForDisks(vmConfig, tag, this);
383+
384+
WriteInformation(new InformationRecord(string.Format("one snapshot for disks are created with tag,{0}",tag), string.Empty));
385+
}
386+
catch (AzureVMBackupException e)
387+
{
388+
ThrowTerminatingError(new ErrorRecord(new ApplicationException(string.Format(CultureInfo.CurrentUICulture, e.ToString())),
389+
"InvalidResult",
390+
ErrorCategory.InvalidResult,
391+
null));
392+
}
393+
}
394+
329395
VirtualMachineExtension parameters = GetVmExtensionParameters();
330396

331397
this.VirtualMachineExtensionClient.CreateOrUpdate(this.ResourceGroupName,
332398
this.VMName,
333399
parameters);
400+
401+
402+
334403
var op = UpdateVmEncryptionSettings();
335404
WriteObject(Mapper.Map<PSComputeLongRunningOperation>(op));
336405
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace Microsoft.Azure.Commands.Compute.Extension.AzureVMBackup
8+
{
9+
public class AzureVMBackupConfig
10+
{
11+
public string ResourceGroupName { get; set; }
12+
public string VMName { get; set; }
13+
public string ExtensionName { get; set; }
14+
public string VirtualMachineExtensionType { get; set; }
15+
}
16+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace Microsoft.Azure.Commands.Compute.Extension.AzureVMBackup
8+
{
9+
public class AzureVMBackupErrorCodes
10+
{
11+
public const int TimeOut = 1;
12+
public const int OSNotSupported = 2;
13+
public const int WrongBlobUriFormat = 3;
14+
}
15+
16+
public class AzureVMBackupException : Exception
17+
{
18+
public AzureVMBackupException(int errorCode,string message):base(message)
19+
{
20+
this.AzureVMBackupErrorCode = errorCode;
21+
}
22+
public int AzureVMBackupErrorCode { get; set; }
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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 System.Collections.Generic;
16+
namespace Microsoft.Azure.Commands.Compute.Extension.AzureDiskEncryption
17+
{
18+
public class AzureVMBackupBlobSasUris
19+
{
20+
public AzureVMBackupBlobSasUris()
21+
{
22+
blobSASUri = new List<string>();
23+
}
24+
public List<string> blobSASUri { get; set; }
25+
}
26+
27+
public class AzureVMBackupExtensionProtectedSettings
28+
{
29+
public string logsBlobUri { get; set; }
30+
public string objectStr { get; set; }
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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 System.Collections.Generic;
16+
namespace Microsoft.Azure.Commands.Compute.Extension.AzureDiskEncryption
17+
{
18+
public class AzureVMBackupMetadata
19+
{
20+
public AzureVMBackupMetadata()
21+
{
22+
backupMetadata = new List<AzureVMBackupMetadataItem>();
23+
}
24+
public List<AzureVMBackupMetadataItem> backupMetadata { get; set; }
25+
}
26+
27+
public class AzureVMBackupMetadataItem
28+
{
29+
public string Key { get; set; }
30+
public string Value { get; set; }
31+
}
32+
33+
public class AzureVMBackupExtensionPublicSettings
34+
{
35+
public string locale { get; set; }
36+
public string taskId { get; set; }
37+
public string commandToExecute { get; set; }
38+
public string objectStr { get; set; }
39+
public string commandStartTimeUTCTicks { get; set; }
40+
}
41+
}

0 commit comments

Comments
 (0)