From 26f9266cb271e5015aa534de27c9144d79874bdd Mon Sep 17 00:00:00 2001 From: namratab Date: Thu, 9 Apr 2015 10:19:11 -0700 Subject: [PATCH 1/6] Changes for New-AzureRoleDefinition commandlet that allows creating new roles --- .../Commands.Batch.Test.csproj | 6 +- .../Batch/Commands.Batch.Test/packages.config | 2 +- .../Commands.DataFactories.Test.csproj | 5 +- .../packages.config | 2 +- .../Commands.Resources.Test.csproj | 8 ++- .../Resources/NewRoleDefinition.json | 10 +++ .../ScenarioTests/RoleDefinitionTests.cs | 30 ++++++++ .../ScenarioTests/RoleDefinitionTests.ps1 | 51 ++++++++++++++ .../Commands.Resources.Test/packages.config | 2 +- .../Commands.Resources.csproj | 8 ++- .../Models.ActiveDirectory/ParameterSet.cs | 4 ++ .../AuthorizationClient.cs | 39 +++++++++++ .../AuthorizationClientExtensions.cs | 5 +- .../Models.Authorization/PSRoleDefinition.cs | 6 ++ .../Properties/Resources.Designer.cs | 15 +++- .../Properties/Resources.resx | 5 +- .../NewAzureRoleDefinitionCommand.cs | 68 +++++++++++++++++++ .../Commands.Resources/packages.config | 2 +- .../Commands.StreamAnalytics.Test.csproj | 5 +- .../packages.config | 2 +- .../Commands.Websites.Test.csproj | 5 +- .../Commands.Websites.Test/packages.config | 2 +- .../Commands.Websites.csproj | 4 +- .../Commands.Websites/packages.config | 2 +- 24 files changed, 261 insertions(+), 27 deletions(-) create mode 100644 src/ResourceManager/Resources/Commands.Resources.Test/Resources/NewRoleDefinition.json create mode 100644 src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.cs create mode 100644 src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.ps1 create mode 100644 src/ResourceManager/Resources/Commands.Resources/RoleDefinitions/NewAzureRoleDefinitionCommand.cs diff --git a/src/ResourceManager/Batch/Commands.Batch.Test/Commands.Batch.Test.csproj b/src/ResourceManager/Batch/Commands.Batch.Test/Commands.Batch.Test.csproj index 6353366a2768..0366bee5143b 100644 --- a/src/ResourceManager/Batch/Commands.Batch.Test/Commands.Batch.Test.csproj +++ b/src/ResourceManager/Batch/Commands.Batch.Test/Commands.Batch.Test.csproj @@ -59,8 +59,9 @@ ..\..\..\packages\Microsoft.Azure.Gallery.2.6.2-preview\lib\net40\Microsoft.Azure.Gallery.dll - - ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.0-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll + + False + ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.2-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll ..\..\..\packages\Microsoft.Azure.Management.Batch.1.3.0-preview\lib\net40\Microsoft.Azure.Management.Batch.dll @@ -181,6 +182,7 @@ + Designer diff --git a/src/ResourceManager/Batch/Commands.Batch.Test/packages.config b/src/ResourceManager/Batch/Commands.Batch.Test/packages.config index 24df294647be..c22d77749f60 100644 --- a/src/ResourceManager/Batch/Commands.Batch.Test/packages.config +++ b/src/ResourceManager/Batch/Commands.Batch.Test/packages.config @@ -6,7 +6,7 @@ - + diff --git a/src/ResourceManager/DataFactories/Commands.DataFactories.Test/Commands.DataFactories.Test.csproj b/src/ResourceManager/DataFactories/Commands.DataFactories.Test/Commands.DataFactories.Test.csproj index b302ade8023f..2386d559a69d 100644 --- a/src/ResourceManager/DataFactories/Commands.DataFactories.Test/Commands.DataFactories.Test.csproj +++ b/src/ResourceManager/DataFactories/Commands.DataFactories.Test/Commands.DataFactories.Test.csproj @@ -58,9 +58,9 @@ ..\..\..\packages\Microsoft.Azure.Gallery.2.6.0-preview\lib\net40\Microsoft.Azure.Gallery.dll ..\..\..\packages\Microsoft.Azure.Gallery.2.6.2-preview\lib\net40\Microsoft.Azure.Gallery.dll - + False - ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.0-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll + ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.2-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll ..\..\..\packages\Microsoft.Azure.Management.DataFactories.0.15.6-preview\lib\net40\Microsoft.Azure.Management.DataFactories.dll @@ -175,6 +175,7 @@ + Designer diff --git a/src/ResourceManager/DataFactories/Commands.DataFactories.Test/packages.config b/src/ResourceManager/DataFactories/Commands.DataFactories.Test/packages.config index affe0e6fc9ad..14cee67dbd7d 100644 --- a/src/ResourceManager/DataFactories/Commands.DataFactories.Test/packages.config +++ b/src/ResourceManager/DataFactories/Commands.DataFactories.Test/packages.config @@ -5,7 +5,7 @@ - + diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/Commands.Resources.Test.csproj b/src/ResourceManager/Resources/Commands.Resources.Test/Commands.Resources.Test.csproj index 61fb5be60a06..7c33d9f41661 100644 --- a/src/ResourceManager/Resources/Commands.Resources.Test/Commands.Resources.Test.csproj +++ b/src/ResourceManager/Resources/Commands.Resources.Test/Commands.Resources.Test.csproj @@ -63,8 +63,9 @@ False ..\..\..\packages\Microsoft.Azure.Graph.RBAC.1.7.0-preview\lib\net40\Microsoft.Azure.Graph.RBAC.dll - - ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.0-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll + + False + ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.2-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll ..\..\..\packages\Microsoft.Azure.Management.Resources.2.18.0-preview\lib\net40\Microsoft.Azure.ResourceManager.dll @@ -173,6 +174,7 @@ + @@ -245,6 +247,7 @@ PreserveNewest + PreserveNewest @@ -266,6 +269,7 @@ PreserveNewest + PreserveNewest diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/Resources/NewRoleDefinition.json b/src/ResourceManager/Resources/Commands.Resources.Test/Resources/NewRoleDefinition.json new file mode 100644 index 000000000000..8477dbd98b98 --- /dev/null +++ b/src/ResourceManager/Resources/Commands.Resources.Test/Resources/NewRoleDefinition.json @@ -0,0 +1,10 @@ +{ + "Name": "CustomRole Test Role", + "Description": "Test role", + "Actions": [ + "Microsoft.Authorization/*/read", + "Microsoft.Support/*" + ], + "NotActions": [], + "AssignableScopes": ["Scope1" , "Scope2"] +} \ No newline at end of file diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.cs b/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.cs new file mode 100644 index 000000000000..bc0b92ec21c3 --- /dev/null +++ b/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.cs @@ -0,0 +1,30 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + + +using Microsoft.WindowsAzure.Commands.ScenarioTest; +using Xunit; + +namespace Microsoft.Azure.Commands.Resources.Test.ScenarioTests +{ + public class RoleDefinitionTests + { + [Fact(Skip = "Not implemented")] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void RoleDefinitionCreateTests() + { + ResourcesController.NewInstance.RunPsTest("Test-RoleDefinitionCreateTests"); + } + } +} diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.ps1 b/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.ps1 new file mode 100644 index 000000000000..acf50029b927 --- /dev/null +++ b/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.ps1 @@ -0,0 +1,51 @@ +# ---------------------------------------------------------------------------------- +# +# Copyright Microsoft Corporation +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ---------------------------------------------------------------------------------- + + +<# +.SYNOPSIS +Tests verify scenarios for RoleDefinitions creation. +#> +function Test-RoleDefinitionCreateTests +{ + # Basic positive case - read from file + $rdName = 'CustomRole Test Role' + New-AzureRoleDefinition -InputFile .\Resources\NewRoleDefinition.json + $rd = Get-AzureRoleDefinition -Name $rdName + Assert-NotNull $rd + Assert-AreEqual "Test role" $rd.Description + Assert-AreEqual $true $rd.IsCustom + Assert-NotNull $rd.Actions + Assert-AreEqual "Microsoft.Authorization/*/read" $rd.Actions[0] + Assert-AreEqual "Microsoft.Support/*" $rd.Actions[1] + Assert-NotNull $rd.AssignableScopes + # The below scopes may need to be changed to actual scope values like /subscriptions/.... to satisfy the ARM access checks for PUT requests + Assert-AreEqual "Scope1" $rd.AssignableScopes[0] + Assert-AreEqual "Scope2" $rd.AssignableScopes[1] + + # Basic positive case - read from object + $roleDef = Get-AzureRoleDefinition -Name "Virtual Machine Contributor" + $roleDef.Id = $null + $roleDef.Name = "Virtual machine restarter" + $roleDef.Actions.Add("Microsoft.ClassicCompute/virtualMachines/restart/action") + $roleDef.Description = "Can monitor and restart virtual machines" + + New-AzureRoleDefinition -Role $roleDef + $addedRoleDef = Get-AzureRoleDefinition -Name "Virtual machine restarter" + + Assert-AreEqual $roleDef.Actions $addedRoleDef.Actions + Assert-AreEqual $roleDef.Description $addedRoleDef.Description + Assert-AreEqual $roleDef.AssignableScopes $addedRoleDef.AssignableScopes + Assert-AreEqual $true $roleDef.IsCustom +} diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/packages.config b/src/ResourceManager/Resources/Commands.Resources.Test/packages.config index c2bd66c11226..374b9a4acb92 100644 --- a/src/ResourceManager/Resources/Commands.Resources.Test/packages.config +++ b/src/ResourceManager/Resources/Commands.Resources.Test/packages.config @@ -6,7 +6,7 @@ - + diff --git a/src/ResourceManager/Resources/Commands.Resources/Commands.Resources.csproj b/src/ResourceManager/Resources/Commands.Resources/Commands.Resources.csproj index 1c9452c4d4ba..c60e247f7cf7 100644 --- a/src/ResourceManager/Resources/Commands.Resources/Commands.Resources.csproj +++ b/src/ResourceManager/Resources/Commands.Resources/Commands.Resources.csproj @@ -68,8 +68,9 @@ False ..\..\..\packages\Microsoft.Azure.Graph.RBAC.1.7.0-preview\lib\net40\Microsoft.Azure.Graph.RBAC.dll - - ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.0-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll + + False + ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.2-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll ..\..\..\packages\Microsoft.Azure.Management.Resources.2.18.0-preview\lib\net40\Microsoft.Azure.ResourceManager.dll @@ -186,7 +187,7 @@ - + @@ -198,6 +199,7 @@ + diff --git a/src/ResourceManager/Resources/Commands.Resources/Models.ActiveDirectory/ParameterSet.cs b/src/ResourceManager/Resources/Commands.Resources/Models.ActiveDirectory/ParameterSet.cs index fa16777fc0c8..ab606a7b9324 100644 --- a/src/ResourceManager/Resources/Commands.Resources/Models.ActiveDirectory/ParameterSet.cs +++ b/src/ResourceManager/Resources/Commands.Resources/Models.ActiveDirectory/ParameterSet.cs @@ -67,5 +67,9 @@ internal static class ParameterSet public const string ApplicationWithKeyCredential = "ApplicationWithKeyCredentialParameterSet"; public const string Empty = "EmptyParameterSet"; + + public const string InputFile = "InputFileParameterSet"; + + public const string RoleDefinition = "RoleDefinitionParameterSet"; } } diff --git a/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/AuthorizationClient.cs b/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/AuthorizationClient.cs index 027897d59f8d..fd7eb703044e 100644 --- a/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/AuthorizationClient.cs +++ b/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/AuthorizationClient.cs @@ -178,5 +178,44 @@ public PSRoleDefinition GetRoleRoleDefinition(string name) return role; } + + public PSRoleDefinition CreateRoleDefinition(PSRoleDefinition roleDefinition) + { + AuthorizationClient.ValidateRoleDefinition(roleDefinition); + + Guid newRoleDefinitionId = Guid.NewGuid(); + RoleDefinitionCreateOrUpdateParameters parameters = new RoleDefinitionCreateOrUpdateParameters() + { + RoleDefinition = new RoleDefinition() + { + Name = newRoleDefinitionId, + Properties = new RoleDefinitionProperties() + { + AssignableScopes = roleDefinition.AssignableScopes, + Description = roleDefinition.Description, + Permissions = new List() + { + new Permission() + { + Actions = roleDefinition.Actions, + NotActions = roleDefinition.NotActions + } + }, + RoleName = roleDefinition.Name, + Type = "CustomRole" + } + } + }; + + return AuthorizationManagementClient.RoleDefinitions.CreateOrUpdate(newRoleDefinitionId, parameters).RoleDefinition.ToPSRoleDefinition(); + } + + private static void ValidateRoleDefinition(PSRoleDefinition roleDefinition) + { + if (string.IsNullOrWhiteSpace(roleDefinition.Name)) + { + throw new ArgumentException(ProjectResources.InvalidRoleDefinitionName); + } + } } } diff --git a/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/AuthorizationClientExtensions.cs b/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/AuthorizationClientExtensions.cs index 3d5c1c0ec9ad..f84721b2c702 100644 --- a/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/AuthorizationClientExtensions.cs +++ b/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/AuthorizationClientExtensions.cs @@ -32,7 +32,10 @@ public static PSRoleDefinition ToPSRoleDefinition(this RoleDefinition role) Name = role.Properties.RoleName, Actions = new List(role.Properties.Permissions.SelectMany(r => r.Actions)), NotActions = new List(role.Properties.Permissions.SelectMany(r => r.NotActions)), - Id = role.Id + Id = role.Id, + AssignableScopes = role.Properties.AssignableScopes.ToList(), + Description = role.Properties.Description, + IsCustom = role.Properties.Type == "CustomRole" ? true : false }; } diff --git a/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/PSRoleDefinition.cs b/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/PSRoleDefinition.cs index d6b445feff0b..7787191290f2 100644 --- a/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/PSRoleDefinition.cs +++ b/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/PSRoleDefinition.cs @@ -22,8 +22,14 @@ public class PSRoleDefinition public string Id { get; set; } + public bool IsCustom { get; set; } + + public string Description { get; set; } + public List Actions { get; set; } public List NotActions { get; set; } + + public List AssignableScopes { get; set; } } } diff --git a/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.Designer.cs b/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.Designer.cs index 551b70c51f11..7283ab2b9b51 100644 --- a/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.Designer.cs +++ b/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.0 +// Runtime Version:4.0.30319.34014 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -150,6 +150,15 @@ internal static string InvalidFormatOfResourceId { } } + /// + /// Looks up a localized string similar to RoleDefinitionName is invalid. + /// + internal static string InvalidRoleDefinitionName { + get { + return ResourceManager.GetString("InvalidRoleDefinitionName", resourceCulture); + } + } + /// /// Looks up a localized string similar to Invalid tag format. Expect @{Name = "tagName"} or @{Name = "tagName"; Value = "tagValue"}. /// @@ -502,7 +511,7 @@ internal static string StorageAccountNameNeedsToBeSpecified { } /// - /// Looks up a localized string similar to A subscription with the Id '{0}' was not found. If this is a newly created subscription you will need to re-download your subscriptoins.. + /// Looks up a localized string similar to A subscription with the Id '{0}' was not found. If this is a newly created subscription you will need to re-download your subscriptions.. /// internal static string SubscriptionWithTheSpecifiedIdNotFount { get { @@ -511,7 +520,7 @@ internal static string SubscriptionWithTheSpecifiedIdNotFount { } /// - /// Looks up a localized string similar to A subscription with the name '{0}' was not found. If this is a newly created subscription you will need to re-download your subscriptoins.. + /// Looks up a localized string similar to A subscription with the name '{0}' was not found. If this is a newly created subscription you will need to re-download your subscriptions.. /// internal static string SubscriptionWithTheSpecifiedNameNotFount { get { diff --git a/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.resx b/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.resx index 9c3563d81283..de32443cf6ea 100644 --- a/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.resx +++ b/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.resx @@ -282,4 +282,7 @@ Registering provider feature ... - + + RoleDefinitionName is invalid + + \ No newline at end of file diff --git a/src/ResourceManager/Resources/Commands.Resources/RoleDefinitions/NewAzureRoleDefinitionCommand.cs b/src/ResourceManager/Resources/Commands.Resources/RoleDefinitions/NewAzureRoleDefinitionCommand.cs new file mode 100644 index 000000000000..a8c2fa9511ba --- /dev/null +++ b/src/ResourceManager/Resources/Commands.Resources/RoleDefinitions/NewAzureRoleDefinitionCommand.cs @@ -0,0 +1,68 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System.IO; +using System.Management.Automation; +using Microsoft.Azure.Commands.Resources.Models; +using Microsoft.Azure.Commands.Resources.Models.ActiveDirectory; +using Microsoft.Azure.Commands.Resources.Models.Authorization; +using Microsoft.WindowsAzure.Commands.Utilities.Common; +using Newtonsoft.Json; + +namespace Microsoft.Azure.Commands.Resources +{ + /// + /// Creates a new role definition. + /// + [Cmdlet(VerbsCommon.New, "AzureRoleDefinition"), OutputType(typeof(PSRoleDefinition))] + public class NewAzureRoleDefinitionCommand : ResourcesBaseCmdlet + { + [ValidateNotNullOrEmpty] + [Parameter(Position = 0, Mandatory = true, ParameterSetName = ParameterSet.InputFile, HelpMessage = "File name containing a single role definition.")] + public string InputFile { get; set; } + + [ValidateNotNullOrEmpty] + [Parameter(Position = 0, Mandatory = true, ParameterSetName = ParameterSet.RoleDefinition, HelpMessage = "Role definition.")] + public PSRoleDefinition Role { get; set; } + + public override void ExecuteCmdlet() + { + PSRoleDefinition role = null; + if (!string.IsNullOrWhiteSpace(InputFile)) + { + string fileName = this.TryResolvePath(InputFile); + if (!(new FileInfo(fileName)).Exists) + { + throw new PSArgumentException(string.Format("File {0} does not exist", fileName)); + } + + try + { + role = JsonConvert.DeserializeObject(File.ReadAllText(fileName)); + } + catch (JsonException) + { + WriteVerbose("Deserializing the input role definition failed."); + throw; + } + } + else + { + role = Role; + } + + WriteObject(PoliciesClient.CreateRoleDefinition(role)); + } + } +} diff --git a/src/ResourceManager/Resources/Commands.Resources/packages.config b/src/ResourceManager/Resources/Commands.Resources/packages.config index 8f0678eb1280..90d0aa03ccf0 100644 --- a/src/ResourceManager/Resources/Commands.Resources/packages.config +++ b/src/ResourceManager/Resources/Commands.Resources/packages.config @@ -6,7 +6,7 @@ - + diff --git a/src/ResourceManager/StreamAnalytics/Commands.StreamAnalytics.Test/Commands.StreamAnalytics.Test.csproj b/src/ResourceManager/StreamAnalytics/Commands.StreamAnalytics.Test/Commands.StreamAnalytics.Test.csproj index 5418fb82c294..15d89e497e91 100644 --- a/src/ResourceManager/StreamAnalytics/Commands.StreamAnalytics.Test/Commands.StreamAnalytics.Test.csproj +++ b/src/ResourceManager/StreamAnalytics/Commands.StreamAnalytics.Test/Commands.StreamAnalytics.Test.csproj @@ -56,9 +56,9 @@ ..\..\..\packages\Microsoft.Azure.Gallery.2.6.2-preview\lib\net40\Microsoft.Azure.Gallery.dll - + False - ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.0-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll + ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.2-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll ..\..\..\packages\Microsoft.Azure.Management.StreamAnalytics.0.17.0-preview\lib\net40\Microsoft.Azure.Management.StreamAnalytics.dll @@ -169,6 +169,7 @@ + Designer diff --git a/src/ResourceManager/StreamAnalytics/Commands.StreamAnalytics.Test/packages.config b/src/ResourceManager/StreamAnalytics/Commands.StreamAnalytics.Test/packages.config index 16559e9c7e10..4025daab8e87 100644 --- a/src/ResourceManager/StreamAnalytics/Commands.StreamAnalytics.Test/packages.config +++ b/src/ResourceManager/StreamAnalytics/Commands.StreamAnalytics.Test/packages.config @@ -5,7 +5,7 @@ - + diff --git a/src/ResourceManager/Websites/Commands.Websites.Test/Commands.Websites.Test.csproj b/src/ResourceManager/Websites/Commands.Websites.Test/Commands.Websites.Test.csproj index 63a907ac1c51..e64732a94ddd 100644 --- a/src/ResourceManager/Websites/Commands.Websites.Test/Commands.Websites.Test.csproj +++ b/src/ResourceManager/Websites/Commands.Websites.Test/Commands.Websites.Test.csproj @@ -56,8 +56,9 @@ False ..\..\..\packages\Microsoft.Azure.Gallery.2.6.2-preview\lib\net40\Microsoft.Azure.Gallery.dll - - ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.0-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll + + False + ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.2-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll ..\..\..\packages\Microsoft.Azure.Management.WebSites.0.16.4-prerelease\lib\net40\Microsoft.Azure.Management.WebSites.dll diff --git a/src/ResourceManager/Websites/Commands.Websites.Test/packages.config b/src/ResourceManager/Websites/Commands.Websites.Test/packages.config index 5eb092a4a6d0..4aaf012dc4d7 100644 --- a/src/ResourceManager/Websites/Commands.Websites.Test/packages.config +++ b/src/ResourceManager/Websites/Commands.Websites.Test/packages.config @@ -5,7 +5,7 @@ - + diff --git a/src/ResourceManager/Websites/Commands.Websites/Commands.Websites.csproj b/src/ResourceManager/Websites/Commands.Websites/Commands.Websites.csproj index c30fee060c5d..3e87e5b61041 100644 --- a/src/ResourceManager/Websites/Commands.Websites/Commands.Websites.csproj +++ b/src/ResourceManager/Websites/Commands.Websites/Commands.Websites.csproj @@ -68,9 +68,9 @@ False ..\..\..\packages\Microsoft.Azure.Graph.RBAC.1.7.0-preview\lib\net40\Microsoft.Azure.Graph.RBAC.dll - + False - ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.0-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll + ..\..\..\packages\Microsoft.Azure.Management.Authorization.0.18.2-preview\lib\net40\Microsoft.Azure.Management.Authorization.dll False diff --git a/src/ResourceManager/Websites/Commands.Websites/packages.config b/src/ResourceManager/Websites/Commands.Websites/packages.config index bf3ff1d8c404..94831e790a9d 100644 --- a/src/ResourceManager/Websites/Commands.Websites/packages.config +++ b/src/ResourceManager/Websites/Commands.Websites/packages.config @@ -6,7 +6,7 @@ - + From ee88df4436017f908ff7c1479c997cf76b94abe6 Mon Sep 17 00:00:00 2001 From: namratab Date: Fri, 10 Apr 2015 11:43:54 -0700 Subject: [PATCH 2/6] Fix tests --- .../ScenarioTests/RoleDefinitionTests.ps1 | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.ps1 b/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.ps1 index 7eff1c21a221..c9e3b13cf2bb 100644 --- a/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.ps1 +++ b/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.ps1 @@ -12,8 +12,6 @@ # limitations under the License. # ---------------------------------------------------------------------------------- -<<<<<<< HEAD - <# .SYNOPSIS Tests verify scenarios for RoleDefinitions creation. @@ -50,7 +48,7 @@ function Test-RoleDefinitionCreateTests Assert-AreEqual $roleDef.AssignableScopes $addedRoleDef.AssignableScopes Assert-AreEqual $true $roleDef.IsCustom } -======= + <# .SYNOPSIS Tests verify negative scenarios for RoleDefinitions @@ -73,7 +71,7 @@ function Test-RdNegativeScenarios $rdNull = Get-AzureRoleDefinition -Name $rdName # Create a role definition - # $rd = New-AzureRoleDefinition -InputFile .Resources\RoleDefinition.json + $rd = New-AzureRoleDefinition -InputFile .Resources\RoleDefinition.json # Role Defintion not provided. $roleDefNotProvided = "Role definition not provided." @@ -98,7 +96,7 @@ function Test-RDPositiveScenarios { # Create a role definition with Name rdNamme. $rdName = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' - # $rd = New-AzureRoleDefinition -InputFile .\Resources\RoleDefinition.json + $rd = New-AzureRoleDefinition -InputFile .\Resources\RoleDefinition.json $rd = Get-AzureRoleDefinition -Name $rdName # Update the role definition with name $rdName that was created in the step above. @@ -117,7 +115,6 @@ function Test-RDPositiveScenarios $readRd = Get-AzureRoleDefinition -Name $rd.Name Assert-Null $readRd - # $rdReCreated = New-AzureRoleDefinition -Role $rd + $rdReCreated = New-AzureRoleDefinition -Role $rd $rdReDeleted = Get-AzureRoleDefinition -Name $rd.Name | Remove-AzureRoleDefinition -Force } ->>>>>>> 74b2c872d8648ba3f9c7695f9f851c7a287b02d3 From d6eb799550f6113f8136a36c6dfdbee553716ff1 Mon Sep 17 00:00:00 2001 From: namratab Date: Mon, 13 Apr 2015 13:14:51 -0700 Subject: [PATCH 3/6] Add MAML package to /LocalFeed folder after signed build and add additional validation for cmdlet --- .../AuthorizationClient.cs | 10 +++++++++ .../Properties/Resources.Designer.cs | 20 +++++++++++++++++- .../Properties/Resources.resx | 8 ++++++- ...agement.Authorization.0.18.2-preview.nupkg | Bin 0 -> 76724 bytes 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 tools/LocalFeed/Microsoft.Azure.Management.Authorization.0.18.2-preview.nupkg diff --git a/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/AuthorizationClient.cs b/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/AuthorizationClient.cs index 59b15f481452..0edc5f4a1006 100644 --- a/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/AuthorizationClient.cs +++ b/src/ResourceManager/Resources/Commands.Resources/Models.Authorization/AuthorizationClient.cs @@ -235,6 +235,16 @@ private static void ValidateRoleDefinition(PSRoleDefinition roleDefinition) { throw new ArgumentException(ProjectResources.InvalidRoleDefinitionName); } + + if (roleDefinition.AssignableScopes == null || !roleDefinition.AssignableScopes.Any()) + { + throw new ArgumentException(ProjectResources.InvalidAssignableScopes); + } + + if (roleDefinition.Actions == null || !roleDefinition.Actions.Any()) + { + throw new ArgumentException(ProjectResources.InvalidActions); + } } /// diff --git a/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.Designer.cs b/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.Designer.cs index 2851e1f034c2..614d55ffe95b 100644 --- a/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.Designer.cs +++ b/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.Designer.cs @@ -141,6 +141,24 @@ internal static string FileAlreadyExists { } } + /// + /// Looks up a localized string similar to Invalid value for Actions. + /// + internal static string InvalidActions { + get { + return ResourceManager.GetString("InvalidActions", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Invalid value for AssignableScopes. + /// + internal static string InvalidAssignableScopes { + get { + return ResourceManager.GetString("InvalidAssignableScopes", resourceCulture); + } + } + /// /// Looks up a localized string similar to Invalid format of the resource identifier.. /// @@ -151,7 +169,7 @@ internal static string InvalidFormatOfResourceId { } /// - /// Looks up a localized string similar to RoleDefinitionName is invalid. + /// Looks up a localized string similar to RoleDefinition Name is invalid. /// internal static string InvalidRoleDefinitionName { get { diff --git a/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.resx b/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.resx index 0047dfe2152f..901878c7dc1b 100644 --- a/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.resx +++ b/src/ResourceManager/Resources/Commands.Resources/Properties/Resources.resx @@ -283,7 +283,7 @@ Registering provider feature ... - RoleDefinitionName is invalid + RoleDefinition Name is invalid Cannot find role definition with id '{0}'. @@ -291,4 +291,10 @@ Are you sure you want to remove role definition with id '{0}'. + + Invalid value for Actions + + + Invalid value for AssignableScopes + \ No newline at end of file diff --git a/tools/LocalFeed/Microsoft.Azure.Management.Authorization.0.18.2-preview.nupkg b/tools/LocalFeed/Microsoft.Azure.Management.Authorization.0.18.2-preview.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..c748cdda6a9f25dad4320127b0b3f42ae634297b GIT binary patch literal 76724 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ۙ@zIP3@9MPs0)O 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 literal 0 HcmV?d00001 From c263722642e458a405a3468bb3b1cd7218831a50 Mon Sep 17 00:00:00 2001 From: namratab Date: Mon, 13 Apr 2015 13:35:42 -0700 Subject: [PATCH 4/6] Remove app.config from csproj to fix CI job failure --- .../Batch/Commands.Batch.Test/Commands.Batch.Test.csproj | 1 - .../Commands.DataFactories.Test.csproj | 1 - .../Commands.StreamAnalytics.Test.csproj | 1 - 3 files changed, 3 deletions(-) diff --git a/src/ResourceManager/Batch/Commands.Batch.Test/Commands.Batch.Test.csproj b/src/ResourceManager/Batch/Commands.Batch.Test/Commands.Batch.Test.csproj index 72e5d8e1d32b..48d73eb4700e 100644 --- a/src/ResourceManager/Batch/Commands.Batch.Test/Commands.Batch.Test.csproj +++ b/src/ResourceManager/Batch/Commands.Batch.Test/Commands.Batch.Test.csproj @@ -185,7 +185,6 @@ - Designer diff --git a/src/ResourceManager/DataFactories/Commands.DataFactories.Test/Commands.DataFactories.Test.csproj b/src/ResourceManager/DataFactories/Commands.DataFactories.Test/Commands.DataFactories.Test.csproj index 29b48e6278b5..936268677d9b 100644 --- a/src/ResourceManager/DataFactories/Commands.DataFactories.Test/Commands.DataFactories.Test.csproj +++ b/src/ResourceManager/DataFactories/Commands.DataFactories.Test/Commands.DataFactories.Test.csproj @@ -175,7 +175,6 @@ - Designer diff --git a/src/ResourceManager/StreamAnalytics/Commands.StreamAnalytics.Test/Commands.StreamAnalytics.Test.csproj b/src/ResourceManager/StreamAnalytics/Commands.StreamAnalytics.Test/Commands.StreamAnalytics.Test.csproj index 15d89e497e91..9ce3731581c2 100644 --- a/src/ResourceManager/StreamAnalytics/Commands.StreamAnalytics.Test/Commands.StreamAnalytics.Test.csproj +++ b/src/ResourceManager/StreamAnalytics/Commands.StreamAnalytics.Test/Commands.StreamAnalytics.Test.csproj @@ -169,7 +169,6 @@ - Designer From 5c9497ec199dc12fb6443d8a84b51c0aa6549cb3 Mon Sep 17 00:00:00 2001 From: namratab Date: Mon, 13 Apr 2015 17:55:10 -0700 Subject: [PATCH 5/6] remove checkin attribute from tests since they ren't implemented yet --- .../ScenarioTests/RoleDefinitionTests.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.cs b/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.cs index de11a9fb8c64..680c8b6530cc 100644 --- a/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.cs +++ b/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/RoleDefinitionTests.cs @@ -20,22 +20,21 @@ namespace Microsoft.Azure.Commands.Resources.Test.ScenarioTests { public class RoleDefinitionTests { + // TODO: Add [Trait(Category.AcceptanceType, Category.CheckIn)] attribute for each test once it gets implemented fully + [Fact(Skip = "Not implemented")] - [Trait(Category.AcceptanceType, Category.CheckIn)] public void RoleDefinitionCreateTests() { ResourcesController.NewInstance.RunPsTest("Test-RoleDefinitionCreateTests"); } [Fact(Skip="Not implemented")] - [Trait(Category.AcceptanceType, Category.CheckIn)] public void RdNegativeScenarios() { ResourcesController.NewInstance.RunPsTest("Test-RdNegativeScenarios"); } [Fact(Skip = "Not implemented")] - [Trait(Category.AcceptanceType, Category.CheckIn)] public void RdPositiveScenarios() { ResourcesController.NewInstance.RunPsTest("Test-RDPositiveScenarios"); From 681fb9362b5dcc9f637e422a325511a6556fb367 Mon Sep 17 00:00:00 2001 From: huangpf Date: Tue, 14 Apr 2015 00:33:49 -0700 Subject: [PATCH 6/6] update postbuild & wxi --- setup/azurecmdfiles.wxi | 12 +++++++++ .../Commands.Storage/Commands.Storage.csproj | 9 +++---- .../Storage/Commands.Storage/PostBuild.ps1 | 27 +++++++++++++++++++ 3 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 src/ServiceManagement/Storage/Commands.Storage/PostBuild.ps1 diff --git a/setup/azurecmdfiles.wxi b/setup/azurecmdfiles.wxi index ac082f1b7c36..1e6585dc9101 100644 --- a/setup/azurecmdfiles.wxi +++ b/setup/azurecmdfiles.wxi @@ -1118,6 +1118,9 @@ + + + @@ -2764,6 +2767,9 @@ + + + @@ -2859,6 +2865,9 @@ + + + @@ -3366,6 +3375,7 @@ + @@ -3894,6 +3904,7 @@ + @@ -3925,6 +3936,7 @@ + diff --git a/src/ServiceManagement/Storage/Commands.Storage/Commands.Storage.csproj b/src/ServiceManagement/Storage/Commands.Storage/Commands.Storage.csproj index 17b734011c04..ddb35d1075a0 100644 --- a/src/ServiceManagement/Storage/Commands.Storage/Commands.Storage.csproj +++ b/src/ServiceManagement/Storage/Commands.Storage/Commands.Storage.csproj @@ -264,6 +264,9 @@ + + Always + @@ -281,10 +284,6 @@ - - cd $(ProjectDir) - set ResourceOutDir="..\..\..\Package\Debug\ResourceManager\AzureResourceManager\Storage\" - IF NOT EXIST "%25ResourceOutDir%25" mkdir "%25ResourceOutDir%25" - copy $(OutDir) "%25ResourceOutDir%25" /y + powershell.exe -ExecutionPolicy Unrestricted -File "$(ProjectDir)\PostBuild.ps1" "..\..\..\ResourceManager\AzureResourceManager\Storage" \ No newline at end of file diff --git a/src/ServiceManagement/Storage/Commands.Storage/PostBuild.ps1 b/src/ServiceManagement/Storage/Commands.Storage/PostBuild.ps1 new file mode 100644 index 000000000000..2050f24ace24 --- /dev/null +++ b/src/ServiceManagement/Storage/Commands.Storage/PostBuild.ps1 @@ -0,0 +1,27 @@ +# ---------------------------------------------------------------------------------- +# +# Copyright Microsoft Corporation +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ---------------------------------------------------------------------------------- + +Write-Output -InputObject 'Starting post-build script'; + +$destDir = $args[0]; +Write-Output -InputObject $destDir; + +$sourcePath = "." + +if (Test-Path -Path $sourcePath) { + Write-Output -InputObject "Copying '$sourcePath' to directory '$destDir'"; + Copy-Item -Path $sourcePath -Destination $destDir -Recurse; +} + +Write-Output -InputObject 'Finished post-build script'; \ No newline at end of file