Skip to content

Commit 2242d0e

Browse files
author
Maddie Clayton
authored
Merge pull request #8514 from maddieclayton/fixextensions
Add list capability for VMExtension
2 parents 73ec469 + f43d540 commit 2242d0e

File tree

8 files changed

+2132
-3195
lines changed

8 files changed

+2132
-3195
lines changed

src/Compute/Compute.Test/ScenarioTests/VirtualMachineExtensionTests.ps1

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,13 @@ function Test-VirtualMachineExtension
142142
Assert-NotNull $ext.Statuses;
143143
Assert-NotNull $ext.SubStatuses;
144144

145+
$ext = Get-AzVMExtension -ResourceGroupName $rgname -VMName $vmname
146+
Assert-True { $ext.Count -ge 1 }
147+
Assert-Null $ext[0].Statuses
148+
149+
$ext = Get-AzVMExtension -ResourceGroupName $rgname -VMName $vmname -Status
150+
Assert-NotNull $ext.Statuses
151+
145152
# Remove Extension
146153
$ext | Remove-AzVMExtension -Force;
147154
}

src/Compute/Compute.Test/SessionRecords/Microsoft.Azure.Commands.Compute.Test.ScenarioTests.VirtualMachineExtensionTests/TestVirtualMachineExtension.json

Lines changed: 2011 additions & 3181 deletions
Large diffs are not rendered by default.

src/Compute/Compute/ChangeLog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
- Additional information about change #1
2020
-->
2121
## Upcoming Release
22+
* Update Get-AzVMExtension to list all installed extension if Name parameter is not provided
2223
* Add Tag and ResourceId parameters to Update-AzImage cmdlet
2324
* Get-AzVmssVM without instance ID and with InstanceView can list VMSS VMs with instance view.
2425

src/Compute/Compute/Common/ComputeClientInstancViewMethod.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,23 @@ public static AzureOperationResponse<VirtualMachineExtension> GetWithInstanceVie
2929
return result;
3030
}
3131

