Skip to content

Commit ad80296

Browse files
committed
Enable BGInfo Extension by default
1 parent 149e5df commit ad80296

File tree

8 files changed

+140
-12
lines changed

8 files changed

+140
-12
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@
220220
<Compile Include="Extension\AzureVMBackup\AzureVMBackupConfig.cs" />
221221
<Compile Include="Extension\AzureVMBackup\RemoveAzureVMBackup.cs" />
222222
<Compile Include="Extension\AzureVMBackup\SetAzureVMBackupExtension.cs" />
223+
<Compile Include="Extension\BGInfo\VirtualMachineBGInfoExtensionContext.cs" />
223224
<Compile Include="Extension\CustomScript\GetAzureVMCustomScriptExtensionCommand.cs" />
224225
<Compile Include="Extension\CustomScript\CustomScriptExtensionPrivateSettings.cs" />
225226
<Compile Include="Extension\CustomScript\CustomScriptExtensionPublicSettings.cs" />
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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+
namespace Microsoft.Azure.Commands.Compute.Models
16+
{
17+
public class VirtualMachineBGInfoExtensionContext : PSVirtualMachineExtension
18+
{
19+
public const string ExtensionDefaultPublisher = "Microsoft.Compute";
20+
public const string ExtensionDefaultName = "BGInfo";
21+
public const string ExtensionDefaultVersion = "2.*";
22+
}
23+
}

src/ResourceManager/Compute/Commands.Compute/Extension/CustomScript/GetAzureVMCustomScriptExtensionCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ protected override void ProcessRecord()
7070

