Skip to content

Commit b0c8af7

Browse files
author
Hovsep
committed
Merge pull request Azure#1958 from MSSedusch/dev
prevent extension downgrade
2 parents 9c2fd72 + 9e6bd6e commit b0c8af7

File tree

4 files changed

+56
-21
lines changed

4 files changed

+56
-21
lines changed

src/ResourceManager/Compute/Commands.Compute/Extension/AEM/AEMExtensionConstants.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ public static class AEMExtensionConstants
2424
public static Dictionary<string, string> AEMExtensionDefaultName = new Dictionary<string, string>() { { OSTypeWindows, "AzureCATExtensionHandler" }, { OSTypeLinux, "AzureEnhancedMonitorForLinux" } };
2525
public static Dictionary<string, string> AEMExtensionPublisher = new Dictionary<string, string>() { { OSTypeWindows, "Microsoft.AzureCAT.AzureEnhancedMonitoring" }, { OSTypeLinux, "Microsoft.OSTCExtensions" } };
2626
public static Dictionary<string, string> AEMExtensionType = new Dictionary<string, string>() { { OSTypeWindows, "AzureCATExtensionHandler" }, { OSTypeLinux, "AzureEnhancedMonitorForLinux" } };
27-
public static Dictionary<string, string> AEMExtensionVersion = new Dictionary<string, string>() { { OSTypeWindows, "2.2" }, { OSTypeLinux, "3.0" } };
27+
public static Dictionary<string, Version> AEMExtensionVersion = new Dictionary<string, Version>() { { OSTypeWindows, new Version(2, 2) }, { OSTypeLinux, new Version(3,0) } };
2828

2929
public static Dictionary<string, string> WADExtensionDefaultName = new Dictionary<string, string>() { { OSTypeWindows, "IaaSDiagnostics" }, { OSTypeLinux, "LinuxDiagnostic" } };
3030
public static Dictionary<string, string> WADExtensionPublisher = new Dictionary<string, string>() { { OSTypeWindows, "Microsoft.Azure.Diagnostics" }, { OSTypeLinux, "Microsoft.OSTCExtensions" } };
3131
public static Dictionary<string, string> WADExtensionType = new Dictionary<string, string>() { { OSTypeWindows, "IaaSDiagnostics" }, { OSTypeLinux, "LinuxDiagnostic" } };
32-
public static Dictionary<string, string> WADExtensionVersion = new Dictionary<string, string>() { { OSTypeWindows, "1.5" }, { OSTypeLinux, "2.2" } };
32+
public static Dictionary<string, Version> WADExtensionVersion = new Dictionary<string, Version>() { { OSTypeWindows, new Version(1,5) }, { OSTypeLinux, new Version(2,2) } };
3333

3434
public const string OSTypeWindows = "Windows";
3535
public const string OSTypeLinux = "Linux";

src/ResourceManager/Compute/Commands.Compute/Extension/AEM/AEMHelper.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,44 @@ internal VirtualMachineExtension GetExtension(VirtualMachine vm, string type, st
426426
return null;
427427
}
428428