32+
public static AzureOperationResponse<VirtualMachineExtensionsListResult> ListWithInstanceView(this IVirtualMachineExtensionsOperations iVmExtensionOperations,
33+
string rgName, string vmName)
34+
{
35+
string expand = "instanceView";
36+
var result = iVmExtensionOperations.ListWithHttpMessagesAsync(rgName, vmName, expand).GetAwaiter().GetResult();
37+
38+
foreach (var vmExtension in result.Body.Value)
39+
{
40+
if (vmExtension.InstanceView == null)
41+
{
42+
vmExtension.InstanceView = iVmExtensionOperations.GetWithInstanceView(rgName, vmName, vmExtension.Name).Body.InstanceView;
43+
}
44+
}
45+
46+
return result;
47+
}
48+
3249
public static AzureOperationResponse<VirtualMachine> GetWithInstanceView(this IVirtualMachinesOperations iVmExtensionOperations,
3350
string rgName, string vmName)
3451
{

src/Compute/Compute/Extension/GetAzureVMExtensionCommand.cs

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using Microsoft.Azure.Commands.Compute.Models;
1717
using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
1818
using System.Management.Automation;
19+
using System.Linq;
1920

2021
namespace Microsoft.Azure.Commands.Compute
2122
{
@@ -44,7 +45,7 @@ public class GetAzureVMExtensionCommand : VirtualMachineExtensionBaseCmdlet
4445

4546
[Alias("ExtensionName")]
4647
[Parameter(
47-
Mandatory = true,
48+
Mandatory = false,
4849
Position = 2,
4950
ValueFromPipelineByPropertyName = true,
5051
HelpMessage = "The extension name.")]
@@ -65,16 +66,32 @@ public override void ExecuteCmdlet()
6566

6667
ExecuteClientAction(() =>
6768
{
68-
if (Status.IsPresent)
69+
if (!string.IsNullOrEmpty(Name))
6970
{
70-
var result = this.VirtualMachineExtensionClient.GetWithInstanceView(this.ResourceGroupName, this.VMName, this.Name);
71-
WriteObject(result.ToPSVirtualMachineExtension(this.ResourceGroupName, this.VMName));
71+
if (Status.IsPresent)
72+
{
73+
var result = this.VirtualMachineExtensionClient.GetWithInstanceView(this.ResourceGroupName, this.VMName, this.Name);
74+
WriteObject(result.ToPSVirtualMachineExtension(this.ResourceGroupName, this.VMName));
75+
}
76+
else
77+
{
78+
var result = this.VirtualMachineExtensionClient.GetWithHttpMessagesAsync(this.ResourceGroupName,
79+
this.VMName, this.Name).GetAwaiter().GetResult();
80+
WriteObject(result.ToPSVirtualMachineExtension(this.ResourceGroupName, this.VMName));
81+
}
7282
}
7383
else
7484
{
75-
var result = this.VirtualMachineExtensionClient.GetWithHttpMessagesAsync(this.ResourceGroupName,
76-
this.VMName, this.Name).GetAwaiter().GetResult();
77-
WriteObject(result.ToPSVirtualMachineExtension(this.ResourceGroupName, this.VMName));
85+
if (Status.IsPresent)
86+
{
87+
var result = this.VirtualMachineExtensionClient.ListWithInstanceView(this.ResourceGroupName, this.VMName).Body.Value;
88+
WriteObject(result.ToList().Select(t => t.ToPSVirtualMachineExtension(this.ResourceGroupName, this.VMName)), true);
89+
}
90+
else
91+
{
92+
var result = this.VirtualMachineExtensionClient.ListWithHttpMessagesAsync(this.ResourceGroupName, this.VMName).GetAwaiter().GetResult().Body.Value;
93+
WriteObject(result.ToList().Select(t => t.ToPSVirtualMachineExtension(this.ResourceGroupName, this.VMName)), true);
94+
}
7895
}
7996
});
8097
}

src/Compute/Compute/help/Get-AzVMExtension.md

Lines changed: 64 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
---
1+
---
22
external help file: Microsoft.Azure.PowerShell.Cmdlets.Compute.dll-Help.xml
33
Module Name: Az.Compute
44
ms.assetid: 842652D4-0F1C-4D0D-AB55-0D43D3C5D82A
@@ -14,7 +14,7 @@ Gets properties of Virtual Machine Extensions installed on a virtual machine.
1414
## SYNTAX
1515

1616
```
17-
Get-AzVMExtension [-ResourceGroupName] <String> [-VMName] <String> [-Name] <String> [-Status]
17+
Get-AzVMExtension [-ResourceGroupName] <String> [-VMName] <String> [[-Name] <String>] [-Status]
1818
[-DefaultProfile <IAzureContextContainer>] [<CommonParameters>]
1919
```
2020

@@ -28,17 +28,78 @@ To get only the instance view of an extension, specify the Status parameter.
2828
### Example 1: Get properties of an extension
2929
```
3030
PS C:\> Get-AzVMExtension -ResourceGroupName "ResourceGroup11" -VMName "VirtualMachine22" -Name "CustomScriptExtension"
31+
32+
ResourceGroupName : ResourceGroup11
33+
VMName : VirtualMachine22
34+
Name : CustomScriptExtension
35+
Location : eastus
36+
Etag : null
37+
Publisher : Microsoft.Azure.Extensions
38+
ExtensionType : CustomScript
39+
TypeHandlerVersion : 2.0
40+
Id : /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ResourceGroup11
41+
/providers/Microsoft.Compute/virtualMachines/VirtualMachine22/extensions/CustomScriptExtension
42+
PublicSettings : {}
43+
ProtectedSettings :
44+
ProvisioningState : Succeeded
45+
Statuses :
46+
SubStatuses :
47+
AutoUpgradeMinorVersion : True
48+
ForceUpdateTag :
3149
```
3250

3351
This command gets properties for the extension named CustomScriptExtension on the virtual machine named VirtualMachine22 in the resource group ResourceGroup11.
3452

3553
### Example 2: Get instance view of an extension
3654
```
3755
PS C:\> Get-AzVMExtension -ResourceGroupName "ResourceGroup11" -VMName "VirtualMachine22" -Name "CustomScriptExtension" -Status
56+
57+
ResourceGroupName : ResourceGroup11
58+
VMName : VirtualMachine22
59+
Name : CustomScriptExtension
60+
Location : eastus
61+
Etag : null
62+
Publisher : Microsoft.Azure.Extensions
63+
ExtensionType : CustomScript
64+
TypeHandlerVersion : 2.0
65+
Id : /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ResourceGroup11
66+
/providers/Microsoft.Compute/virtualMachines/VirtualMachine22/extensions/CustomScriptExtension
67+
PublicSettings : {}
68+
ProtectedSettings :
69+
ProvisioningState : Succeeded
70+
Statuses : {Microsoft.Azure.Management.Compute.Models.InstanceViewStatus}
71+
SubStatuses :
72+
AutoUpgradeMinorVersion : True
73+
ForceUpdateTag :
3874
```
3975

4076
This command gets the instance view for the extension named CustomScriptExtension on the virtual machine named VirtualMachine22 in the resource group ResourceGroup11.
4177

78+
### Example 3: Get all extensions installed on a VM
79+
```
80+
PS C:\> Get-AzVMExtension -ResourceGroupName "ResourceGroup11" -VMName "VirtualMachine22"
81+
82+
ResourceGroupName : ResourceGroup11
83+
VMName : VirtualMachine22
84+
Name : CustomScriptExtension
85+
Location : eastus
86+
Etag : null
87+
Publisher : Microsoft.Azure.Extensions
88+
ExtensionType : CustomScript
89+
TypeHandlerVersion : 2.0
90+
Id : /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/ResourceGroup11
91+
/providers/Microsoft.Compute/virtualMachines/VirtualMachine22/extensions/CustomScriptExtension
92+
PublicSettings : {}
93+
ProtectedSettings :
94+
ProvisioningState : Succeeded
95+
Statuses :
96+
SubStatuses :
97+
AutoUpgradeMinorVersion : True
98+
ForceUpdateTag :
99+
```
100+
101+
This command gets the list of extensions installed on the virtual machine named VirtualMachine22 in the resource group ResourceGroup11.
102+
42103
## PARAMETERS
43104

44105
### -DefaultProfile
@@ -65,7 +126,7 @@ Type: System.String
65126
Parameter Sets: (All)
66127
Aliases: ExtensionName
67128

68-
Required: True
129+
Required: False
69130
Position: 2
70131
Default value: None
71132
Accept pipeline input: True (ByPropertyName)

tools/CredScanSuppressions.json

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,6 +1130,10 @@
11301130
"file": "src\\Compute\\Compute.Test\\SessionRecords\\Microsoft.Azure.Commands.Compute.Test.ScenarioTests.AEMExtensionTests\\TestAEMExtensionAdvancedLinuxMD_ESeries.json",
11311131
"_justification": "Mocked test resource. The resources are being deleted after the test run in Record mode."
11321132
},
1133+
{
1134+
"file": "src\\Compute\\Compute.Test\\SessionRecords\\Microsoft.Azure.Commands.Compute.Test.ScenarioTests.VirtualMachineExtensionTests\\TestVirtualMachineExtension.json",
1135+
"_justification": "Mocked test resource. The resources are being deleted after the test run in Record mode."
1136+
},
11331137
{
11341138
"file": "\\src\\Resources\\Resources.Test\\ScenarioTests\\certificate.pfx",
11351139
"_justification": "Legitimate test certificate."
@@ -1138,17 +1142,17 @@
11381142
"file": "\\src\\DataMigration\\DataMigration.Test\\SessionRecords\\Microsoft.Azure.Commands.ScenarioTest.DmsTest.ServiceTests\\TestConnectToTargetSqlDbMiSync.json",
11391143
"_justification": "Legitimate session record, Key will be revoked after test"
11401144
},
1141-
{
1145+
{
11421146
"file": "\\src\\DataMigration\\DataMigration.Test\\SessionRecords\\Microsoft.Azure.Commands.ScenarioTest.DmsTest.ServiceTests\\TestMigrateSqlSqlDbMiSync.json",
11431147
"_justification": "Legitimate session record, Key will be revoked after test"
11441148
},
1145-
{
1149+
{
11461150
"file": "\\src\\DataMigration\\DataMigration.Test\\SessionRecords\\Microsoft.Azure.Commands.ScenarioTest.DmsTest.ServiceTests\\TestValidateMigrationInputSqlSqlDbMiSync.json",
11471151
"_justification": "Legitimate session record, Key will be revoked after test"
11481152
},
1149-
{
1153+
{
11501154
"file": "\\src\\DataMigration\\DataMigration.Test\\SessionRecords\\Microsoft.Azure.Commands.ScenarioTest.DmsTest.ServiceTests\\TestMigrateSqlSqlDbMiSync.json",
11511155
"_justification": "Legitimate session record, Key will be revoked after test"
11521156
}
11531157
]
1154-
}
1158+
}

0 commit comments

Comments
 (0)