7171
ExecuteClientAction(() =>
7272
{
73-
if (Status)
73+
if (Status.IsPresent)
7474
{
7575
var result = this.VirtualMachineExtensionClient.GetWithInstanceView(this.ResourceGroupName, this.VMName, this.Name);
7676
var returnedExtension = result.ToPSVirtualMachineExtension(this.ResourceGroupName);

src/ResourceManager/Compute/Commands.Compute/Extension/CustomScript/VirtualMachineCustomScriptExtensionContext.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ public class VirtualMachineCustomScriptExtensionContext : PSVirtualMachineExtens
2222
public const string ExtensionDefaultName = "CustomScriptExtension";
2323
public const string ExtensionDefaultVersion = "1.4";
2424

25-
2625
public string CommandToExecute { get; set; }
2726
public string[] Uri { get; set; }
2827

src/ResourceManager/Compute/Commands.Compute/Extension/RemoveAzureVMExtensionCommand.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ protected override void ProcessRecord()
6060

6161
ExecuteClientAction(() =>
6262
{
63-
if (this.Force.IsPresent || this.ShouldContinue(Microsoft.Azure.Commands.Compute.Properties.Resources.VirtualMachineExtensionRemovalConfirmation, Microsoft.Azure.Commands.Compute.Properties.Resources.VirtualMachineExtensionRemovalCaption))
63+
if (this.Force.IsPresent
64+
|| this.ShouldContinue(Properties.Resources.VirtualMachineExtensionRemovalConfirmation, Properties.Resources.VirtualMachineExtensionRemovalCaption))
6465
{
6566
var op = this.VirtualMachineExtensionClient.Delete(this.ResourceGroupName, this.VMName, this.Name);
6667
var result = Mapper.Map<PSComputeLongRunningOperation>(op);

src/ResourceManager/Compute/Commands.Compute/Extension/VMAccess/VirtualMachineAccessExtensionContext.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ namespace Microsoft.Azure.Commands.Compute.Models
2020
{
2121
public class VirtualMachineAccessExtensionContext : PSVirtualMachineExtension
2222
{
23-
2423
public const string ExtensionDefaultPublisher = "Microsoft.Compute";
2524
public const string ExtensionDefaultName = "VMAccessAgent";
2625
public const string ExtensionDefaultVersion = "2.0";

src/ResourceManager/Compute/Commands.Compute/Models/PSVirtualMachineExtension.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,15 @@ public static PSVirtualMachineExtension ToPSVirtualMachineExtension(this Virtual
8080
Name = ext.Name,
8181
Location = ext.Location,
8282
Etag = null, // TODO: Update CRP library for this field
83-
Publisher = ext == null ? null : ext.Publisher,
84-
ExtensionType = ext == null ? null : ext.ExtensionType,
85-
TypeHandlerVersion = ext == null ? null : ext.TypeHandlerVersion,
83+
Publisher = ext.Publisher,
84+
ExtensionType = ext.ExtensionType,
85+
TypeHandlerVersion = ext.TypeHandlerVersion,
8686
Id = ext.Id,
87-
PublicSettings = ext == null ? null : ext.Settings,
88-
ProtectedSettings = ext == null ? null : ext.ProtectedSettings,
89-
ProvisioningState = ext == null ? null : ext.ProvisioningState,
90-
Statuses = ext == null || ext.InstanceView == null ? null : ext.InstanceView.Statuses,
91-
SubStatuses = ext == null || ext.InstanceView == null ? null : ext.InstanceView.SubStatuses,
87+
PublicSettings = ext.Settings,
88+
ProtectedSettings = ext.ProtectedSettings,
89+
ProvisioningState = ext.ProvisioningState,
90+
Statuses = ext.InstanceView == null ? null : ext.InstanceView.Statuses,
91+
SubStatuses = ext.InstanceView == null ? null : ext.InstanceView.SubStatuses,
9292
};
9393

9494
return result;

src/ResourceManager/Compute/Commands.Compute/VirtualMachine/Operation/NewAzureVMCommand.cs

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ public class NewAzureVMCommand : VirtualMachineBaseCmdlet
4848
[Parameter(ValueFromPipelineByPropertyName = true)]
4949
public Hashtable[] Tags { get; set; }
5050

51+
[Parameter(
52+
Position = 3,
53+
HelpMessage = "Disable BG Info Extension")]
54+
public SwitchParameter DisableBginfoExtension { get; set; }
55+
5156
protected override void ProcessRecord()
5257
{
5358
base.ProcessRecord();
@@ -87,10 +92,110 @@ protected override void ProcessRecord()
8792

8893
var op = this.VirtualMachineClient.CreateOrUpdate(this.ResourceGroupName, parameters);
8994
var result = Mapper.Map<PSComputeLongRunningOperation>(op);
95+
96+
if (!(this.DisableBginfoExtension.IsPresent || IsLinuxOs()))
97+
{
98+
99+
var currentBginfoVersion = GetBginfoExtension();
100+
101+
if (!string.IsNullOrEmpty(currentBginfoVersion))
102+
{
103+
var extensionParameters = new VirtualMachineExtension
104+
{
105+
Location = this.Location,
106+
Name = VirtualMachineBGInfoExtensionContext.ExtensionDefaultName,
107+
Type = VirtualMachineExtensionType,
108+
Publisher = VirtualMachineBGInfoExtensionContext.ExtensionDefaultPublisher,
109+
ExtensionType = VirtualMachineBGInfoExtensionContext.ExtensionDefaultName,
110+
TypeHandlerVersion = currentBginfoVersion,
111+
AutoUpgradeMinorVersion = true
112+
};
113+
114+
ComputeClient.ComputeManagementClient.VirtualMachineExtensions.CreateOrUpdate(
115+
this.ResourceGroupName, this.VM.Name, extensionParameters);
116+
}
117+
}
90118
WriteObject(result);
91119
});
92120
}
93121

122+
private string GetBginfoExtension()
123+
{
124+
var canonicalizedLocation = this.Location.Canonicalize();
125+
126+
var publishers =
127+
ComputeClient.ComputeManagementClient.VirtualMachineImages.ListPublishers(new VirtualMachineImageListPublishersParameters
128+
{
129+
Location = canonicalizedLocation
130+
});
131+
132+
var publisher = publishers.Resources.FirstOrDefault(e => e.Name.Equals(VirtualMachineBGInfoExtensionContext.ExtensionDefaultPublisher));
133+
134+
if (publisher == null || !publisher.Name.Equals(VirtualMachineBGInfoExtensionContext.ExtensionDefaultPublisher))
135+
{
136+
return null;
137+
}
138+
139+
var virtualMachineImageClient = ComputeClient.ComputeManagementClient.VirtualMachineExtensionImages;
140+
141+
142+
var imageTypes =
143+
virtualMachineImageClient.ListTypes(new VirtualMachineExtensionImageListTypesParameters
144+
{
145+
Location = canonicalizedLocation,
146+
PublisherName = VirtualMachineBGInfoExtensionContext.ExtensionDefaultPublisher
147+
});
148+
149+
var extensionType = imageTypes.Resources.FirstOrDefault(
150+
e => e.Name.Equals(VirtualMachineBGInfoExtensionContext.ExtensionDefaultName));
151+
152+
if (extensionType == null || !extensionType.Name.Equals(VirtualMachineBGInfoExtensionContext.ExtensionDefaultName))
153+
{
154+
return null;
155+
}
156+
157+
var bginfoVersions =
158+
virtualMachineImageClient.ListVersions(new VirtualMachineExtensionImageGetParameters
159+
{
160+
Location = canonicalizedLocation,
161+
PublisherName = VirtualMachineBGInfoExtensionContext.ExtensionDefaultPublisher,
162+
Type = VirtualMachineBGInfoExtensionContext.ExtensionDefaultName
163+
});
164+
165+
if (bginfoVersions != null
166+
&& bginfoVersions.Resources != null
167+
&& bginfoVersions.Resources.Count > 0)
168+
{
169+
return bginfoVersions.Resources.Max(ver =>
170+
{
171+
Version result;
172+
return (Version.TryParse(ver.Name, out result))
173+
? string.Format("{0}.{1}", result.Major, result.Minor)
174+
: VirtualMachineBGInfoExtensionContext.ExtensionDefaultVersion;
175+
});
176+
}
177+
178+
return null;
179+
}
180+
181+
private bool IsLinuxOs()
182+
{
183+
if (this.VM == null)
184+
{
185+
return false;
186+
}
187+
188+
if ((this.VM.StorageProfile != null)
189+
&& (this.VM.StorageProfile.OSDisk != null)
190+
&& (this.VM.StorageProfile.OSDisk.OperatingSystemType != null))
191+
{
192+
return (this.VM.StorageProfile.OSDisk.OperatingSystemType.Equals(OperatingSystemTypes.Linux));
193+
}
194+
195+
return ((this.VM.OSProfile != null)
196+
&& (this.VM.OSProfile.LinuxConfiguration != null));
197+
}
198+
94199
private Uri GetOrCreateStorageAccountForBootDiagnostics()
95200
{
96201
var storageAccountName = GetStorageAccountNameFromStorageProfile();

0 commit comments

Comments
 (0)