429+
internal Version GetExtensionVersion(VirtualMachine vm, VirtualMachineInstanceView vmStatus, string osType, string type, string publisher)
430+
{
431+
Version version = new Version();
432+
if (AEMExtensionConstants.AEMExtensionPublisher[osType].Equals(publisher, StringComparison.InvariantCultureIgnoreCase)
433+
&& AEMExtensionConstants.AEMExtensionType[osType].Equals(type, StringComparison.InvariantCultureIgnoreCase))
434+
{
435+
version = AEMExtensionConstants.AEMExtensionVersion[osType];
436+
}
437+
else if (AEMExtensionConstants.WADExtensionPublisher[osType].Equals(publisher, StringComparison.InvariantCultureIgnoreCase)
438+
&& AEMExtensionConstants.WADExtensionType[osType].Equals(type, StringComparison.InvariantCultureIgnoreCase))
439+
{
440+
version = AEMExtensionConstants.WADExtensionVersion[osType];
441+
}
442+
443+
if (vm.Resources != null && vmStatus.Extensions != null)
444+
{
445+
var extension = vm.Resources.FirstOrDefault(ext =>
446+
ext.VirtualMachineExtensionType.Equals(type)
447+
&& ext.Publisher.Equals(publisher));
448+
449+
if (extension != null)
450+
{
451+
var extensionStatus = vmStatus.Extensions.FirstOrDefault(ext => ext.Name.Equals(extension.Name));
452+
453+
if (extensionStatus != null)
454+
{
455+
string strExtVersion = extensionStatus.TypeHandlerVersion;
456+
Version extVersion;
457+
if (Version.TryParse(strExtVersion, out extVersion))
458+
{
459+
version = extVersion;
460+
}
461+
}
462+
}
463+
}
464+
return version;
465+
}
466+
429467
internal VirtualMachineExtensionInstanceView GetExtension(VirtualMachine vm, VirtualMachineInstanceView vmStatus, string type, string publisher)
430468
{
431469
var ext = this.GetExtension(vm, type, publisher);

src/ResourceManager/Compute/Commands.Compute/Extension/AEM/GetAzureRmVMAEMExtension.cs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -127,16 +127,6 @@ public override void ExecuteCmdlet()
127127
});
128128
}
129129

130-
private void WriteInformation(string message, params string[] args)
131-
{
132-
base.WriteInformation(String.Format(message, args), new string[0]);
133-
}
134-
135-
private void WriteVerbose(string message, params object[] args)
136-
{
137-
base.WriteVerbose(String.Format(message, args));
138-
}
139-
140130
private void WriteError(string message, params object[] args)
141131
{
142132
base.WriteError(new ErrorRecord(new Exception(String.Format(message, args)), "Error", ErrorCategory.NotSpecified, null));

src/ResourceManager/Compute/Commands.Compute/Extension/AEM/SetAzureRmVMAEMExtension.cs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public override void ExecuteCmdlet()
101101
this._Helper.WriteVerbose("Retrieving VM...");
102102

103103
var selectedVM = ComputeClient.ComputeManagementClient.VirtualMachines.Get(this.ResourceGroupName, this.VMName);
104-
var selectedVMStatus = ComputeClient.ComputeManagementClient.VirtualMachines.GetWithInstanceView(this.ResourceGroupName, this.VMName);
104+
var selectedVMStatus = ComputeClient.ComputeManagementClient.VirtualMachines.GetWithInstanceView(this.ResourceGroupName, this.VMName).Body.InstanceView;
105105

106106
if (selectedVM == null)
107107
{
@@ -299,7 +299,7 @@ public override void ExecuteCmdlet()
299299
return;
300300
}
301301

302-
selectedVM = SetAzureVMDiagnosticsExtensionC(selectedVM, wadstorage.Key, wadstorage.Value);
302+
selectedVM = SetAzureVMDiagnosticsExtensionC(selectedVM, selectedVMStatus, wadstorage.Key, wadstorage.Value);
303303

304304
var storage = this._Helper.GetStorageAccountFromCache(wadstorage.Key);
305305
var endpoint = this._Helper.GetAzureSAPTableEndpoint(storage);
@@ -324,13 +324,16 @@ public override void ExecuteCmdlet()
324324
this._Helper.WriteHost("[INFO] Updating Azure Enhanced Monitoring Extension for SAP configuration - Please wait...");
325325

326326
WriteVerbose("Installing AEM extension");
327+
328+
Version aemVersion = this._Helper.GetExtensionVersion(selectedVM, selectedVMStatus, OSType, AEMExtensionConstants.AEMExtensionType[OSType], AEMExtensionConstants.AEMExtensionPublisher[OSType]);
329+
327330
var op = this.VirtualMachineExtensionClient.CreateOrUpdateWithHttpMessagesAsync(
328331
this.ResourceGroupName, this.VMName, AEMExtensionConstants.AEMExtensionDefaultName[OSType],
329332
new VirtualMachineExtension()
330333
{
331334
Publisher = AEMExtensionConstants.AEMExtensionPublisher[OSType],
332335
VirtualMachineExtensionType = AEMExtensionConstants.AEMExtensionType[OSType],
333-
TypeHandlerVersion = AEMExtensionConstants.AEMExtensionVersion[OSType],
336+
TypeHandlerVersion = aemVersion.ToString(2),
334337
Settings = jsonPublicConfig,
335338
ProtectedSettings = jsonPrivateConfig,
336339
Location = selectedVM.Location,
@@ -345,13 +348,13 @@ public override void ExecuteCmdlet()
345348
});
346349
}
347350

