Skip to content

Commit 0763960

Browse files
author
Rachid Cesin Gorostieta
committed
Update AzureRmResourceGroup cmdlets
1 parent 0ae86b9 commit 0763960

File tree

10 files changed

+122
-148
lines changed

10 files changed

+122
-148
lines changed

src/ResourceManager/Resources/Commands.Resources.Test/ResourceGroups/GetAzureResourceGroupCommandTests.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class GetAzureResourceGroupCommandTests : RMTestBase
3131
private Mock<ICommandRuntime> commandRuntimeMock;
3232

3333
private string resourceGroupName = "myResourceGroup";
34+
private string resourceGroupId = "/subscriptions/subId/resourceGroups/myResourceGroup";
3435

3536
private string resourceGroupLocation = "West US";
3637

@@ -57,7 +58,7 @@ public void GetsResourcesGroups()
5758
Resources = new List<PSResource>() { new PSResource() { Name = "resource1" } }
5859
};
5960
result.Add(expected);
60-
resourcesClientMock.Setup(f => f.FilterResourceGroups(resourceGroupName, null, true)).Returns(result);
61+
resourcesClientMock.Setup(f => f.FilterResourceGroups(resourceGroupName, null, true, null)).Returns(result);
6162

6263
cmdlet.Name = resourceGroupName;
6364

@@ -70,5 +71,29 @@ public void GetsResourcesGroups()
7071

7172
commandRuntimeMock.Verify(f => f.WriteObject(result, true), Times.Once());
7273
}
74+
75+
[Fact]
76+
[Trait(Category.AcceptanceType, Category.CheckIn)]
77+
public void GetsResourcesGroupsById()
78+
{
79+
List<PSResourceGroup> result = new List<PSResourceGroup>();
80+
PSResourceGroup expected = new PSResourceGroup()
81+
{
82+
Location = resourceGroupLocation,
83+
ResourceGroupName = resourceGroupName,
84+
Resources = new List<PSResource>() { new PSResource() { Name = "resource1" } }
85+
};
86+
result.Add(expected);
87+
resourcesClientMock.Setup(f => f.FilterResourceGroups(null, null, true, null)).Returns(result);
88+
89+
cmdlet.Id = resourceGroupId;
90+
91+
cmdlet.ExecuteCmdlet();
92+
93+
Assert.Equal(1, result.Count);
94+
Assert.Equal(resourceGroupName, result[0].ResourceGroupName);
95+
Assert.Equal(resourceGroupLocation, result[0].Location);
96+
Assert.Equal(1, result[0].Resources.Count);
97+
}
7398
}
7499
}

src/ResourceManager/Resources/Commands.Resources.Test/ResourceGroups/NewAzureResourceGroupCommandTests.cs

