Skip to content

Update the AzureRmResourceGroup cmdlets parameters #1039

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Oct 2, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public class GetAzureResourceGroupCommandTests : RMTestBase
private Mock<ICommandRuntime> commandRuntimeMock;

private string resourceGroupName = "myResourceGroup";
private string resourceGroupId = "/subscriptions/subId/resourceGroups/myResourceGroup";

private string resourceGroupLocation = "West US";

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

cmdlet.Name = resourceGroupName;

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

commandRuntimeMock.Verify(f => f.WriteObject(result, true), Times.Once());
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void GetsResourcesGroupsById()
{
List<PSResourceGroup> result = new List<PSResourceGroup>();
PSResourceGroup expected = new PSResourceGroup()
{
Location = resourceGroupLocation,
ResourceGroupName = resourceGroupName,
Resources = new List<PSResource>() { new PSResource() { Name = "resource1" } }
};
result.Add(expected);
resourcesClientMock.Setup(f => f.FilterResourceGroups(null, null, true, null)).Returns(result);

cmdlet.Id = resourceGroupId;

cmdlet.ExecuteCmdlet();

Assert.Equal(1, result.Count);
Assert.Equal(resourceGroupName, result[0].ResourceGroupName);
Assert.Equal(resourceGroupLocation, result[0].Location);
Assert.Equal(1, result[0].Resources.Count);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public NewAzureResourceGroupCommandTests()

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void CreatesNewPSResourceGroupWithUserTemplate()
public void CreatesNewPSResourceGroup()
{
CreatePSResourceGroupParameters expectedParameters = new CreatePSResourceGroupParameters()
{
Expand All @@ -89,17 +89,12 @@ public void CreatesNewPSResourceGroupWithUserTemplate()

cmdlet.Name = expectedParameters.ResourceGroupName;
cmdlet.Location = expectedParameters.Location;
cmdlet.TemplateFile = expectedParameters.TemplateFile;
cmdlet.DeploymentName = expectedParameters.DeploymentName;
cmdlet.Tag = expectedParameters.Tag;

cmdlet.ExecuteCmdlet();

Assert.Equal(expectedParameters.ResourceGroupName, actualParameters.ResourceGroupName);
Assert.Equal(expectedParameters.Location, actualParameters.Location);
Assert.Equal(expectedParameters.DeploymentName, actualParameters.DeploymentName);
Assert.Equal(expectedParameters.TemplateFile, actualParameters.TemplateFile);
Assert.NotNull(actualParameters.TemplateParameterObject);
Assert.Equal(expectedParameters.Tag, actualParameters.Tag);

commandRuntimeMock.Verify(f => f.WriteObject(expected), Times.Once());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class RemoveAzureResourceGroupCommandTests : RMTestBase
private Mock<ICommandRuntime> commandRuntimeMock;

private string resourceGroupName = "myResourceGroup";
private string resourceGroupId = "/subscriptions/subId/resourceGroups/myResourceGroup";

public RemoveAzureResourceGroupCommandTests()
{
Expand All @@ -50,13 +51,26 @@ public void RemovesResourceGroup()
resourcesClientMock.Setup(f => f.DeleteResourceGroup(resourceGroupName));

cmdlet.Name = resourceGroupName;
cmdlet.PassThru = true;
cmdlet.Force = true;

cmdlet.ExecuteCmdlet();

resourcesClientMock.Verify(f => f.DeleteResourceGroup(resourceGroupName), Times.Once());
commandRuntimeMock.Verify(f => f.WriteObject(true), Times.Once());
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void RemovesResourceGroupFromId()
{
commandRuntimeMock.Setup(f => f.ShouldProcess(It.IsAny<string>(), It.IsAny<string>())).Returns(true);
resourcesClientMock.Setup(f => f.DeleteResourceGroup(resourceGroupName));

cmdlet.Id = resourceGroupId;
cmdlet.Force = true;

cmdlet.ExecuteCmdlet();

resourcesClientMock.Verify(f => f.DeleteResourceGroup(resourceGroupName), Times.Once());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public class SetAzureResourceGroupCommandTests : RMTestBase
private Mock<ICommandRuntime> commandRuntimeMock;

private string resourceGroupName = "myResourceGroup";
private string resourceGroupId = "/subscriptions/subId/resourceGroups/myResourceGroup";

private List<Hashtable> tags;

Expand Down Expand Up @@ -83,5 +84,36 @@ public void UpdatesSetPSResourceGroupWithTag()

commandRuntimeMock.Verify(f => f.WriteObject(expected), Times.Once());
}

[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void UpdatesSetPSResourceGroupWithTagFromId()
{
UpdatePSResourceGroupParameters expectedParameters = new UpdatePSResourceGroupParameters()
{
ResourceGroupName = resourceGroupName,
Tag = tags.ToArray()
};
UpdatePSResourceGroupParameters actualParameters = new UpdatePSResourceGroupParameters();
PSResourceGroup expected = new PSResourceGroup()
{
ResourceGroupName = expectedParameters.ResourceGroupName,
Resources = new List<PSResource>() { new PSResource() { Name = "resource1" } },
Tags = expectedParameters.Tag
};
resourcesClientMock.Setup(f => f.UpdatePSResourceGroup(It.IsAny<UpdatePSResourceGroupParameters>()))
.Returns(expected)
.Callback((UpdatePSResourceGroupParameters p) => { actualParameters = p; });

cmdlet.Id = resourceGroupId;
cmdlet.Tag = expectedParameters.Tag;

cmdlet.ExecuteCmdlet();

Assert.Equal(expectedParameters.ResourceGroupName, actualParameters.ResourceGroupName);
Assert.Equal(expectedParameters.Tag, actualParameters.Tag);

commandRuntimeMock.Verify(f => f.WriteObject(expected), Times.Once());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,6 @@ public void TestNewDeploymentAndProviderRegistration()
ResourcesController.NewInstance.RunPsTest("Test-NewDeploymentAndProviderRegistration");
}

[Fact]
public void TestNewResourceGroupWithTemplate()
{
ResourcesController.NewInstance.RunPsTest("Test-NewResourceGroupWithTemplateThenGetWithAndWithoutDetails");
}

[Fact]
public void TestRemoveDeployment()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,42 +251,4 @@ function Test-RemoveDeployment
# Cleanup
Clean-ResourceGroup $rgName
}
}

function Test-NewResourceGroupWithTemplateThenGetWithAndWithoutDetails
{
# Setup
$rgname = Get-ResourceGroupName
$websiteName = Get-ResourceName
$location = Get-ProviderLocation ResourceManagement
$templateFile = "Resources\EmptyWebsiteTemplate.json"

try
{
# Test
$actual = New-AzureRmResourceGroup -Name $rgname -Location $location -TemplateFile $templateFile `
-siteName $websiteName -hostingPlanName "test" -siteLocation "West US" `
-Tag @{ Name = "testtag"; Value = "testval" }

$expected1 = Get-AzureRmResourceGroup -Name $rgname
# Assert
Assert-AreEqual $expected1.ResourceGroupName $actual.ResourceGroupName
Assert-AreEqual $expected1.Tags[0]["Name"] $actual.Tags[0]["Name"]
Assert-AreEqual $expected1.Resources.Count 2

$expected2 = Get-AzureRmResourceGroup
# Assert
Assert-AreEqual $expected2[0].Resources.Count 0

$expected3 = Get-AzureRmResourceGroup -Detailed
$names = $expected3 | Select-Object -ExpandProperty ResourceGroupName
$index = [Array]::IndexOf($names, $expected1.ResourceGroupName)
# Assert
Assert-AreEqual $expected3[$index].Resources.Count 2
}
finally
{
# Cleanup
Clean-ResourceGroup $rgname
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -342,10 +342,12 @@ private string GenerateDeploymentName(CreatePSResourceGroupDeploymentParameters
/// <param name="name">The resource group name.</param>
/// <param name="tag">The resource group tag.</param>
/// <param name="detailed">Whether the return is detailed or not.</param>
/// <param name="location">The resource group location.</param>
/// <returns>The filtered resource groups</returns>
public virtual List<PSResourceGroup> FilterResourceGroups(string name, Hashtable tag, bool detailed)
public virtual List<PSResourceGroup> FilterResourceGroups(string name, Hashtable tag, bool detailed, string location = null)
{
List<PSResourceGroup> result = new List<PSResourceGroup>();

if (string.IsNullOrEmpty(name))
{
var response = ResourceManagementClient.ResourceGroups.List(null);
Expand All @@ -356,6 +358,10 @@ public virtual List<PSResourceGroup> FilterResourceGroups(string name, Hashtable
resourceGroups.AddRange(response.ResourceGroups);
}

resourceGroups = !string.IsNullOrEmpty(location)
? resourceGroups.Where(resourceGroup => this.NormalizeLetterOrDigitToUpperInvariant(resourceGroup.Location).Equals(this.NormalizeLetterOrDigitToUpperInvariant(location))).ToList()
: resourceGroups;

// TODO: Replace with server side filtering when available
if (tag != null && tag.Count >= 1)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,42 +13,43 @@
// ----------------------------------------------------------------------------------

using Microsoft.Azure.Commands.Resources.Models;
using System.Collections;
using System.Collections.Generic;
using System.Management.Automation;

namespace Microsoft.Azure.Commands.Resources
{
using System.Linq;

/// <summary>
/// Filters resource groups.
/// </summary>
[Cmdlet(VerbsCommon.Get, "AzureRmResourceGroup"), OutputType(typeof(List<PSResourceGroup>))]
public class GetAzureResourceGroupCommand : ResourcesBaseCmdlet
{
[Alias("ResourceGroupName")]
[Parameter(Position = 0, Mandatory = true, ValueFromPipelineByPropertyName = true, ParameterSetName = "GetSingle")]
[Parameter(Position = 0, Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = "GetSingle")]
[ValidateNotNullOrEmpty]
public string Name { get; set; }

[Parameter(Position = 0, Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = "GetMultiple")]
public Hashtable Tag { get; set; }
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The resource group location.")]
[ValidateNotNullOrEmpty]
public string Location { get; set; }

[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, ParameterSetName = "GetMultiple")]
public SwitchParameter Detailed { get; set; }
[Alias("ResourceGroupId", "ResourceId")]
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The resource group Id.")]
[ValidateNotNullOrEmpty]
public string Id { get; set; }

protected override void ProcessRecord()
{
if(this.Tag != null)
{
WriteWarning("The Tag parameter is being deprecated and will be removed in a future release.");
}
if(this.Detailed.IsPresent)
{
WriteWarning("The Detailed switch parameter is being deprecated and will be removed in a future release.");
}
WriteWarning("The output object of this cmdlet will be modified in a future release.");
var detailed = Detailed.IsPresent || !string.IsNullOrEmpty(Name);
WriteObject(ResourcesClient.FilterResourceGroups(Name, Tag, detailed), true);
Name = string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Id)
? Id.Split('/').Last()
: Name;

this.WriteObject(
ResourcesClient.FilterResourceGroups(name: this.Name, tag: null, detailed: false, location: this.Location),
true);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,16 @@
using System.Collections;
using System.Management.Automation;
using Microsoft.Azure.Commands.Resources.Models;
using Microsoft.WindowsAzure.Commands.Utilities.Common;
using Microsoft.Azure.Commands.Resources.Models.ActiveDirectory;

namespace Microsoft.Azure.Commands.Resources
{

/// <summary>
/// Creates a new resource group.
/// </summary>
[Cmdlet(VerbsCommon.New, "AzureRmResourceGroup", DefaultParameterSetName = BaseParameterSetName), OutputType(typeof(PSResourceGroup))]
public class NewAzureResourceGroupCommand : ResourceWithParameterBaseCmdlet, IDynamicParameters
[Cmdlet(VerbsCommon.New, "AzureRmResourceGroup", DefaultParameterSetName = ParameterSet.Empty), OutputType(typeof(PSResourceGroup))]
public class NewAzureResourceGroupCommand : ResourcesBaseCmdlet
{
[Alias("ResourceGroupName")]
[Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The resource group name.")]
Expand All @@ -34,11 +35,6 @@ public class NewAzureResourceGroupCommand : ResourceWithParameterBaseCmdlet, IDy
[ValidateNotNullOrEmpty]
public string Location { get; set; }

[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true,
HelpMessage = "The name of the deployment it's going to create. Only valid when a template is used. When a template is used, if the user doesn't specify a deployment name, use the current time, like \"20131223140835\".")]
[ValidateNotNullOrEmpty]
public string DeploymentName { get; set; }

[Alias("Tags")]
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "An array of hashtables which represents resource tags.")]
public Hashtable[] Tag { get; set; }
Expand All @@ -52,18 +48,11 @@ protected override void ProcessRecord()
{
ResourceGroupName = Name,
Location = Location,
DeploymentName = DeploymentName,
TemplateFile = TemplateUri ?? this.TryResolvePath(TemplateFile),
TemplateParameterObject = GetTemplateParameterObject(TemplateParameterObject),
Force = Force.IsPresent,
Tag = Tag,
ConfirmAction = ConfirmAction
};
if(!string.IsNullOrEmpty(DeploymentName) || !string.IsNullOrEmpty(TemplateFile)
|| TemplateParameterObject != null)
{
WriteWarning("The deployment parameters in New-AzureRmResourceGroup cmdlet is being deprecated and will be removed in a future release. Please use New-AzureRmResourceGroupDeployment to submit deployments.");
}

WriteWarning("The output object of this cmdlet will be modified in a future release.");
WriteObject(ResourcesClient.CreatePSResourceGroup(parameters));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

namespace Microsoft.Azure.Commands.Resources
{
using System.Linq;

/// <summary>
/// Removes a new resource group.
/// </summary>
Expand All @@ -29,26 +31,26 @@ public class RemoveAzureResourceGroupCommand : ResourcesBaseCmdlet
[ValidateNotNullOrEmpty]
public string Name {get; set;}

[Alias("ResourceGroupId", "ResourceId")]
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = false, HelpMessage = "The resource group Id.")]
[ValidateNotNullOrEmpty]
public string Id { get; set; }

[Parameter(Mandatory = false, HelpMessage = "Do not ask for confirmation.")]
public SwitchParameter Force { get; set; }

[Parameter(Mandatory = false)]
public SwitchParameter PassThru { get; set; }

protected override void ProcessRecord()
{
Name = string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Id)
? Id.Split('/').Last()
: Name;

ConfirmAction(
Force.IsPresent,
string.Format(ProjectResources.RemovingResourceGroup, Name),
ProjectResources.RemoveResourceGroupMessage,
Name,
() => ResourcesClient.DeleteResourceGroup(Name));

if (PassThru)
{
WriteWarning("The PassThru switch parameter is being deprecated and will be removed in a future release.");
WriteObject(true);
}
}
}
}
Loading