348-
private VirtualMachine SetAzureVMDiagnosticsExtensionC(VirtualMachine selectedVM, string storageAccountName, string storageAccountKey)
351+
private VirtualMachine SetAzureVMDiagnosticsExtensionC(VirtualMachine vm, VirtualMachineInstanceView vmStatus, string storageAccountName, string storageAccountKey)
349352
{
350353
System.Xml.XmlDocument xpublicConfig = null;
351354

352355
var extensionName = AEMExtensionConstants.WADExtensionDefaultName[this.OSType];
353356

354-
var extTemp = this._Helper.GetExtension(selectedVM,
357+
var extTemp = this._Helper.GetExtension(vm,
355358
AEMExtensionConstants.WADExtensionType[this.OSType], AEMExtensionConstants.WADExtensionPublisher[OSType]);
356359
object publicConf = null;
357360
if (extTemp != null)
@@ -417,18 +420,22 @@ private VirtualMachine SetAzureVMDiagnosticsExtensionC(VirtualMachine selectedVM
417420
jPrivateConfig.Add("storageAccountEndPoint", new Newtonsoft.Json.Linq.JValue(endpoint));
418421

419422
WriteVerbose("Installing WAD extension");
423+
424+
Version wadVersion = this._Helper.GetExtensionVersion(vm, vmStatus, OSType,
425+
AEMExtensionConstants.WADExtensionType[this.OSType], AEMExtensionConstants.WADExtensionPublisher[this.OSType]);
426+
420427
VirtualMachineExtension vmExtParameters = new VirtualMachineExtension();
421428

422429
vmExtParameters.Publisher = AEMExtensionConstants.WADExtensionPublisher[this.OSType];
423430
vmExtParameters.VirtualMachineExtensionType = AEMExtensionConstants.WADExtensionType[this.OSType];
424-
vmExtParameters.TypeHandlerVersion = AEMExtensionConstants.WADExtensionVersion[this.OSType];
431+
vmExtParameters.TypeHandlerVersion = wadVersion.ToString(2);
425432
vmExtParameters.Settings = jPublicConfig;
426433
vmExtParameters.ProtectedSettings = jPrivateConfig;
427-
vmExtParameters.Location = selectedVM.Location;
434+
vmExtParameters.Location = vm.Location;
428435

429-
this.VirtualMachineExtensionClient.CreateOrUpdate(ResourceGroupName, selectedVM.Name, extensionName, vmExtParameters);
436+
this.VirtualMachineExtensionClient.CreateOrUpdate(ResourceGroupName, vm.Name, extensionName, vmExtParameters);
430437

431-
return this.ComputeClient.ComputeManagementClient.VirtualMachines.Get(ResourceGroupName, selectedVM.Name);
438+
return this.ComputeClient.ComputeManagementClient.VirtualMachines.Get(ResourceGroupName, vm.Name);
432439
}
433440

434441
private void SetStorageAnalytics(string storageAccountName)

0 commit comments

Comments
 (0)