Lines changed: 0 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -62,97 +62,5 @@ public NewAzureResourceGroupCommandTests()
6262
}
6363
};
6464
}
65-
66-
[Fact]
67-
[Trait(Category.AcceptanceType, Category.CheckIn)]
68-
public void CreatesNewPSResourceGroupWithUserTemplate()
69-
{
70-
CreatePSResourceGroupParameters expectedParameters = new CreatePSResourceGroupParameters()
71-
{
72-
ResourceGroupName = resourceGroupName,
73-
Location = resourceGroupLocation,
74-
TemplateFile = templateFile,
75-
DeploymentName = deploymentName,
76-
StorageAccountName = storageAccountName,
77-
TemplateVersion = "1.0",
78-
Tag = tags
79-
};
80-
CreatePSResourceGroupParameters actualParameters = new CreatePSResourceGroupParameters();
81-
PSResourceGroup expected = new PSResourceGroup()
82-
{
83-
Location = expectedParameters.Location,
84-
ResourceGroupName = expectedParameters.ResourceGroupName,
85-
Resources = new List<PSResource>() { new PSResource() { Name = "resource1" } },
86-
Tags = expectedParameters.Tag
87-
};
88-
resourcesClientMock.Setup(f => f.CreatePSResourceGroup(It.IsAny<CreatePSResourceGroupParameters>()))
89-
.Returns(expected)
90-
.Callback((CreatePSResourceGroupParameters p) => { actualParameters = p; });
91-
92-
cmdlet.Name = expectedParameters.ResourceGroupName;
93-
cmdlet.Location = expectedParameters.Location;
94-
cmdlet.TemplateFile = expectedParameters.TemplateFile;
95-
cmdlet.DeploymentName = expectedParameters.DeploymentName;
96-
cmdlet.TemplateVersion = expectedParameters.TemplateVersion;
97-
cmdlet.Tag = expectedParameters.Tag;
98-
99-
cmdlet.ExecuteCmdlet();
100-
101-
Assert.Equal(expectedParameters.ResourceGroupName, actualParameters.ResourceGroupName);
102-
Assert.Equal(expectedParameters.Location, actualParameters.Location);
103-
Assert.Equal(expectedParameters.DeploymentName, actualParameters.DeploymentName);
104-
Assert.Equal(expectedParameters.GalleryTemplateIdentity, actualParameters.GalleryTemplateIdentity);
105-
Assert.Equal(expectedParameters.TemplateFile, actualParameters.TemplateFile);
106-
Assert.NotNull(actualParameters.TemplateParameterObject);
107-
Assert.Equal(expectedParameters.TemplateVersion, actualParameters.TemplateVersion);
108-
Assert.Equal(null, actualParameters.StorageAccountName);
109-
Assert.Equal(expectedParameters.Tag, actualParameters.Tag);
110-
111-
commandRuntimeMock.Verify(f => f.WriteObject(expected), Times.Once());
112-
}
113-
114-
[Fact]
115-
[Trait(Category.AcceptanceType, Category.CheckIn)]
116-
public void CreatesNewPSResourceGroupWithGalleryTemplate()
117-
{
118-
CreatePSResourceGroupParameters expectedParameters = new CreatePSResourceGroupParameters()
119-
{
120-
ResourceGroupName = resourceGroupName,
121-
Location = resourceGroupLocation,
122-
GalleryTemplateIdentity = "sqlServer",
123-
DeploymentName = deploymentName,
124-
StorageAccountName = storageAccountName,
125-
TemplateVersion = "1.0"
126-
};
127-
CreatePSResourceGroupParameters actualParameters = new CreatePSResourceGroupParameters();
128-
PSResourceGroup expected = new PSResourceGroup()
129-
{
130-
Location = expectedParameters.Location,
131-
ResourceGroupName = expectedParameters.ResourceGroupName,
132-
Resources = new List<PSResource>() { new PSResource() { Name = "resource1" } }
133-
};
134-
resourcesClientMock.Setup(f => f.CreatePSResourceGroup(It.IsAny<CreatePSResourceGroupParameters>()))
135-
.Returns(expected)
136-
.Callback((CreatePSResourceGroupParameters p) => { actualParameters = p; });
137-
138-
cmdlet.Name = expectedParameters.ResourceGroupName;
139-
cmdlet.Location = expectedParameters.Location;
140-
cmdlet.GalleryTemplateIdentity = expectedParameters.GalleryTemplateIdentity;
141-
cmdlet.DeploymentName = expectedParameters.DeploymentName;
142-
cmdlet.TemplateVersion = expectedParameters.TemplateVersion;
143-
144-
cmdlet.ExecuteCmdlet();
145-
146-
Assert.Equal(expectedParameters.ResourceGroupName, actualParameters.ResourceGroupName);
147-
Assert.Equal(expectedParameters.Location, actualParameters.Location);
148-
Assert.Equal(expectedParameters.DeploymentName, actualParameters.DeploymentName);
149-
Assert.Equal(expectedParameters.GalleryTemplateIdentity, actualParameters.GalleryTemplateIdentity);
150-
Assert.Equal(expectedParameters.TemplateFile, actualParameters.TemplateFile);
151-
Assert.NotNull(actualParameters.TemplateParameterObject);
152-
Assert.Equal(expectedParameters.TemplateVersion, actualParameters.TemplateVersion);
153-
Assert.Equal(null, actualParameters.StorageAccountName);
154-
155-
commandRuntimeMock.Verify(f => f.WriteObject(expected), Times.Once());
156-
}
15765
}
15866
}

src/ResourceManager/Resources/Commands.Resources.Test/ResourceGroups/RemoveAzureResourceGroupCommandTests.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public class RemoveAzureResourceGroupCommandTests : RMTestBase
3030
private Mock<ICommandRuntime> commandRuntimeMock;
3131

3232
private string resourceGroupName = "myResourceGroup";
33+
private string resourceGroupId = "/subscriptions/subId/resourceGroups/myResourceGroup";
3334

3435
public RemoveAzureResourceGroupCommandTests()
3536
{
@@ -58,5 +59,22 @@ public void RemovesResourceGroup()
5859
resourcesClientMock.Verify(f => f.DeleteResourceGroup(resourceGroupName), Times.Once());
5960
commandRuntimeMock.Verify(f => f.WriteObject(true), Times.Once());
6061
}
62+
63+
[Fact]
64+
[Trait(Category.AcceptanceType, Category.CheckIn)]
65+
public void RemovesResourceGroupFromId()
66+
{
67+
commandRuntimeMock.Setup(f => f.ShouldProcess(It.IsAny<string>(), It.IsAny<string>())).Returns(true);
68+
resourcesClientMock.Setup(f => f.DeleteResourceGroup(resourceGroupName));
69+
70+
cmdlet.Id = resourceGroupId;
71+
cmdlet.PassThru = true;
72+
cmdlet.Force = true;
73+
74+
cmdlet.ExecuteCmdlet();
75+
76+
resourcesClientMock.Verify(f => f.DeleteResourceGroup(resourceGroupName), Times.Once());
77+
commandRuntimeMock.Verify(f => f.WriteObject(true), Times.Once());
78+
}
6179
}
6280
}

src/ResourceManager/Resources/Commands.Resources.Test/ResourceGroups/SetAzureResourceGroupCommandTests.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class SetAzureResourceGroupCommandTests : RMTestBase
3333
private Mock<ICommandRuntime> commandRuntimeMock;
3434

3535
private string resourceGroupName = "myResourceGroup";
36+
private string resourceGroupId = "/subscriptions/subId/resourceGroups/myResourceGroup";
3637

3738
private List<Hashtable> tags;
3839

@@ -83,5 +84,36 @@ public void UpdatesSetPSResourceGroupWithTag()
8384

8485
commandRuntimeMock.Verify(f => f.WriteObject(expected), Times.Once());
8586
}
87+
88+
[Fact]
89+
[Trait(Category.AcceptanceType, Category.CheckIn)]
90+
public void UpdatesSetPSResourceGroupWithTagFromId()
91+
{
92+
UpdatePSResourceGroupParameters expectedParameters = new UpdatePSResourceGroupParameters()
93+
{
94+
ResourceGroupName = resourceGroupName,
95+
Tag = tags.ToArray()
96+
};
97+
UpdatePSResourceGroupParameters actualParameters = new UpdatePSResourceGroupParameters();
98+
PSResourceGroup expected = new PSResourceGroup()
99+
{
100+
ResourceGroupName = expectedParameters.ResourceGroupName,
101+
Resources = new List<PSResource>() { new PSResource() { Name = "resource1" } },
102+
Tags = expectedParameters.Tag
103+
};
104+
resourcesClientMock.Setup(f => f.UpdatePSResourceGroup(It.IsAny<UpdatePSResourceGroupParameters>()))
105+
.Returns(expected)
106+
.Callback((UpdatePSResourceGroupParameters p) => { actualParameters = p; });
107+
108+
cmdlet.Id = resourceGroupId;
109+
cmdlet.Tag = expectedParameters.Tag;
110+
111+
cmdlet.ExecuteCmdlet();
112+
113+
Assert.Equal(expectedParameters.ResourceGroupName, actualParameters.ResourceGroupName);
114+
Assert.Equal(expectedParameters.Tag, actualParameters.Tag);
115+
116+
commandRuntimeMock.Verify(f => f.WriteObject(expected), Times.Once());
117+
}
86118
}
87119
}

src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/ResourceGroupTests.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,6 @@ public void TestNewDeploymentAndProviderRegistration()
7575
ResourcesController.NewInstance.RunPsTest("Test-NewDeploymentAndProviderRegistration");
7676
}
7777

78-
[Fact]
79-
public void TestNewResourceGroupWithTemplate()
80-
{
81-
ResourcesController.NewInstance.RunPsTest("Test-NewResourceGroupWithTemplateThenGetWithAndWithoutDetails");
82-
}
83-
8478
[Fact]
8579
public void TestRemoveDeployment()
8680
{

src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/ResourceGroupTests.ps1

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -251,42 +251,4 @@ function Test-RemoveDeployment
251251
# Cleanup
252252
Clean-ResourceGroup $rgName
253253
}
254-
}
255-
256-
function Test-NewResourceGroupWithTemplateThenGetWithAndWithoutDetails
257-
{
258-
# Setup
259-
$rgname = Get-ResourceGroupName
260-
$websiteName = Get-ResourceName
261-
$location = Get-ProviderLocation ResourceManagement
262-
$templateFile = "Resources\EmptyWebsiteTemplate.json"
263-
264-
try
265-
{
266-
# Test
267-
$actual = New-AzureRmResourceGroup -Name $rgname -Location $location -TemplateFile $templateFile `
268-
-siteName $websiteName -hostingPlanName "test" -siteLocation "West US" `
269-
-Tag @{ Name = "testtag"; Value = "testval" }
270-
271-
$expected1 = Get-AzureRmResourceGroup -Name $rgname
272-
# Assert
273-
Assert-AreEqual $expected1.ResourceGroupName $actual.ResourceGroupName
274-
Assert-AreEqual $expected1.Tags[0]["Name"] $actual.Tags[0]["Name"]
275-
Assert-AreEqual $expected1.Resources.Count 2
276-
277-
$expected2 = Get-AzureRmResourceGroup
278-
# Assert
279-
Assert-AreEqual $expected2[0].Resources.Count 0
280-
281-
$expected3 = Get-AzureRmResourceGroup -Detailed
282-
$names = $expected3 | Select-Object -ExpandProperty ResourceGroupName
283-
$index = [Array]::IndexOf($names, $expected1.ResourceGroupName)
284-
# Assert
285-
Assert-AreEqual $expected3[$index].Resources.Count 2
286-
}
287-
finally
288-
{
289-
# Cleanup
290-
Clean-ResourceGroup $rgname
291-
}
292254
}

src/ResourceManager/Resources/Commands.Resources/Models.ResourceGroups/ResourceClient.ResourceManager.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,10 +342,12 @@ private string GenerateDeploymentName(CreatePSResourceGroupDeploymentParameters
342342
/// <param name="name">The resource group name.</param>
343343
/// <param name="tag">The resource group tag.</param>
344344
/// <param name="detailed">Whether the return is detailed or not.</param>
345+
/// <param name="location">The resource group location.</param>
345346
/// <returns>The filtered resource groups</returns>
346-
public virtual List<PSResourceGroup> FilterResourceGroups(string name, Hashtable tag, bool detailed)
347+
public virtual List<PSResourceGroup> FilterResourceGroups(string name, Hashtable tag, bool detailed, string location = null)
347348
{
348349
List<PSResourceGroup> result = new List<PSResourceGroup>();
350+
349351
if (string.IsNullOrEmpty(name))
350352
{
351353
var response = ResourceManagementClient.ResourceGroups.List(null);
@@ -356,6 +358,10 @@ public virtual List<PSResourceGroup> FilterResourceGroups(string name, Hashtable
356358
resourceGroups.AddRange(response.ResourceGroups);
357359
}
358360

361+
resourceGroups = !string.IsNullOrEmpty(location)
362+
? resourceGroups.Where(resourceGroup => this.NormalizeLetterOrDigitToUpperInvariant(resourceGroup.Location).Equals(this.NormalizeLetterOrDigitToUpperInvariant(location))).ToList()
363+
: resourceGroups;
364+
359365
// TODO: Replace with server side filtering when available
360366
if (tag != null && tag.Count >= 1)
361367
{

src/ResourceManager/Resources/Commands.Resources/ResourceGroups/GetAzureResourceGroupCommand.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@
1313
// ----------------------------------------------------------------------------------
1414

1515
using Microsoft.Azure.Commands.Resources.Models;
16-
using System.Collections;
1716
using System.Collections.Generic;
1817
using System.Management.Automation;
1918

2019
namespace Microsoft.Azure.Commands.Resources
2120
{
21+
using System.Linq;
22+
2223
/// <summary>
2324
/// Filters resource groups.
2425
/// </summary>
@@ -30,25 +31,33 @@ public class GetAzureResourceGroupCommand : ResourcesBaseCmdlet
3031
[ValidateNotNullOrEmpty]
3132
public string Name { get; set; }
3233

33-
[Parameter(Position = 0, Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = "GetMultiple")]
34-
public Hashtable Tag { get; set; }
34+
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The resource group location.")]
35+
[ValidateNotNullOrEmpty]
36+
public string Location { get; set; }
37+
38+
[Alias("ResourceGroupId", "ResourceId")]
39+
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The resource group Id.")]
40+
[ValidateNotNullOrEmpty]
41+
public string Id { get; set; }
3542

3643
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = "GetMultiple")]
3744
public SwitchParameter Detailed { get; set; }
3845

3946
protected override void ProcessRecord()
4047
{
41-
if(this.Tag != null)
42-
{
43-
WriteWarning("The Tag parameter is being deprecated and will be removed in a future release.");
44-
}
4548
if(this.Detailed.IsPresent)
4649
{
4750
WriteWarning("The Detailed switch parameter is being deprecated and will be removed in a future release.");
4851
}
4952
WriteWarning("The output object of this cmdlet will be modified in a future release.");
5053
var detailed = Detailed.IsPresent || !string.IsNullOrEmpty(Name);
51-
WriteObject(ResourcesClient.FilterResourceGroups(Name, Tag, detailed), true);
54+
Name = string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Id)
55+
? Id.Split('/').Last()
56+
: Name;
57+
58+
this.WriteObject(
59+
ResourcesClient.FilterResourceGroups(name: this.Name, tag: null, detailed: detailed, location: this.Location),
60+
true);
5261
}
5362
}
5463
}

src/ResourceManager/Resources/Commands.Resources/ResourceGroups/RemoveAzureResourceGroupCommand.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
namespace Microsoft.Azure.Commands.Resources
2020
{
21+
using System.Linq;
22+
2123
/// <summary>
2224
/// Removes a new resource group.
2325
/// </summary>
@@ -29,6 +31,11 @@ public class RemoveAzureResourceGroupCommand : ResourcesBaseCmdlet
2931
[ValidateNotNullOrEmpty]
3032
public string Name {get; set;}
3133

34+
[Alias("ResourceGroupId", "ResourceId")]
35+
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = false, HelpMessage = "The resource group Id.")]
36+
[ValidateNotNullOrEmpty]
37+
public string Id { get; set; }
38+
3239
[Parameter(Mandatory = false, HelpMessage = "Do not ask for confirmation.")]
3340
public SwitchParameter Force { get; set; }
3441

@@ -37,6 +44,10 @@ public class RemoveAzureResourceGroupCommand : ResourcesBaseCmdlet
3744

3845
protected override void ProcessRecord()
3946
{
47+
Name = string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Id)
48+
? Id.Split('/').Last()
49+
: Name;
50+
4051
ConfirmAction(
4152
Force.IsPresent,
4253
string.Format(ProjectResources.RemovingResourceGroup, Name),

0 commit comments

Comments
 (0)