From c5ceee2b04c58ee89621f28ebb59adb46994a1ac Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Fri, 3 Feb 2017 11:19:55 -0800 Subject: [PATCH 01/18] Added -Parameters support for New-AzureRmPolicyDefinition --- .../Policy/PolicyDefinitionProperties.cs | 6 +++++ .../Policy/NewAzurePolicyDefinition.cs | 22 ++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyDefinitionProperties.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyDefinitionProperties.cs index be4ebb066e33..fcddb0645fae 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyDefinitionProperties.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyDefinitionProperties.cs @@ -39,5 +39,11 @@ public class PolicyDefinitionProperties /// [JsonProperty(Required = Required.Always)] public JObject PolicyRule { get; set; } + + /// + /// The parameters declaration. + /// + [JsonProperty(Required = Required.Default)] + public JObject Parameters { get; set; } } } diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs index 437de5605823..b7fa4cc6e28f 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs @@ -58,6 +58,13 @@ public class NewAzurePolicyDefinitionCmdlet : PolicyDefinitionCmdletBase [ValidateNotNullOrEmpty] public string Policy { get; set; } + /// + /// Gets or sets the parameters parameter + /// + [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The parameters for policy definition. This can either be a path to a file name containing the parameters declaration, or the parameters declaration as string.")] + [ValidateNotNullOrEmpty] + public string Parameters { get; set; } + /// /// Executes the cmdlet. /// @@ -113,7 +120,8 @@ private JToken GetResource() { Description = this.Description ?? null, DisplayName = this.DisplayName ?? null, - PolicyRule = JObject.Parse(GetPolicyRuleObject().ToString()) + PolicyRule = JObject.Parse(GetPolicyRuleObject().ToString()), + Parameters = this.Parameters == null ? null : JObject.Parse(GetParametersObject().ToString()) } }; @@ -131,5 +139,17 @@ private JToken GetPolicyRuleObject() ? JToken.FromObject(FileUtilities.DataStore.ReadFileAsText(policyFilePath)) : JToken.FromObject(this.Policy); } + + /// + /// Gets the parameters object + /// + private JToken GetParametersObject() + { + string parametersFilePath = this.TryResolvePath(this.Parameters); + + return File.Exists(parametersFilePath) + ? JToken.FromObject(FileUtilities.DataStore.ReadFileAsText(parametersFilePath)) + : JToken.FromObject(this.Policy); + } } } From 1c9e87bd94d97cf506576d63971f8ec1652bbce7 Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Fri, 3 Feb 2017 19:05:13 -0800 Subject: [PATCH 02/18] A temp edit --- .../Policy/PolicyAssignmentProperties.cs | 7 ++ .../Policy/NewAzurePolicyAssignment.cs | 75 ++++++++++++++++++- 2 files changed, 80 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyAssignmentProperties.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyAssignmentProperties.cs index 228c08c32b44..4e012de2d347 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyAssignmentProperties.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyAssignmentProperties.cs @@ -15,6 +15,7 @@ namespace Microsoft.Azure.Commands.ResourceManager.Cmdlets.Entities.Policy { using Newtonsoft.Json; + using Newtonsoft.Json.Linq; /// /// The policy assignment properties. @@ -38,5 +39,11 @@ public class PolicyAssignmentProperties /// [JsonProperty(Required = Required.Always)] public string PolicyDefinitionId { get; set; } + + /// + /// The parameter values. + /// + [JsonProperty(Required = Required.Default)] + public JObject Parameters { get; set; } } } \ No newline at end of file diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index 7d5ebca5f24f..e4ad0b05f4f9 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -17,15 +17,20 @@ namespace Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation using Microsoft.Azure.Commands.ResourceManager.Cmdlets.Components; using Microsoft.Azure.Commands.ResourceManager.Cmdlets.Entities.Policy; using Microsoft.Azure.Commands.ResourceManager.Cmdlets.Extensions; + using Microsoft.Azure.Commands.Common.Authentication; + using Microsoft.WindowsAzure.Commands.Utilities.Common; using Newtonsoft.Json.Linq; using System.Management.Automation; + using System; /// /// Creates a policy assignment. /// [Cmdlet(VerbsCommon.New, "AzureRmPolicyAssignment"), OutputType(typeof(PSObject))] - public class NewAzurePolicyAssignmentCmdlet : PolicyAssignmentCmdletBase + public class NewAzurePolicyAssignmentCmdlet : PolicyAssignmentCmdletBase, IDynamicParameters { + protected RuntimeDefinedParameterDictionary dynamicParameters = new RuntimeDefinedParameterDictionary(); + /// /// Gets or sets the policy assignment name parameter. /// @@ -53,6 +58,19 @@ public class NewAzurePolicyAssignmentCmdlet : PolicyAssignmentCmdletBase [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The pollicy definition object.")] public PSObject PolicyDefinition { get; set; } + /// + /// Gets or sets the policy assignment policy parameter object. + /// + [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The pollicy parameter object.")] + public PSObject PolicyParameterObject { get; set; } + + /// + /// Gets or sets the policy assignment policy parameter file. + /// + [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The pollicy parameter file.")] + [ValidateNotNullOrEmpty] + public string PolicyParameterFile { get; set; } + /// /// Executes the cmdlet. /// @@ -112,11 +130,64 @@ private JToken GetResource() { DisplayName = this.DisplayName ?? null, PolicyDefinitionId = this.PolicyDefinition.Properties["policyDefinitionId"].Value.ToString(), - Scope = this.Scope + Scope = this.Scope, + Parameters = GetParameters() } }; return policyassignmentObject.ToJToken(); } + + object IDynamicParameters.GetDynamicParameters() + { + if (PolicyDefinition != null) + { + var properties = PolicyDefinition.Properties["Properties"].Value as PSObject; + var parameters = properties.Properties["parameters"].Value as PSObject; + foreach (var param in parameters.Properties) + { + dynamicParameters.Add(param.Name, new RuntimeDefinedParameter()); + } + } + + return dynamicParameters; + } + + protected JObject GetParameters() + { + // Load parameters from the file + if (PolicyParameterFile != null) + { + string policyParameterFilePath = this.TryResolvePath(PolicyParameterFile); + if (FileUtilities.DataStore.FileExists(policyParameterFilePath)) + { + return JObject.Parse(FileUtilities.DataStore.ReadFileAsText(policyParameterFilePath)); + } + } + + var parameterObject = new JObject(); + + // Load from PS object + if (PolicyParameterObject != null) + { + foreach (var param in PolicyParameterObject.Properties) + { + var valueObject = new JObject(); + valueObject.Add("value", param.Value.ToString()); + parameterObject.Add(param.Name, valueObject); + } + } + + // Load dynamic parameters + var parameters = PowerShellUtilities.GetUsedDynamicParameters(dynamicParameters, MyInvocation); + foreach (var dp in parameters) + { + var valueObject = new JObject(); + valueObject.Add("value", dp.Value.ToString()); + parameterObject.Add(dp.Name, valueObject); + } + + return parameterObject; + } } } \ No newline at end of file From cfbca375aea3987a9ebfb04e89f91ced96d762cd Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Mon, 6 Feb 2017 16:10:56 -0800 Subject: [PATCH 03/18] Finished New-AzureRmPolicyAssignment --- .../Policy/NewAzurePolicyAssignment.cs | 76 +++++++++++++------ 1 file changed, 51 insertions(+), 25 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index e4ad0b05f4f9..23c5727fe0ec 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -22,6 +22,8 @@ namespace Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation using Newtonsoft.Json.Linq; using System.Management.Automation; using System; + using System.Linq; + using System.Collections; /// /// Creates a policy assignment. @@ -62,14 +64,14 @@ public class NewAzurePolicyAssignmentCmdlet : PolicyAssignmentCmdletBase, IDynam /// Gets or sets the policy assignment policy parameter object. /// [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The pollicy parameter object.")] - public PSObject PolicyParameterObject { get; set; } + public Hashtable PolicyParameterObject { get; set; } /// - /// Gets or sets the policy assignment policy parameter file. + /// Gets or sets the policy assignment policy parameter file or string. /// - [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The pollicy parameter file.")] + [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The pollicy parameter file or string.")] [ValidateNotNullOrEmpty] - public string PolicyParameterFile { get; set; } + public string PolicyParameters { get; set; } /// /// Executes the cmdlet. @@ -143,10 +145,28 @@ object IDynamicParameters.GetDynamicParameters() if (PolicyDefinition != null) { var properties = PolicyDefinition.Properties["Properties"].Value as PSObject; - var parameters = properties.Properties["parameters"].Value as PSObject; - foreach (var param in parameters.Properties) + if (properties != null) { - dynamicParameters.Add(param.Name, new RuntimeDefinedParameter()); + var parameters = properties.Properties["parameters"].Value as PSObject; + if (parameters != null) + { + foreach (var param in parameters.Properties) + { + var type = (param.Value as PSObject).Properties["type"].Value.ToString(); + var dp = new RuntimeDefinedParameter + { + Name = param.Name, + ParameterType = type.Equals("string", StringComparison.OrdinalIgnoreCase) ? typeof(string) : typeof(object[]) + }; + dp.Attributes.Add(new ParameterAttribute + { + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = param.Name + }); + dynamicParameters.Add(param.Name, dp); + } + } } } @@ -155,39 +175,45 @@ object IDynamicParameters.GetDynamicParameters() protected JObject GetParameters() { - // Load parameters from the file - if (PolicyParameterFile != null) + // Load parameters from local file or literal + if (PolicyParameters != null) { - string policyParameterFilePath = this.TryResolvePath(PolicyParameterFile); - if (FileUtilities.DataStore.FileExists(policyParameterFilePath)) - { - return JObject.Parse(FileUtilities.DataStore.ReadFileAsText(policyParameterFilePath)); - } + string policyParameterFilePath = this.TryResolvePath(PolicyParameters); + return FileUtilities.DataStore.FileExists(policyParameterFilePath) + ? JObject.Parse(FileUtilities.DataStore.ReadFileAsText(policyParameterFilePath)) + : JObject.Parse(PolicyParameters); } - var parameterObject = new JObject(); - // Load from PS object if (PolicyParameterObject != null) { - foreach (var param in PolicyParameterObject.Properties) + var parameterObject = new JObject(); + foreach (string paramKey in PolicyParameterObject.Keys) { var valueObject = new JObject(); - valueObject.Add("value", param.Value.ToString()); - parameterObject.Add(param.Name, valueObject); + valueObject.Add("value", PolicyParameterObject[paramKey].ToJToken()); + parameterObject.Add(paramKey, valueObject); } + return parameterObject; } // Load dynamic parameters var parameters = PowerShellUtilities.GetUsedDynamicParameters(dynamicParameters, MyInvocation); - foreach (var dp in parameters) + if (parameters.Count() == 0) { - var valueObject = new JObject(); - valueObject.Add("value", dp.Value.ToString()); - parameterObject.Add(dp.Name, valueObject); + return null; + } + else + { + var parameterObject = new JObject(); + foreach (var dp in parameters) + { + var valueObject = new JObject(); + valueObject.Add("value", MyInvocation.BoundParameters[dp.Name].ToJToken()); + parameterObject.Add(dp.Name, valueObject); + } + return parameterObject; } - - return parameterObject; } } } \ No newline at end of file From d4537e9f300b7b45411f0ccb5baac08ae96542a4 Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Wed, 8 Feb 2017 14:19:14 -0800 Subject: [PATCH 04/18] Resolved code review issues --- .../Policy/NewAzurePolicyAssignment.cs | 54 ++++++++++--------- .../Policy/NewAzurePolicyDefinition.cs | 2 +- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index 23c5727fe0ec..035f28383e2f 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -33,6 +33,9 @@ public class NewAzurePolicyAssignmentCmdlet : PolicyAssignmentCmdletBase, IDynam { protected RuntimeDefinedParameterDictionary dynamicParameters = new RuntimeDefinedParameterDictionary(); + protected const string PolicyParametersObjectParameterSetName = "Policy assignment with parameters via policy parameters object"; + protected const string PolicyParametersStringParameterSetName = "Policy assignment with parameters via policy parameters string"; + /// /// Gets or sets the policy assignment name parameter. /// @@ -57,19 +60,21 @@ public class NewAzurePolicyAssignmentCmdlet : PolicyAssignmentCmdletBase, IDynam /// /// Gets or sets the policy assignment policy definition parameter. /// - [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The pollicy definition object.")] + [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy definition object.")] public PSObject PolicyDefinition { get; set; } /// - /// Gets or sets the policy assignment policy parameter object. + /// Gets or sets the policy assignment policy parameters object. /// - [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The pollicy parameter object.")] - public Hashtable PolicyParameterObject { get; set; } + [Parameter(ParameterSetName = PolicyParametersObjectParameterSetName, + Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy parameters object.")] + public Hashtable PolicyParametersObject { get; set; } /// - /// Gets or sets the policy assignment policy parameter file or string. + /// Gets or sets the policy assignment policy parameters file path or policy parameters string. /// - [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The pollicy parameter file or string.")] + [Parameter(ParameterSetName = PolicyParametersStringParameterSetName, + Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy parameters file path or policy parameters string.")] [ValidateNotNullOrEmpty] public string PolicyParameters { get; set; } @@ -133,7 +138,7 @@ private JToken GetResource() DisplayName = this.DisplayName ?? null, PolicyDefinitionId = this.PolicyDefinition.Properties["policyDefinitionId"].Value.ToString(), Scope = this.Scope, - Parameters = GetParameters() + Parameters = this.GetParameters() } }; @@ -142,9 +147,9 @@ private JToken GetResource() object IDynamicParameters.GetDynamicParameters() { - if (PolicyDefinition != null) + if (this.PolicyDefinition != null) { - var properties = PolicyDefinition.Properties["Properties"].Value as PSObject; + var properties = this.PolicyDefinition.Properties["Properties"].Value as PSObject; if (properties != null) { var parameters = properties.Properties["parameters"].Value as PSObject; @@ -164,34 +169,35 @@ object IDynamicParameters.GetDynamicParameters() ValueFromPipelineByPropertyName = true, HelpMessage = param.Name }); - dynamicParameters.Add(param.Name, dp); + this.dynamicParameters.Add(param.Name, dp); } } } } - return dynamicParameters; + return this.dynamicParameters; } - protected JObject GetParameters() + private JObject GetParameters() { // Load parameters from local file or literal - if (PolicyParameters != null) + if (this.PolicyParameters != null) { - string policyParameterFilePath = this.TryResolvePath(PolicyParameters); + string policyParameterFilePath = this.TryResolvePath(this.PolicyParameters); return FileUtilities.DataStore.FileExists(policyParameterFilePath) ? JObject.Parse(FileUtilities.DataStore.ReadFileAsText(policyParameterFilePath)) - : JObject.Parse(PolicyParameters); + : JObject.Parse(this.PolicyParameters); } // Load from PS object - if (PolicyParameterObject != null) + JObject parameterObject = null; + if (this.PolicyParametersObject != null) { - var parameterObject = new JObject(); - foreach (string paramKey in PolicyParameterObject.Keys) + parameterObject = new JObject(); + foreach (string paramKey in this.PolicyParametersObject.Keys) { var valueObject = new JObject(); - valueObject.Add("value", PolicyParameterObject[paramKey].ToJToken()); + valueObject.Add("value", this.PolicyParametersObject[paramKey].ToJToken()); parameterObject.Add(paramKey, valueObject); } return parameterObject; @@ -199,21 +205,17 @@ protected JObject GetParameters() // Load dynamic parameters var parameters = PowerShellUtilities.GetUsedDynamicParameters(dynamicParameters, MyInvocation); - if (parameters.Count() == 0) - { - return null; - } - else + if (parameters.Count() > 0) { - var parameterObject = new JObject(); + parameterObject = new JObject(); foreach (var dp in parameters) { var valueObject = new JObject(); valueObject.Add("value", MyInvocation.BoundParameters[dp.Name].ToJToken()); parameterObject.Add(dp.Name, valueObject); } - return parameterObject; } + return parameterObject; } } } \ No newline at end of file diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs index b7fa4cc6e28f..c96bb0db0daf 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs @@ -149,7 +149,7 @@ private JToken GetParametersObject() return File.Exists(parametersFilePath) ? JToken.FromObject(FileUtilities.DataStore.ReadFileAsText(parametersFilePath)) - : JToken.FromObject(this.Policy); + : JToken.FromObject(this.Parameters); } } } From b487ba2062020eae6bc594a259684547f79d4ae9 Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Wed, 8 Feb 2017 17:32:42 -0800 Subject: [PATCH 05/18] Updated help --- .../Cmdlets/Components/Constants.cs | 2 +- .../Policy/NewAzurePolicyDefinition.cs | 4 +- .../help/New-AzureRmPolicyAssignment.md | 38 ++++++++++++++++++- .../help/New-AzureRmPolicyDefinition.md | 17 ++++++++- 4 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Components/Constants.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Components/Constants.cs index f07ac4c69e79..6d1f11c00104 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Components/Constants.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Components/Constants.cs @@ -63,7 +63,7 @@ public static class Constants /// /// The default policy API version. /// - public static readonly string PolicyApiVersion = "2016-04-01"; + public static readonly string PolicyApiVersion = "2016-12-01"; /// /// The default providers API version. diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs index c96bb0db0daf..faa6deadee38 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs @@ -52,14 +52,14 @@ public class NewAzurePolicyDefinitionCmdlet : PolicyDefinitionCmdletBase public string Description { get; set; } /// - /// Gets or sets the policy parameter + /// Gets or sets the policy definition policy rule parameter /// [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The rule for policy definition. This can either be a path to a file name containing the rule, or the rule as string.")] [ValidateNotNullOrEmpty] public string Policy { get; set; } /// - /// Gets or sets the parameters parameter + /// Gets or sets the policy definition parameters parameter /// [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The parameters for policy definition. This can either be a path to a file name containing the parameters declaration, or the parameters declaration as string.")] [ValidateNotNullOrEmpty] diff --git a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md index 917940075028..b31c40898fe2 100644 --- a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md +++ b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md @@ -12,10 +12,18 @@ Creates a policy assignment. ## SYNTAX +### Policy assignment with parameters via policy parameters object ``` New-AzureRmPolicyAssignment -Name -Scope [-DisplayName ] -PolicyDefinition - [-ApiVersion ] [-Pre] [-InformationAction ] [-InformationVariable ] - [] + [-PolicyParametersObject ] [-ApiVersion ] [-Pre] [-InformationAction ] + [-InformationVariable ] [] +``` + +### Policy assignment with parameters via policy parameters string +``` +New-AzureRmPolicyAssignment -Name -Scope [-DisplayName ] -PolicyDefinition + [-PolicyParameters ] [-ApiVersion ] [-Pre] [-InformationAction ] + [-InformationVariable ] [] ``` ## DESCRIPTION @@ -175,6 +183,32 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -PolicyParameters +The policy parameters file path or policy parameters string.```yaml +Type: String +Parameter Sets: Policy assignment with parameters via policy parameters string +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### -PolicyParametersObject +The policy parameters object.```yaml +Type: Hashtable +Parameter Sets: Policy assignment with parameters via policy parameters object +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + ### CommonParameters This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216). diff --git a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyDefinition.md b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyDefinition.md index b1b4bfcff549..905b524ab1cd 100644 --- a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyDefinition.md +++ b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyDefinition.md @@ -14,8 +14,8 @@ Creates a policy definition. ``` New-AzureRmPolicyDefinition -Name [-DisplayName ] [-Description ] -Policy - [-ApiVersion ] [-Pre] [-InformationAction ] [-InformationVariable ] - [] + [-Parameters ] [-ApiVersion ] [-Pre] [-InformationAction ] + [-InformationVariable ] [] ``` ## DESCRIPTION @@ -171,6 +171,19 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -Parameters +The parameters for policy definition. This can either be a path to a file name containing the parameters declaration, or the parameters declaration as string.```yaml +Type: String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + ### CommonParameters This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216). From ef539171eea487284367076926b76c771f6287d9 Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Thu, 9 Feb 2017 11:37:29 -0800 Subject: [PATCH 06/18] PowerShell cmdlet parameter names should be sigular noun. --- .../Policy/PolicyDefinitionProperties.cs | 2 +- .../Policy/NewAzurePolicyAssignment.cs | 32 +++++++++---------- .../Policy/NewAzurePolicyDefinition.cs | 10 +++--- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyDefinitionProperties.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyDefinitionProperties.cs index fcddb0645fae..6f48d2e7de24 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyDefinitionProperties.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyDefinitionProperties.cs @@ -44,6 +44,6 @@ public class PolicyDefinitionProperties /// The parameters declaration. /// [JsonProperty(Required = Required.Default)] - public JObject Parameters { get; set; } + public JObject Parameter { get; set; } } } diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index 035f28383e2f..9f2166bb2c4a 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -33,8 +33,8 @@ public class NewAzurePolicyAssignmentCmdlet : PolicyAssignmentCmdletBase, IDynam { protected RuntimeDefinedParameterDictionary dynamicParameters = new RuntimeDefinedParameterDictionary(); - protected const string PolicyParametersObjectParameterSetName = "Policy assignment with parameters via policy parameters object"; - protected const string PolicyParametersStringParameterSetName = "Policy assignment with parameters via policy parameters string"; + protected const string PolicyParameterObjectParameterSetName = "Policy assignment with parameters via policy parameter object"; + protected const string PolicyParameterStringParameterSetName = "Policy assignment with parameters via policy parameter string"; /// /// Gets or sets the policy assignment name parameter. @@ -64,19 +64,19 @@ public class NewAzurePolicyAssignmentCmdlet : PolicyAssignmentCmdletBase, IDynam public PSObject PolicyDefinition { get; set; } /// - /// Gets or sets the policy assignment policy parameters object. + /// Gets or sets the policy assignment policy parameter object. /// - [Parameter(ParameterSetName = PolicyParametersObjectParameterSetName, - Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy parameters object.")] - public Hashtable PolicyParametersObject { get; set; } + [Parameter(ParameterSetName = PolicyParameterObjectParameterSetName, + Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy parameter object.")] + public Hashtable PolicyParameterObject { get; set; } /// - /// Gets or sets the policy assignment policy parameters file path or policy parameters string. + /// Gets or sets the policy assignment policy parameter file path or policy parameter string. /// - [Parameter(ParameterSetName = PolicyParametersStringParameterSetName, - Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy parameters file path or policy parameters string.")] + [Parameter(ParameterSetName = PolicyParameterStringParameterSetName, + Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy parameter file path or policy parameter string.")] [ValidateNotNullOrEmpty] - public string PolicyParameters { get; set; } + public string PolicyParameter { get; set; } /// /// Executes the cmdlet. @@ -181,23 +181,23 @@ object IDynamicParameters.GetDynamicParameters() private JObject GetParameters() { // Load parameters from local file or literal - if (this.PolicyParameters != null) + if (this.PolicyParameter != null) { - string policyParameterFilePath = this.TryResolvePath(this.PolicyParameters); + string policyParameterFilePath = this.TryResolvePath(this.PolicyParameter); return FileUtilities.DataStore.FileExists(policyParameterFilePath) ? JObject.Parse(FileUtilities.DataStore.ReadFileAsText(policyParameterFilePath)) - : JObject.Parse(this.PolicyParameters); + : JObject.Parse(this.PolicyParameter); } // Load from PS object JObject parameterObject = null; - if (this.PolicyParametersObject != null) + if (this.PolicyParameterObject != null) { parameterObject = new JObject(); - foreach (string paramKey in this.PolicyParametersObject.Keys) + foreach (string paramKey in this.PolicyParameterObject.Keys) { var valueObject = new JObject(); - valueObject.Add("value", this.PolicyParametersObject[paramKey].ToJToken()); + valueObject.Add("value", this.PolicyParameterObject[paramKey].ToJToken()); parameterObject.Add(paramKey, valueObject); } return parameterObject; diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs index faa6deadee38..2e1a166a929a 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs @@ -61,9 +61,9 @@ public class NewAzurePolicyDefinitionCmdlet : PolicyDefinitionCmdletBase /// /// Gets or sets the policy definition parameters parameter /// - [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The parameters for policy definition. This can either be a path to a file name containing the parameters declaration, or the parameters declaration as string.")] + [Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The parameters declaration for policy definition. This can either be a path to a file name containing the parameters declaration, or the parameters declaration as string.")] [ValidateNotNullOrEmpty] - public string Parameters { get; set; } + public string Parameter { get; set; } /// /// Executes the cmdlet. @@ -121,7 +121,7 @@ private JToken GetResource() Description = this.Description ?? null, DisplayName = this.DisplayName ?? null, PolicyRule = JObject.Parse(GetPolicyRuleObject().ToString()), - Parameters = this.Parameters == null ? null : JObject.Parse(GetParametersObject().ToString()) + Parameter = this.Parameter == null ? null : JObject.Parse(GetParametersObject().ToString()) } }; @@ -145,11 +145,11 @@ private JToken GetPolicyRuleObject() /// private JToken GetParametersObject() { - string parametersFilePath = this.TryResolvePath(this.Parameters); + string parametersFilePath = this.TryResolvePath(this.Parameter); return File.Exists(parametersFilePath) ? JToken.FromObject(FileUtilities.DataStore.ReadFileAsText(parametersFilePath)) - : JToken.FromObject(this.Parameters); + : JToken.FromObject(this.Parameter); } } } From bf9aec6b690c993f0c94360b7c1f278120d27866 Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Thu, 9 Feb 2017 13:50:19 -0800 Subject: [PATCH 07/18] Fixed potential NullReferenceException --- .../Policy/NewAzurePolicyAssignment.cs | 8 ++++---- .../help/New-AzureRmPolicyAssignment.md | 20 +++++++++---------- .../help/New-AzureRmPolicyDefinition.md | 6 +++--- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index 9f2166bb2c4a..ef34923f0381 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -149,19 +149,19 @@ object IDynamicParameters.GetDynamicParameters() { if (this.PolicyDefinition != null) { - var properties = this.PolicyDefinition.Properties["Properties"].Value as PSObject; + var properties = this.PolicyDefinition.Properties["Properties"]?.Value as PSObject; if (properties != null) { - var parameters = properties.Properties["parameters"].Value as PSObject; + var parameters = properties.Properties["parameters"]?.Value as PSObject; if (parameters != null) { foreach (var param in parameters.Properties) { - var type = (param.Value as PSObject).Properties["type"].Value.ToString(); + var type = Convert.ToString((param.Value as PSObject).Properties["type"]?.Value); var dp = new RuntimeDefinedParameter { Name = param.Name, - ParameterType = type.Equals("string", StringComparison.OrdinalIgnoreCase) ? typeof(string) : typeof(object[]) + ParameterType = type.Equals("array", StringComparison.OrdinalIgnoreCase) ? typeof(object[]) : typeof(string) }; dp.Attributes.Add(new ParameterAttribute { diff --git a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md index b31c40898fe2..a30a3ded0c77 100644 --- a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md +++ b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md @@ -12,17 +12,17 @@ Creates a policy assignment. ## SYNTAX -### Policy assignment with parameters via policy parameters object +### Policy assignment with parameters via policy parameter object ``` New-AzureRmPolicyAssignment -Name -Scope [-DisplayName ] -PolicyDefinition - [-PolicyParametersObject ] [-ApiVersion ] [-Pre] [-InformationAction ] + [-PolicyParameterObject ] [-ApiVersion ] [-Pre] [-InformationAction ] [-InformationVariable ] [] ``` -### Policy assignment with parameters via policy parameters string +### Policy assignment with parameters via policy parameter string ``` New-AzureRmPolicyAssignment -Name -Scope [-DisplayName ] -PolicyDefinition - [-PolicyParameters ] [-ApiVersion ] [-Pre] [-InformationAction ] + [-PolicyParameter ] [-ApiVersion ] [-Pre] [-InformationAction ] [-InformationVariable ] [] ``` @@ -183,10 +183,10 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -PolicyParameters -The policy parameters file path or policy parameters string.```yaml +### -PolicyParameter +The policy parameter file path or policy parameter string.```yaml Type: String -Parameter Sets: Policy assignment with parameters via policy parameters string +Parameter Sets: Policy assignment with parameters via policy parameter string Aliases: Required: False @@ -196,10 +196,10 @@ Accept pipeline input: True (ByPropertyName) Accept wildcard characters: False ``` -### -PolicyParametersObject -The policy parameters object.```yaml +### -PolicyParameterObject +The policy parameter object.```yaml Type: Hashtable -Parameter Sets: Policy assignment with parameters via policy parameters object +Parameter Sets: Policy assignment with parameters via policy parameter object Aliases: Required: False diff --git a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyDefinition.md b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyDefinition.md index 905b524ab1cd..dd6f8cdc6ac5 100644 --- a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyDefinition.md +++ b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyDefinition.md @@ -14,7 +14,7 @@ Creates a policy definition. ``` New-AzureRmPolicyDefinition -Name [-DisplayName ] [-Description ] -Policy - [-Parameters ] [-ApiVersion ] [-Pre] [-InformationAction ] + [-Parameter ] [-ApiVersion ] [-Pre] [-InformationAction ] [-InformationVariable ] [] ``` @@ -171,8 +171,8 @@ Accept pipeline input: False Accept wildcard characters: False ``` -### -Parameters -The parameters for policy definition. This can either be a path to a file name containing the parameters declaration, or the parameters declaration as string.```yaml +### -Parameter +The parameters declaration for policy definition. This can either be a path to a file name containing the parameters declaration, or the parameters declaration as string.```yaml Type: String Parameter Sets: (All) Aliases: From 81f9384ccba3d50ce86c0ea49253fcfb88108fe5 Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Thu, 9 Feb 2017 14:27:58 -0800 Subject: [PATCH 08/18] The build server doesn't support ?. syntax --- .../Implementation/Policy/NewAzurePolicyAssignment.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index ef34923f0381..3c9c958760ab 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -149,19 +149,20 @@ object IDynamicParameters.GetDynamicParameters() { if (this.PolicyDefinition != null) { - var properties = this.PolicyDefinition.Properties["Properties"]?.Value as PSObject; + var properties = this.PolicyDefinition.Properties["Properties"]; if (properties != null) { - var parameters = properties.Properties["parameters"]?.Value as PSObject; + var parameters = (properties.Value as PSObject).Properties["parameters"]; if (parameters != null) { - foreach (var param in parameters.Properties) + foreach (var param in (parameters.Value as PSObject).Properties) { - var type = Convert.ToString((param.Value as PSObject).Properties["type"]?.Value); + var type = (param.Value as PSObject).Properties["type"]; + var typeString = type != null ? type.Value.ToString() : string.Empty; var dp = new RuntimeDefinedParameter { Name = param.Name, - ParameterType = type.Equals("array", StringComparison.OrdinalIgnoreCase) ? typeof(object[]) : typeof(string) + ParameterType = typeString.Equals("array", StringComparison.OrdinalIgnoreCase) ? typeof(object[]) : typeof(string) }; dp.Attributes.Add(new ParameterAttribute { From 5cdfdc70e9612fc4258efe31c37379d0c5ba4cbf Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Thu, 9 Feb 2017 15:45:07 -0800 Subject: [PATCH 09/18] Needed to add a parameter set for no parameters --- .../Policy/NewAzurePolicyAssignment.cs | 12 +++++++++--- .../help/New-AzureRmPolicyAssignment.md | 15 +++++++++++---- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index 3c9c958760ab..3fc6752d1e17 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -35,6 +35,7 @@ public class NewAzurePolicyAssignmentCmdlet : PolicyAssignmentCmdletBase, IDynam protected const string PolicyParameterObjectParameterSetName = "Policy assignment with parameters via policy parameter object"; protected const string PolicyParameterStringParameterSetName = "Policy assignment with parameters via policy parameter string"; + protected const string ParameterlessPolicyParameterSetName = "Policy assignment without parameters"; /// /// Gets or sets the policy assignment name parameter. @@ -60,21 +61,26 @@ public class NewAzurePolicyAssignmentCmdlet : PolicyAssignmentCmdletBase, IDynam /// /// Gets or sets the policy assignment policy definition parameter. /// - [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy definition object.")] + [Parameter(ParameterSetName = ParameterlessPolicyParameterSetName, + Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy definition object.")] + [Parameter(ParameterSetName = PolicyParameterObjectParameterSetName, + Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy definition object.")] + [Parameter(ParameterSetName = PolicyParameterStringParameterSetName, + Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy definition object.")] public PSObject PolicyDefinition { get; set; } /// /// Gets or sets the policy assignment policy parameter object. /// [Parameter(ParameterSetName = PolicyParameterObjectParameterSetName, - Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy parameter object.")] + Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy parameter object.")] public Hashtable PolicyParameterObject { get; set; } /// /// Gets or sets the policy assignment policy parameter file path or policy parameter string. /// [Parameter(ParameterSetName = PolicyParameterStringParameterSetName, - Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy parameter file path or policy parameter string.")] + Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy parameter file path or policy parameter string.")] [ValidateNotNullOrEmpty] public string PolicyParameter { get; set; } diff --git a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md index a30a3ded0c77..0da5367271e7 100644 --- a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md +++ b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md @@ -12,17 +12,24 @@ Creates a policy assignment. ## SYNTAX +### Policy assignment without parameters +``` +New-AzureRmPolicyAssignment -Name -Scope [-DisplayName ] -PolicyDefinition + [-ApiVersion ] [-Pre] [-InformationAction ] [-InformationVariable ] + [] +``` + ### Policy assignment with parameters via policy parameter object ``` New-AzureRmPolicyAssignment -Name -Scope [-DisplayName ] -PolicyDefinition - [-PolicyParameterObject ] [-ApiVersion ] [-Pre] [-InformationAction ] + -PolicyParameterObject [-ApiVersion ] [-Pre] [-InformationAction ] [-InformationVariable ] [] ``` ### Policy assignment with parameters via policy parameter string ``` New-AzureRmPolicyAssignment -Name -Scope [-DisplayName ] -PolicyDefinition - [-PolicyParameter ] [-ApiVersion ] [-Pre] [-InformationAction ] + -PolicyParameter [-ApiVersion ] [-Pre] [-InformationAction ] [-InformationVariable ] [] ``` @@ -189,7 +196,7 @@ Type: String Parameter Sets: Policy assignment with parameters via policy parameter string Aliases: -Required: False +Required: True Position: Named Default value: None Accept pipeline input: True (ByPropertyName) @@ -202,7 +209,7 @@ Type: Hashtable Parameter Sets: Policy assignment with parameters via policy parameter object Aliases: -Required: False +Required: True Position: Named Default value: None Accept pipeline input: True (ByPropertyName) From fb1d10e2b2c918faefafc2d2708eb556fa63c7c2 Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Thu, 9 Feb 2017 17:01:03 -0800 Subject: [PATCH 10/18] Specify DefaultParameterSetName --- .../Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index 3fc6752d1e17..33235fba3102 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -28,7 +28,7 @@ namespace Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation /// /// Creates a policy assignment. /// - [Cmdlet(VerbsCommon.New, "AzureRmPolicyAssignment"), OutputType(typeof(PSObject))] + [Cmdlet(VerbsCommon.New, "AzureRmPolicyAssignment", DefaultParameterSetName = ParameterlessPolicyParameterSetName), OutputType(typeof(PSObject))] public class NewAzurePolicyAssignmentCmdlet : PolicyAssignmentCmdletBase, IDynamicParameters { protected RuntimeDefinedParameterDictionary dynamicParameters = new RuntimeDefinedParameterDictionary(); From 6fc4b9e7ad1400686050ae9a0c1b2695c8be7662 Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Thu, 9 Feb 2017 17:04:10 -0800 Subject: [PATCH 11/18] Naming consistency --- .../Cmdlets/Entities/Policy/PolicyAssignmentProperties.cs | 2 +- .../Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyAssignmentProperties.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyAssignmentProperties.cs index 4e012de2d347..8c5dee386d39 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyAssignmentProperties.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyAssignmentProperties.cs @@ -44,6 +44,6 @@ public class PolicyAssignmentProperties /// The parameter values. /// [JsonProperty(Required = Required.Default)] - public JObject Parameters { get; set; } + public JObject Parameter { get; set; } } } \ No newline at end of file diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index 33235fba3102..5de61d0bd0d2 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -144,7 +144,7 @@ private JToken GetResource() DisplayName = this.DisplayName ?? null, PolicyDefinitionId = this.PolicyDefinition.Properties["policyDefinitionId"].Value.ToString(), Scope = this.Scope, - Parameters = this.GetParameters() + Parameter = this.GetParameters() } }; From 0b2b101ab6d3a98cfaa03148d7ee4ce3b5dd2d5a Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Thu, 9 Feb 2017 17:59:04 -0800 Subject: [PATCH 12/18] To make the BreakingChangeAnalyzer happy... --- .../Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index 5de61d0bd0d2..c34ce976603e 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -61,6 +61,7 @@ public class NewAzurePolicyAssignmentCmdlet : PolicyAssignmentCmdletBase, IDynam /// /// Gets or sets the policy assignment policy definition parameter. /// + [Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy definition object.")] [Parameter(ParameterSetName = ParameterlessPolicyParameterSetName, Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy definition object.")] [Parameter(ParameterSetName = PolicyParameterObjectParameterSetName, From 26a48e92b3056f1dfd4937a54409a6524e17c6e0 Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Fri, 10 Feb 2017 12:17:19 -0800 Subject: [PATCH 13/18] Refactoring; also rolling back a previous wrong renaming --- .../Policy/PolicyAssignmentProperties.cs | 2 +- .../Policy/PolicyDefinitionProperties.cs | 2 +- .../Cmdlets/Extensions/JsonExtensions.cs | 27 +++++++++++++++++++ .../Policy/NewAzurePolicyAssignment.cs | 23 ++++------------ .../Policy/NewAzurePolicyDefinition.cs | 2 +- 5 files changed, 35 insertions(+), 21 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyAssignmentProperties.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyAssignmentProperties.cs index 8c5dee386d39..4e012de2d347 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyAssignmentProperties.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyAssignmentProperties.cs @@ -44,6 +44,6 @@ public class PolicyAssignmentProperties /// The parameter values. /// [JsonProperty(Required = Required.Default)] - public JObject Parameter { get; set; } + public JObject Parameters { get; set; } } } \ No newline at end of file diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyDefinitionProperties.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyDefinitionProperties.cs index 6f48d2e7de24..fcddb0645fae 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyDefinitionProperties.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Entities/Policy/PolicyDefinitionProperties.cs @@ -44,6 +44,6 @@ public class PolicyDefinitionProperties /// The parameters declaration. /// [JsonProperty(Required = Required.Default)] - public JObject Parameter { get; set; } + public JObject Parameters { get; set; } } } diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Extensions/JsonExtensions.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Extensions/JsonExtensions.cs index 15d4f893a713..9a1c20f68bdc 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Extensions/JsonExtensions.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Extensions/JsonExtensions.cs @@ -19,6 +19,7 @@ namespace Microsoft.Azure.Commands.ResourceManager.Cmdlets.Extensions using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using System; + using System.Collections; using System.Collections.Generic; using System.Globalization; using System.IO; @@ -212,5 +213,31 @@ public static bool TryConvertTo(this JToken jobject, out TType result) result = default(TType); return false; } + + /// + /// Converts an object to with an extra level labeled as "value". + /// + /// The object. + /// The key set to extract from the object. Default is all keys. + /// The conversion result. + public static JObject ToParameterObject(this IDictionary dict, IEnumerable keys = null) + { + if (dict == null) + { + return null; + } + if (keys == null) + { + keys = dict.Keys; + } + var parameterObject = new JObject(); + foreach (string paramKey in keys) + { + var valueObject = new JObject(); + valueObject.Add("value", dict[paramKey].ToJToken()); + parameterObject.Add(paramKey, valueObject); + } + return parameterObject; + } } } \ No newline at end of file diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index c34ce976603e..ed8e689f7e55 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -145,7 +145,7 @@ private JToken GetResource() DisplayName = this.DisplayName ?? null, PolicyDefinitionId = this.PolicyDefinition.Properties["policyDefinitionId"].Value.ToString(), Scope = this.Scope, - Parameter = this.GetParameters() + Parameters = this.GetParameters() } }; @@ -198,32 +198,19 @@ private JObject GetParameters() } // Load from PS object - JObject parameterObject = null; if (this.PolicyParameterObject != null) { - parameterObject = new JObject(); - foreach (string paramKey in this.PolicyParameterObject.Keys) - { - var valueObject = new JObject(); - valueObject.Add("value", this.PolicyParameterObject[paramKey].ToJToken()); - parameterObject.Add(paramKey, valueObject); - } - return parameterObject; + return this.PolicyParameterObject.ToParameterObject(); } // Load dynamic parameters var parameters = PowerShellUtilities.GetUsedDynamicParameters(dynamicParameters, MyInvocation); if (parameters.Count() > 0) { - parameterObject = new JObject(); - foreach (var dp in parameters) - { - var valueObject = new JObject(); - valueObject.Add("value", MyInvocation.BoundParameters[dp.Name].ToJToken()); - parameterObject.Add(dp.Name, valueObject); - } + return MyInvocation.BoundParameters.ToParameterObject(parameters.Select(p => p.Name)); } - return parameterObject; + + return null; } } } \ No newline at end of file diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs index 2e1a166a929a..4c433e4827ac 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs @@ -121,7 +121,7 @@ private JToken GetResource() Description = this.Description ?? null, DisplayName = this.DisplayName ?? null, PolicyRule = JObject.Parse(GetPolicyRuleObject().ToString()), - Parameter = this.Parameter == null ? null : JObject.Parse(GetParametersObject().ToString()) + Parameters = this.Parameter == null ? null : JObject.Parse(GetParametersObject().ToString()) } }; From 0bf829fefddc94d6cb665894cbb390211684cde8 Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Mon, 13 Feb 2017 14:25:39 -0800 Subject: [PATCH 14/18] Added scenario tests for this changeset --- .../Commands.Resources.Test.csproj | 17 +- .../SamplePolicyAssignmentParameters.json | 8 + .../SamplePolicyDefinitionParameters.json | 10 + .../SamplePolicyDefinitionWithParameters.json | 11 + .../ScenarioTests/PolicyTests.cs | 14 + .../ScenarioTests/PolicyTests.ps1 | 85 ++ .../TestPolicyAssignmentWithParameters.json | 907 ++++++++++++++++++ .../TestPolicyDefinitionWithParameters.json | 368 +++++++ 8 files changed, 1419 insertions(+), 1 deletion(-) create mode 100644 src/ResourceManager/Resources/Commands.Resources.Test/SamplePolicyAssignmentParameters.json create mode 100644 src/ResourceManager/Resources/Commands.Resources.Test/SamplePolicyDefinitionParameters.json create mode 100644 src/ResourceManager/Resources/Commands.Resources.Test/SamplePolicyDefinitionWithParameters.json create mode 100644 src/ResourceManager/Resources/Commands.Resources.Test/SessionRecords/Microsoft.Azure.Commands.Resources.Test.ScenarioTests.PolicyTests/TestPolicyAssignmentWithParameters.json create mode 100644 src/ResourceManager/Resources/Commands.Resources.Test/SessionRecords/Microsoft.Azure.Commands.Resources.Test.ScenarioTests.PolicyTests/TestPolicyDefinitionWithParameters.json 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 ce0316f8d881..d3523cd506ab 100644 --- a/src/ResourceManager/Resources/Commands.Resources.Test/Commands.Resources.Test.csproj +++ b/src/ResourceManager/Resources/Commands.Resources.Test/Commands.Resources.Test.csproj @@ -274,6 +274,15 @@ Always + + Always + + + Always + + + Always + Always @@ -395,8 +404,14 @@ Always + + Always + - PreserveNewest + Always + + + Always Always diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/SamplePolicyAssignmentParameters.json b/src/ResourceManager/Resources/Commands.Resources.Test/SamplePolicyAssignmentParameters.json new file mode 100644 index 000000000000..cdcb50dd9cc9 --- /dev/null +++ b/src/ResourceManager/Resources/Commands.Resources.Test/SamplePolicyAssignmentParameters.json @@ -0,0 +1,8 @@ +{ + "listOfAllowedLocations": { + "value": [ + "West US", + "West US 2" + ] + } +} \ No newline at end of file diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/SamplePolicyDefinitionParameters.json b/src/ResourceManager/Resources/Commands.Resources.Test/SamplePolicyDefinitionParameters.json new file mode 100644 index 000000000000..107d61e1c1ec --- /dev/null +++ b/src/ResourceManager/Resources/Commands.Resources.Test/SamplePolicyDefinitionParameters.json @@ -0,0 +1,10 @@ +{ + "listOfAllowedLocations": { + "type": "array", + "metadata": { + "description": "An array of permitted locations for resources.", + "strongType": "location", + "displayName": "List of locations" + } + } +} \ No newline at end of file diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/SamplePolicyDefinitionWithParameters.json b/src/ResourceManager/Resources/Commands.Resources.Test/SamplePolicyDefinitionWithParameters.json new file mode 100644 index 000000000000..61ed90935ecc --- /dev/null +++ b/src/ResourceManager/Resources/Commands.Resources.Test/SamplePolicyDefinitionWithParameters.json @@ -0,0 +1,11 @@ +{ + "if": { + "not": { + "field": "location", + "in": "[parameters('listOfAllowedLocations')]" + } + }, + "then": { + "effect": "deny" + } +} \ No newline at end of file diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/PolicyTests.cs b/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/PolicyTests.cs index b7b48fa7a5c8..9464d5455b9c 100644 --- a/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/PolicyTests.cs +++ b/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/PolicyTests.cs @@ -41,5 +41,19 @@ public void TestPolicyAssignmentCRUD() { ResourcesController.NewInstance.RunPsTest("Test-PolicyAssignmentCRUD"); } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void TestPolicyDefinitionWithParameters() + { + ResourcesController.NewInstance.RunPsTest("Test-PolicyDefinitionWithParameters"); + } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void TestPolicyAssignmentWithParameters() + { + ResourcesController.NewInstance.RunPsTest("Test-PolicyAssignmentWithParameters"); + } } } diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/PolicyTests.ps1 b/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/PolicyTests.ps1 index 2ce8cb858b06..90d006736e44 100644 --- a/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/PolicyTests.ps1 +++ b/src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/PolicyTests.ps1 @@ -78,3 +78,88 @@ function Test-PolicyAssignmentCRUD Assert-AreEqual True $remove } + +<# +.SYNOPSIS +Tests Policy definition creation with parameters +#> +function Test-PolicyDefinitionWithParameters +{ + # Test + $actual = New-AzureRMPolicyDefinition -Name testPDWP -Policy "$TestOutputRoot\SamplePolicyDefinitionWithParameters.json" -Parameter "$TestOutputRoot\SamplePolicyDefinitionParameters.json" + $expected = Get-AzureRMPolicyDefinition -Name testPDWP + Assert-AreEqual $expected.Name $actual.Name + Assert-AreEqual $expected.PolicyDefinitionId $actual.PolicyDefinitionId + Assert-NotNull($actual.Properties.PolicyRule) + Assert-NotNull($actual.Properties.Parameters) + Assert-NotNull($expected.Properties.Parameters) + $remove = Remove-AzureRMPolicyDefinition -Name testPDWP -Force + Assert-AreEqual True $remove + + $actual = New-AzureRMPolicyDefinition -Name testPDWP -Policy "$TestOutputRoot\SamplePolicyDefinitionWithParameters.json" -Parameter '{ "listOfAllowedLocations": { "type": "array", "metadata": { "description": "An array of permitted locations for resources.", "strongType": "location", "displayName": "List of locations" } } }' + $expected = Get-AzureRMPolicyDefinition -Name testPDWP + Assert-AreEqual $expected.Name $actual.Name + Assert-AreEqual $expected.PolicyDefinitionId $actual.PolicyDefinitionId + Assert-NotNull($actual.Properties.PolicyRule) + Assert-NotNull($actual.Properties.Parameters) + Assert-NotNull($expected.Properties.Parameters) + $remove = Remove-AzureRMPolicyDefinition -Name testPDWP -Force + Assert-AreEqual True $remove +} + +<# +.SYNOPSIS +Tests Policy assignment creation with parameters +#> +function Test-PolicyAssignmentWithParameters +{ + # Setup + $rgname = Get-ResourceGroupName + $policyName = Get-ResourceName + + # Test + $rg = New-AzureRMResourceGroup -Name $rgname -Location "west us" + $policy = New-AzureRMPolicyDefinition -Name $policyName -Policy "$TestOutputRoot\SamplePolicyDefinitionWithParameters.json" -Parameter "$TestOutputRoot\SamplePolicyDefinitionParameters.json" + $array = @("West US", "West US 2") + $param = @{"listOfAllowedLocations"=$array} + + $actual = New-AzureRMPolicyAssignment -Name testPAWP -Scope $rg.ResourceId -PolicyDefinition $policy -PolicyParameterObject $param + $expected = Get-AzureRMPolicyAssignment -Name testPAWP -Scope $rg.ResourceId + Assert-AreEqual $expected.Name $actual.Name + Assert-AreEqual Microsoft.Authorization/policyAssignments $actual.ResourceType + Assert-AreEqual $expected.PolicyAssignmentId $actual.PolicyAssignmentId + Assert-AreEqual $expected.Properties.PolicyDefinitionId $policy.PolicyDefinitionId + Assert-AreEqual $expected.Properties.Scope $rg.ResourceId + $remove = Remove-AzureRMPolicyAssignment -Name testPAWP -Scope $rg.ResourceId + Assert-AreEqual True $remove + + $actual = New-AzureRMPolicyAssignment -Name testPAWP -Scope $rg.ResourceId -PolicyDefinition $policy -PolicyParameter "$TestOutputRoot\SamplePolicyAssignmentParameters.json" + $expected = Get-AzureRMPolicyAssignment -Name testPAWP -Scope $rg.ResourceId + Assert-AreEqual $expected.Name $actual.Name + Assert-AreEqual Microsoft.Authorization/policyAssignments $actual.ResourceType + Assert-AreEqual $expected.PolicyAssignmentId $actual.PolicyAssignmentId + Assert-AreEqual $expected.Properties.PolicyDefinitionId $policy.PolicyDefinitionId + Assert-AreEqual $expected.Properties.Scope $rg.ResourceId + $remove = Remove-AzureRMPolicyAssignment -Name testPAWP -Scope $rg.ResourceId + Assert-AreEqual True $remove + + $actual = New-AzureRMPolicyAssignment -Name testPAWP -Scope $rg.ResourceId -PolicyDefinition $policy -PolicyParameter '{ "listOfAllowedLocations": { "value": [ "West US", "West US 2" ] } }' + $expected = Get-AzureRMPolicyAssignment -Name testPAWP -Scope $rg.ResourceId + Assert-AreEqual $expected.Name $actual.Name + Assert-AreEqual Microsoft.Authorization/policyAssignments $actual.ResourceType + Assert-AreEqual $expected.PolicyAssignmentId $actual.PolicyAssignmentId + Assert-AreEqual $expected.Properties.PolicyDefinitionId $policy.PolicyDefinitionId + Assert-AreEqual $expected.Properties.Scope $rg.ResourceId + $remove = Remove-AzureRMPolicyAssignment -Name testPAWP -Scope $rg.ResourceId + Assert-AreEqual True $remove + + $actual = New-AzureRMPolicyAssignment -Name testPAWP -Scope $rg.ResourceId -PolicyDefinition $policy -listOfAllowedLocations $array + $expected = Get-AzureRMPolicyAssignment -Name testPAWP -Scope $rg.ResourceId + Assert-AreEqual $expected.Name $actual.Name + Assert-AreEqual Microsoft.Authorization/policyAssignments $actual.ResourceType + Assert-AreEqual $expected.PolicyAssignmentId $actual.PolicyAssignmentId + Assert-AreEqual $expected.Properties.PolicyDefinitionId $policy.PolicyDefinitionId + Assert-AreEqual $expected.Properties.Scope $rg.ResourceId + $remove = Remove-AzureRMPolicyAssignment -Name testPAWP -Scope $rg.ResourceId + Assert-AreEqual True $remove +} diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/SessionRecords/Microsoft.Azure.Commands.Resources.Test.ScenarioTests.PolicyTests/TestPolicyAssignmentWithParameters.json b/src/ResourceManager/Resources/Commands.Resources.Test/SessionRecords/Microsoft.Azure.Commands.Resources.Test.ScenarioTests.PolicyTests/TestPolicyAssignmentWithParameters.json new file mode 100644 index 000000000000..e7c3dba66064 --- /dev/null +++ b/src/ResourceManager/Resources/Commands.Resources.Test/SessionRecords/Microsoft.Azure.Commands.Resources.Test.ScenarioTests.PolicyTests/TestPolicyAssignmentWithParameters.json @@ -0,0 +1,907 @@ +{ + "Entries": [ + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourcegroups/onesdk4191?api-version=2016-07-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlZ3JvdXBzL29uZXNkazQxOTE/YXBpLXZlcnNpb249MjAxNi0wNy0wMQ==", + "RequestMethod": "HEAD", + "RequestBody": "", + "RequestHeaders": { + "x-ms-client-request-id": [ + "192af517-144b-4f76-a018-c48770655ccc" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.1586.0", + "OSName/Windows_10_Pro", + "OSVersion/6.3.14393", + "Microsoft.Azure.Management.ResourceManager.ResourceManagementClient/1.2.0-preview" + ] + }, + "ResponseBody": "", + "ResponseHeaders": { + "Content-Length": [ + "102" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-failure-cause": [ + "gateway" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14998" + ], + "x-ms-request-id": [ + "1b685686-5e50-4b72-a163-8f2a3bccc440" + ], + "x-ms-correlation-request-id": [ + "1b685686-5e50-4b72-a163-8f2a3bccc440" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220917Z:1b685686-5e50-4b72-a163-8f2a3bccc440" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:16 GMT" + ] + }, + "StatusCode": 404 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourcegroups/onesdk4191?api-version=2016-07-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlZ3JvdXBzL29uZXNkazQxOTE/YXBpLXZlcnNpb249MjAxNi0wNy0wMQ==", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"location\": \"west us\"\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "29" + ], + "x-ms-client-request-id": [ + "a8fa9a97-b02d-4098-9893-cbd68669d3af" + ], + "accept-language": [ + "en-US" + ], + "User-Agent": [ + "FxVersion/4.6.1586.0", + "OSName/Windows_10_Pro", + "OSVersion/6.3.14393", + "Microsoft.Azure.Management.ResourceManager.ResourceManagementClient/1.2.0-preview" + ] + }, + "ResponseBody": "{\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"name\": \"onesdk4191\",\r\n \"location\": \"westus\",\r\n \"properties\": {\r\n \"provisioningState\": \"Succeeded\"\r\n }\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "173" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1199" + ], + "x-ms-request-id": [ + "21e0b91b-1909-40ea-9e00-e8c6a59c1238" + ], + "x-ms-correlation-request-id": [ + "21e0b91b-1909-40ea-9e00-e8c6a59c1238" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220917Z:21e0b91b-1909-40ea-9e00-e8c6a59c1238" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:17 GMT" + ] + }, + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policydefinitions/onesdk559?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lkZWZpbml0aW9ucy9vbmVzZGs1NTk/YXBpLXZlcnNpb249MjAxNi0xMi0wMQ==", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"name\": \"onesdk559\",\r\n \"properties\": {\r\n \"policyRule\": {\r\n \"if\": {\r\n \"not\": {\r\n \"field\": \"location\",\r\n \"in\": \"[parameters('listOfAllowedLocations')]\"\r\n }\r\n },\r\n \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n },\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"type\": \"array\",\r\n \"metadata\": {\r\n \"description\": \"An array of permitted locations for resources.\",\r\n \"strongType\": \"location\",\r\n \"displayName\": \"List of locations\"\r\n }\r\n }\r\n }\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "568" + ], + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "__AllParameterSets" + ], + "CommandName": [ + "New-AzureRmPolicyDefinition" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyType\": \"Custom\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"type\": \"Array\",\r\n \"metadata\": {\r\n \"description\": \"An array of permitted locations for resources.\",\r\n \"strongType\": \"location\",\r\n \"displayName\": \"List of locations\"\r\n }\r\n }\r\n },\r\n \"policyRule\": {\r\n \"if\": {\r\n \"not\": {\r\n \"field\": \"location\",\r\n \"in\": \"[parameters('listOfAllowedLocations')]\"\r\n }\r\n },\r\n \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"type\": \"Microsoft.Authorization/policyDefinitions\",\r\n \"name\": \"onesdk559\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "540" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "westus2:c4bdd64e-3284-48a1-8832-3a0574307ff7" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" + ], + "x-ms-correlation-request-id": [ + "cb03cdf7-bd41-4fdf-8da9-0ac3b16f09e4" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220918Z:cb03cdf7-bd41-4fdf-8da9-0ac3b16f09e4" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:17 GMT" + ] + }, + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyassignments/testPAWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlR3JvdXBzL29uZXNkazQxOTEvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeWFzc2lnbm1lbnRzL3Rlc3RQQT9hcGktdmVyc2lvbj0yMDE2LTEyLTAx", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"name\": \"testPAWP\"\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "436" + ], + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "Policy assignment with parameters via policy parameter object" + ], + "CommandName": [ + "New-AzureRmPolicyAssignment" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyAssignments/testPAWP\",\r\n \"type\": \"Microsoft.Authorization/policyAssignments\",\r\n \"name\": \"testPAWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "526" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "westus2:4bcfa522-8875-4d96-ad88-3048cef17af7" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1199" + ], + "x-ms-correlation-request-id": [ + "27cd6461-969d-4c6e-9654-b21677107cdd" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220919Z:27cd6461-969d-4c6e-9654-b21677107cdd" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:18 GMT" + ] + }, + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyassignments/testPAWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlR3JvdXBzL29uZXNkazQxOTEvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeWFzc2lnbm1lbnRzL3Rlc3RQQT9hcGktdmVyc2lvbj0yMDE2LTEyLTAx", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"name\": \"testPAWP\"\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "436" + ], + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "Policy assignment with parameters via policy parameter string" + ], + "CommandName": [ + "New-AzureRmPolicyAssignment" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyAssignments/testPAWP\",\r\n \"type\": \"Microsoft.Authorization/policyAssignments\",\r\n \"name\": \"testPAWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "526" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "westus2:53302bce-b878-4045-8655-6078abfbae55" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1199" + ], + "x-ms-correlation-request-id": [ + "3e967c79-1e57-4126-8f0d-c42640c78815" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220920Z:3e967c79-1e57-4126-8f0d-c42640c78815" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:20 GMT" + ] + }, + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyassignments/testPAWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlR3JvdXBzL29uZXNkazQxOTEvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeWFzc2lnbm1lbnRzL3Rlc3RQQT9hcGktdmVyc2lvbj0yMDE2LTEyLTAx", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"name\": \"testPAWP\"\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "436" + ], + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "Policy assignment with parameters via policy parameter string" + ], + "CommandName": [ + "New-AzureRmPolicyAssignment" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyAssignments/testPAWP\",\r\n \"type\": \"Microsoft.Authorization/policyAssignments\",\r\n \"name\": \"testPAWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "526" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "westus2:5d1ec133-6783-464a-b4dd-a8ef460917b6" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1197" + ], + "x-ms-correlation-request-id": [ + "1552d731-3d5f-473f-aaf1-ac8edd949e47" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220922Z:1552d731-3d5f-473f-aaf1-ac8edd949e47" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:22 GMT" + ] + }, + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyassignments/testPAWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlR3JvdXBzL29uZXNkazQxOTEvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeWFzc2lnbm1lbnRzL3Rlc3RQQT9hcGktdmVyc2lvbj0yMDE2LTEyLTAx", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"properties\": {\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"name\": \"testPAWP\"\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "436" + ], + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "Policy assignment without parameters" + ], + "CommandName": [ + "New-AzureRmPolicyAssignment" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyAssignments/testPAWP\",\r\n \"type\": \"Microsoft.Authorization/policyAssignments\",\r\n \"name\": \"testPAWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "526" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "westus2:984d553e-318e-4923-bb90-42a8ba52ab18" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1199" + ], + "x-ms-correlation-request-id": [ + "96eddeff-3b22-4c17-a452-33ea241a08bb" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220922Z:96eddeff-3b22-4c17-a452-33ea241a08bb" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:22 GMT" + ] + }, + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyassignments/testPAWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlR3JvdXBzL29uZXNkazQxOTEvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeWFzc2lnbm1lbnRzL3Rlc3RQQT9hcGktdmVyc2lvbj0yMDE2LTEyLTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "The policy assignment name parameter set." + ], + "CommandName": [ + "Get-AzureRmPolicyAssignment" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyAssignments/testPAWP\",\r\n \"type\": \"Microsoft.Authorization/policyAssignments\",\r\n \"name\": \"testPAWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "526" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Vary": [ + "Accept-Encoding" + ], + "x-ms-request-id": [ + "westus2:a433311e-50e2-4406-92ea-c50abbec1fdc" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14997" + ], + "x-ms-correlation-request-id": [ + "1ab118a1-1c69-4f79-ae31-cb1283c8fa8e" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220919Z:1ab118a1-1c69-4f79-ae31-cb1283c8fa8e" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:19 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyassignments/testPAWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlR3JvdXBzL29uZXNkazQxOTEvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeWFzc2lnbm1lbnRzL3Rlc3RQQT9hcGktdmVyc2lvbj0yMDE2LTEyLTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "The policy assignment name parameter set." + ], + "CommandName": [ + "Get-AzureRmPolicyAssignment" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyAssignments/testPAWP\",\r\n \"type\": \"Microsoft.Authorization/policyAssignments\",\r\n \"name\": \"testPAWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "526" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Vary": [ + "Accept-Encoding" + ], + "x-ms-request-id": [ + "westus2:f3e626d0-9751-42f7-9c0f-14252675f9b5" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14997" + ], + "x-ms-correlation-request-id": [ + "3c5f5b38-e114-4696-b935-e89cca418d15" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220921Z:3c5f5b38-e114-4696-b935-e89cca418d15" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:20 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyassignments/testPAWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlR3JvdXBzL29uZXNkazQxOTEvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeWFzc2lnbm1lbnRzL3Rlc3RQQT9hcGktdmVyc2lvbj0yMDE2LTEyLTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "The policy assignment name parameter set." + ], + "CommandName": [ + "Get-AzureRmPolicyAssignment" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyAssignments/testPAWP\",\r\n \"type\": \"Microsoft.Authorization/policyAssignments\",\r\n \"name\": \"testPAWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "526" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Vary": [ + "Accept-Encoding" + ], + "x-ms-request-id": [ + "westus2:0b4febff-a241-4478-82f5-436edd793579" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14997" + ], + "x-ms-correlation-request-id": [ + "41855a71-2ab0-4e4b-a7a0-edf7e1c1d1a2" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220922Z:41855a71-2ab0-4e4b-a7a0-edf7e1c1d1a2" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:21 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyassignments/testPAWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlR3JvdXBzL29uZXNkazQxOTEvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeWFzc2lnbm1lbnRzL3Rlc3RQQT9hcGktdmVyc2lvbj0yMDE2LTEyLTAx", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "The policy assignment name parameter set." + ], + "CommandName": [ + "Get-AzureRmPolicyAssignment" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyAssignments/testPAWP\",\r\n \"type\": \"Microsoft.Authorization/policyAssignments\",\r\n \"name\": \"testPAWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "526" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Vary": [ + "Accept-Encoding" + ], + "x-ms-request-id": [ + "westus2:8b248107-8932-4501-8fc4-d1766e1219e9" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14997" + ], + "x-ms-correlation-request-id": [ + "572132aa-7225-4549-bbc9-0601927b4767" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220922Z:572132aa-7225-4549-bbc9-0601927b4767" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:22 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyassignments/testPAWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlR3JvdXBzL29uZXNkazQxOTEvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeWFzc2lnbm1lbnRzL3Rlc3RQQT9hcGktdmVyc2lvbj0yMDE2LTEyLTAx", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "The policy assignment name parameter set." + ], + "CommandName": [ + "Remove-AzureRmPolicyAssignment" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyAssignments/testPAWP\",\r\n \"type\": \"Microsoft.Authorization/policyAssignments\",\r\n \"name\": \"testPAWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "526" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Vary": [ + "Accept-Encoding" + ], + "x-ms-request-id": [ + "westus2:03f0cba7-d37e-40d6-b859-398efd69bcb6" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1199" + ], + "x-ms-correlation-request-id": [ + "fb15e263-6a8b-4d54-bf08-4db00f65c5bf" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220920Z:fb15e263-6a8b-4d54-bf08-4db00f65c5bf" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:19 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyassignments/testPAWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlR3JvdXBzL29uZXNkazQxOTEvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeWFzc2lnbm1lbnRzL3Rlc3RQQT9hcGktdmVyc2lvbj0yMDE2LTEyLTAx", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "The policy assignment name parameter set." + ], + "CommandName": [ + "Remove-AzureRmPolicyAssignment" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyAssignments/testPAWP\",\r\n \"type\": \"Microsoft.Authorization/policyAssignments\",\r\n \"name\": \"testPAWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "526" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Vary": [ + "Accept-Encoding" + ], + "x-ms-request-id": [ + "westus2:504aae6b-bae0-4980-a8f5-5d33c4e1bea0" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" + ], + "x-ms-correlation-request-id": [ + "d626c497-bd22-4851-81c1-867883f00d1b" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220922Z:d626c497-bd22-4851-81c1-867883f00d1b" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:21 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyassignments/testPAWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlR3JvdXBzL29uZXNkazQxOTEvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeWFzc2lnbm1lbnRzL3Rlc3RQQT9hcGktdmVyc2lvbj0yMDE2LTEyLTAx", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "The policy assignment name parameter set." + ], + "CommandName": [ + "Remove-AzureRmPolicyAssignment" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyAssignments/testPAWP\",\r\n \"type\": \"Microsoft.Authorization/policyAssignments\",\r\n \"name\": \"testPAWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "526" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Vary": [ + "Accept-Encoding" + ], + "x-ms-request-id": [ + "westus2:d46db13c-1963-4427-969d-227474c3d5cf" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" + ], + "x-ms-correlation-request-id": [ + "ad535275-5a2e-493d-83e4-452991eb1008" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220922Z:ad535275-5a2e-493d-83e4-452991eb1008" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:22 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyassignments/testPAWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Jlc291cmNlR3JvdXBzL29uZXNkazQxOTEvcHJvdmlkZXJzL01pY3Jvc29mdC5BdXRob3JpemF0aW9uL3BvbGljeWFzc2lnbm1lbnRzL3Rlc3RQQT9hcGktdmVyc2lvbj0yMDE2LTEyLTAx", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "The policy assignment name parameter set." + ], + "CommandName": [ + "Remove-AzureRmPolicyAssignment" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyDefinitionId\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/onesdk559\",\r\n \"scope\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"value\": [\r\n \"West US\",\r\n \"West US 2\"\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/resourceGroups/onesdk4191/providers/Microsoft.Authorization/policyAssignments/testPAWP\",\r\n \"type\": \"Microsoft.Authorization/policyAssignments\",\r\n \"name\": \"testPAWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "526" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Vary": [ + "Accept-Encoding" + ], + "x-ms-request-id": [ + "westus2:abf87272-b127-4292-a687-cd0ceda516b7" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" + ], + "x-ms-correlation-request-id": [ + "94830f50-3394-4f51-bb82-907a2818bcb4" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220923Z:94830f50-3394-4f51-bb82-907a2818bcb4" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:09:22 GMT" + ] + }, + "StatusCode": 200 + } + ], + "Names": { + "Test-PolicyAssignmentWithParameters": [ + "onesdk4191", + "onesdk559" + ] + }, + "Variables": { + "SubscriptionId": "11e23d44-5f84-4f2f-908f-e3bd3195243d", + "TenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", + "Domain": "microsoft.com" + } +} \ No newline at end of file diff --git a/src/ResourceManager/Resources/Commands.Resources.Test/SessionRecords/Microsoft.Azure.Commands.Resources.Test.ScenarioTests.PolicyTests/TestPolicyDefinitionWithParameters.json b/src/ResourceManager/Resources/Commands.Resources.Test/SessionRecords/Microsoft.Azure.Commands.Resources.Test.ScenarioTests.PolicyTests/TestPolicyDefinitionWithParameters.json new file mode 100644 index 000000000000..f45f0f0c568c --- /dev/null +++ b/src/ResourceManager/Resources/Commands.Resources.Test/SessionRecords/Microsoft.Azure.Commands.Resources.Test.ScenarioTests.PolicyTests/TestPolicyDefinitionWithParameters.json @@ -0,0 +1,368 @@ +{ + "Entries": [ + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policydefinitions/testPDWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lkZWZpbml0aW9ucy9vbmVzZGs3Mjc/YXBpLXZlcnNpb249MjAxNi0xMi0wMQ==", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"name\": \"testPDWP\",\r\n \"properties\": {\r\n \"policyRule\": {\r\n \"if\": {\r\n \"not\": {\r\n \"field\": \"location\",\r\n \"in\": \"[parameters('listOfAllowedLocations')]\"\r\n }\r\n },\r\n \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n },\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"type\": \"array\",\r\n \"metadata\": {\r\n \"description\": \"An array of permitted locations for resources.\",\r\n \"strongType\": \"location\",\r\n \"displayName\": \"List of locations\"\r\n }\r\n }\r\n }\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "568" + ], + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "__AllParameterSets" + ], + "CommandName": [ + "New-AzureRmPolicyDefinition" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyType\": \"Custom\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"type\": \"Array\",\r\n \"metadata\": {\r\n \"description\": \"An array of permitted locations for resources.\",\r\n \"strongType\": \"location\",\r\n \"displayName\": \"List of locations\"\r\n }\r\n }\r\n },\r\n \"policyRule\": {\r\n \"if\": {\r\n \"not\": {\r\n \"field\": \"location\",\r\n \"in\": \"[parameters('listOfAllowedLocations')]\"\r\n }\r\n },\r\n \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/testPDWP\",\r\n \"type\": \"Microsoft.Authorization/policyDefinitions\",\r\n \"name\": \"testPDWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "540" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "westus2:0140be8c-fa79-4db6-abff-5ab6373c1aff" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1199" + ], + "x-ms-correlation-request-id": [ + "6d8e783d-2ba8-45ab-8d16-2afc5754397a" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220435Z:6d8e783d-2ba8-45ab-8d16-2afc5754397a" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:04:35 GMT" + ] + }, + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policydefinitions/testPDWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lkZWZpbml0aW9ucy9vbmVzZGs3Mjc/YXBpLXZlcnNpb249MjAxNi0xMi0wMQ==", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"name\": \"testPDWP\",\r\n \"properties\": {\r\n \"policyRule\": {\r\n \"if\": {\r\n \"not\": {\r\n \"field\": \"location\",\r\n \"in\": \"[parameters('listOfAllowedLocations')]\"\r\n }\r\n },\r\n \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n },\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"type\": \"array\",\r\n \"metadata\": {\r\n \"description\": \"An array of permitted locations for resources.\",\r\n \"strongType\": \"location\",\r\n \"displayName\": \"List of locations\"\r\n }\r\n }\r\n }\r\n }\r\n}", + "RequestHeaders": { + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "568" + ], + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "__AllParameterSets" + ], + "CommandName": [ + "New-AzureRmPolicyDefinition" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyType\": \"Custom\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"type\": \"Array\",\r\n \"metadata\": {\r\n \"description\": \"An array of permitted locations for resources.\",\r\n \"strongType\": \"location\",\r\n \"displayName\": \"List of locations\"\r\n }\r\n }\r\n },\r\n \"policyRule\": {\r\n \"if\": {\r\n \"not\": {\r\n \"field\": \"location\",\r\n \"in\": \"[parameters('listOfAllowedLocations')]\"\r\n }\r\n },\r\n \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/testPDWP\",\r\n \"type\": \"Microsoft.Authorization/policyDefinitions\",\r\n \"name\": \"testPDWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "540" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "x-ms-request-id": [ + "westus2:4fae63f2-f4dd-4af4-9f54-c5a7c6b14263" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1199" + ], + "x-ms-correlation-request-id": [ + "aef09e8b-c570-4635-baf5-1e9dd229a0dd" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220437Z:aef09e8b-c570-4635-baf5-1e9dd229a0dd" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:04:36 GMT" + ] + }, + "StatusCode": 201 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policydefinitions/testPDWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lkZWZpbml0aW9ucy9vbmVzZGs3Mjc/YXBpLXZlcnNpb249MjAxNi0xMi0wMQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "The policy definition name parameter set." + ], + "CommandName": [ + "Get-AzureRmPolicyDefinition" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyType\": \"Custom\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"type\": \"Array\",\r\n \"metadata\": {\r\n \"description\": \"An array of permitted locations for resources.\",\r\n \"strongType\": \"location\",\r\n \"displayName\": \"List of locations\"\r\n }\r\n }\r\n },\r\n \"policyRule\": {\r\n \"if\": {\r\n \"not\": {\r\n \"field\": \"location\",\r\n \"in\": \"[parameters('listOfAllowedLocations')]\"\r\n }\r\n },\r\n \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/testPDWP\",\r\n \"type\": \"Microsoft.Authorization/policyDefinitions\",\r\n \"name\": \"testPDWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "540" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Vary": [ + "Accept-Encoding" + ], + "x-ms-request-id": [ + "westus2:b23ef78e-9303-4023-819f-ca677eef38bb" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14999" + ], + "x-ms-correlation-request-id": [ + "0139bfee-3943-469e-839e-636fcb417040" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220436Z:0139bfee-3943-469e-839e-636fcb417040" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:04:35 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policydefinitions/testPDWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lkZWZpbml0aW9ucy9vbmVzZGs3Mjc/YXBpLXZlcnNpb249MjAxNi0xMi0wMQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "The policy definition name parameter set." + ], + "CommandName": [ + "Get-AzureRmPolicyDefinition" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyType\": \"Custom\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"type\": \"Array\",\r\n \"metadata\": {\r\n \"description\": \"An array of permitted locations for resources.\",\r\n \"strongType\": \"location\",\r\n \"displayName\": \"List of locations\"\r\n }\r\n }\r\n },\r\n \"policyRule\": {\r\n \"if\": {\r\n \"not\": {\r\n \"field\": \"location\",\r\n \"in\": \"[parameters('listOfAllowedLocations')]\"\r\n }\r\n },\r\n \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/testPDWP\",\r\n \"type\": \"Microsoft.Authorization/policyDefinitions\",\r\n \"name\": \"testPDWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "540" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Vary": [ + "Accept-Encoding" + ], + "x-ms-request-id": [ + "westus2:f2b72388-4dda-4722-9c62-a3fbe3ac9f34" + ], + "x-ms-ratelimit-remaining-subscription-reads": [ + "14998" + ], + "x-ms-correlation-request-id": [ + "4eb2f78e-e12a-426a-9bd4-40ee3cf98ee4" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220437Z:4eb2f78e-e12a-426a-9bd4-40ee3cf98ee4" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:04:37 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policydefinitions/testPDWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lkZWZpbml0aW9ucy9vbmVzZGs3Mjc/YXBpLXZlcnNpb249MjAxNi0xMi0wMQ==", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "The policy definition name parameter set." + ], + "CommandName": [ + "Remove-AzureRmPolicyDefinition" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyType\": \"Custom\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"type\": \"Array\",\r\n \"metadata\": {\r\n \"description\": \"An array of permitted locations for resources.\",\r\n \"strongType\": \"location\",\r\n \"displayName\": \"List of locations\"\r\n }\r\n }\r\n },\r\n \"policyRule\": {\r\n \"if\": {\r\n \"not\": {\r\n \"field\": \"location\",\r\n \"in\": \"[parameters('listOfAllowedLocations')]\"\r\n }\r\n },\r\n \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/testPDWP\",\r\n \"type\": \"Microsoft.Authorization/policyDefinitions\",\r\n \"name\": \"testPDWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "540" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Vary": [ + "Accept-Encoding" + ], + "x-ms-request-id": [ + "westus2:c8d8035d-a49f-46fd-af03-40d66f56ab70" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" + ], + "x-ms-correlation-request-id": [ + "ed460ec2-c00e-43cd-a1ed-8bdad5481507" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220437Z:ed460ec2-c00e-43cd-a1ed-8bdad5481507" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:04:36 GMT" + ] + }, + "StatusCode": 200 + }, + { + "RequestUri": "/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policydefinitions/testPDWP?api-version=2016-12-01", + "EncodedRequestUri": "L3N1YnNjcmlwdGlvbnMvMTFlMjNkNDQtNWY4NC00ZjJmLTkwOGYtZTNiZDMxOTUyNDNkL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lkZWZpbml0aW9ucy9vbmVzZGs3Mjc/YXBpLXZlcnNpb249MjAxNi0xMi0wMQ==", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "User-Agent": [ + "AzurePowershell/v3.4.0.0", + "PSVersion/v5.1.14393.693" + ], + "ParameterSetName": [ + "The policy definition name parameter set." + ], + "CommandName": [ + "Remove-AzureRmPolicyDefinition" + ] + }, + "ResponseBody": "{\r\n \"properties\": {\r\n \"policyType\": \"Custom\",\r\n \"parameters\": {\r\n \"listOfAllowedLocations\": {\r\n \"type\": \"Array\",\r\n \"metadata\": {\r\n \"description\": \"An array of permitted locations for resources.\",\r\n \"strongType\": \"location\",\r\n \"displayName\": \"List of locations\"\r\n }\r\n }\r\n },\r\n \"policyRule\": {\r\n \"if\": {\r\n \"not\": {\r\n \"field\": \"location\",\r\n \"in\": \"[parameters('listOfAllowedLocations')]\"\r\n }\r\n },\r\n \"then\": {\r\n \"effect\": \"deny\"\r\n }\r\n }\r\n },\r\n \"id\": \"/subscriptions/11e23d44-5f84-4f2f-908f-e3bd3195243d/providers/Microsoft.Authorization/policyDefinitions/testPDWP\",\r\n \"type\": \"Microsoft.Authorization/policyDefinitions\",\r\n \"name\": \"testPDWP\"\r\n}", + "ResponseHeaders": { + "Content-Length": [ + "540" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ], + "Pragma": [ + "no-cache" + ], + "Vary": [ + "Accept-Encoding" + ], + "x-ms-request-id": [ + "westus2:b31bd4fe-2bef-46ad-bcbf-93b8a3017dde" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" + ], + "x-ms-correlation-request-id": [ + "edc56751-1d62-4183-89e7-706dcadfa169" + ], + "x-ms-routing-request-id": [ + "WESTUS2:20170213T220437Z:edc56751-1d62-4183-89e7-706dcadfa169" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains" + ], + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 13 Feb 2017 22:04:36 GMT" + ] + }, + "StatusCode": 200 + } + ], + "Names": { + "Test-PolicyDefinitionWithParameters": [ + "testPDWP" + ] + }, + "Variables": { + "SubscriptionId": "11e23d44-5f84-4f2f-908f-e3bd3195243d", + "TenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47", + "Domain": "microsoft.com" + } +} \ No newline at end of file From e80e71927f61f5e1f9edb941bee383ebff51ec49 Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Mon, 13 Feb 2017 15:40:19 -0800 Subject: [PATCH 15/18] Code styles --- .../Cmdlets/Extensions/JsonExtensions.cs | 4 ++-- .../Implementation/Policy/NewAzurePolicyAssignment.cs | 6 +++--- .../Implementation/Policy/NewAzurePolicyDefinition.cs | 4 ++-- .../Implementation/Policy/SetAzurePolicyAssignment.cs | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Extensions/JsonExtensions.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Extensions/JsonExtensions.cs index 9a1c20f68bdc..cc78c412bb0f 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Extensions/JsonExtensions.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Extensions/JsonExtensions.cs @@ -220,7 +220,7 @@ public static bool TryConvertTo(this JToken jobject, out TType result) /// The object. /// The key set to extract from the object. Default is all keys. /// The conversion result. - public static JObject ToParameterObject(this IDictionary dict, IEnumerable keys = null) + public static JObject ToJObjectWithValue(this IDictionary dict, IEnumerable keys = null) { if (dict == null) { @@ -240,4 +240,4 @@ public static JObject ToParameterObject(this IDictionary dict, IEnumerable keys return parameterObject; } } -} \ No newline at end of file +} diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index ed8e689f7e55..4cac950bbd75 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -200,17 +200,17 @@ private JObject GetParameters() // Load from PS object if (this.PolicyParameterObject != null) { - return this.PolicyParameterObject.ToParameterObject(); + return this.PolicyParameterObject.ToJObjectWithValue(); } // Load dynamic parameters var parameters = PowerShellUtilities.GetUsedDynamicParameters(dynamicParameters, MyInvocation); if (parameters.Count() > 0) { - return MyInvocation.BoundParameters.ToParameterObject(parameters.Select(p => p.Name)); + return MyInvocation.BoundParameters.ToJObjectWithValue(parameters.Select(p => p.Name)); } return null; } } -} \ No newline at end of file +} diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs index 4c433e4827ac..f870a94ab855 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyDefinition.cs @@ -120,8 +120,8 @@ private JToken GetResource() { Description = this.Description ?? null, DisplayName = this.DisplayName ?? null, - PolicyRule = JObject.Parse(GetPolicyRuleObject().ToString()), - Parameters = this.Parameter == null ? null : JObject.Parse(GetParametersObject().ToString()) + PolicyRule = JObject.Parse(this.GetPolicyRuleObject().ToString()), + Parameters = this.Parameter == null ? null : JObject.Parse(this.GetParametersObject().ToString()) } }; diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/SetAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/SetAzurePolicyAssignment.cs index 30395458d071..2ddb698da5cd 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/SetAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/SetAzurePolicyAssignment.cs @@ -145,4 +145,4 @@ protected string GetResourceId() extensionResourceName: this.Name); } } -} \ No newline at end of file +} From 5dfaed965f9d38815f7656c538a1df8fe518f696 Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Tue, 14 Feb 2017 18:18:52 -0800 Subject: [PATCH 16/18] Fixed mark down help --- .../help/New-AzureRmPolicyAssignment.md | 8 ++++++-- .../help/New-AzureRmPolicyDefinition.md | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md index 0da5367271e7..d8fd7bb40446 100644 --- a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md +++ b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyAssignment.md @@ -191,7 +191,9 @@ Accept wildcard characters: False ``` ### -PolicyParameter -The policy parameter file path or policy parameter string.```yaml +The policy parameter file path or policy parameter string. + +```yaml Type: String Parameter Sets: Policy assignment with parameters via policy parameter string Aliases: @@ -204,7 +206,9 @@ Accept wildcard characters: False ``` ### -PolicyParameterObject -The policy parameter object.```yaml +The policy parameter object. + +```yaml Type: Hashtable Parameter Sets: Policy assignment with parameters via policy parameter object Aliases: diff --git a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyDefinition.md b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyDefinition.md index dd6f8cdc6ac5..b31d90b955e3 100644 --- a/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyDefinition.md +++ b/src/ResourceManager/Resources/Commands.Resources/help/New-AzureRmPolicyDefinition.md @@ -172,7 +172,9 @@ Accept wildcard characters: False ``` ### -Parameter -The parameters declaration for policy definition. This can either be a path to a file name containing the parameters declaration, or the parameters declaration as string.```yaml +The parameters declaration for policy definition. This can either be a path to a file name containing the parameters declaration, or the parameters declaration as string. + +```yaml Type: String Parameter Sets: (All) Aliases: From 7b5de512976dba97609c29b3339c0eac76857d26 Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Wed, 15 Feb 2017 14:46:10 -0800 Subject: [PATCH 17/18] Improved dynamic properties by adding them to a parameter set and providing more useful help messages. --- .../Cmdlets/Extensions/PsObjectExtensions.cs | 27 +++++++++++++ .../Policy/NewAzurePolicyAssignment.cs | 39 +++++++++---------- 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Extensions/PsObjectExtensions.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Extensions/PsObjectExtensions.cs index 9e5270ceae9b..39bcea747bc8 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Extensions/PsObjectExtensions.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Extensions/PsObjectExtensions.cs @@ -133,5 +133,32 @@ private static JToken ToJToken(object value) return new JValue(value.ToString()); } + + /// + /// Gets nested property values from a easily using property path. + /// + /// The to get property value from. + /// The nested property path, e.g. "metadata.description". + /// The value of the specified property. + internal static object GetPSObjectProperty(this PSObject propertyObject, string propertyPath) + { + var propertyNames = propertyPath.Split('.'); + var tmpObject = propertyObject; + foreach (var propertyName in propertyNames) + { + var propertyInfo = tmpObject.Properties[propertyName]; + if (propertyInfo != null) + { + if (propertyInfo.Value is PSObject) + { + tmpObject = propertyInfo.Value as PSObject; + continue; + } + return propertyInfo.Value; + } + return null; + } + return tmpObject; + } } } diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index 4cac950bbd75..80e907e714ae 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -156,29 +156,28 @@ object IDynamicParameters.GetDynamicParameters() { if (this.PolicyDefinition != null) { - var properties = this.PolicyDefinition.Properties["Properties"]; - if (properties != null) + var parameters = this.PolicyDefinition.GetPSObjectProperty("Properties.parameters") as PSObject; + if (parameters != null) { - var parameters = (properties.Value as PSObject).Properties["parameters"]; - if (parameters != null) + foreach (var param in parameters.Properties) { - foreach (var param in (parameters.Value as PSObject).Properties) + var type = (param.Value as PSObject).Properties["type"]; + var typeString = type != null ? type.Value.ToString() : string.Empty; + var description = (param.Value as PSObject).GetPSObjectProperty("metadata.description"); + var helpString = description != null ? description.ToString() : string.Format("The {0} policy parameter.", param.Name); + var dp = new RuntimeDefinedParameter { - var type = (param.Value as PSObject).Properties["type"]; - var typeString = type != null ? type.Value.ToString() : string.Empty; - var dp = new RuntimeDefinedParameter - { - Name = param.Name, - ParameterType = typeString.Equals("array", StringComparison.OrdinalIgnoreCase) ? typeof(object[]) : typeof(string) - }; - dp.Attributes.Add(new ParameterAttribute - { - Mandatory = false, - ValueFromPipelineByPropertyName = true, - HelpMessage = param.Name - }); - this.dynamicParameters.Add(param.Name, dp); - } + Name = param.Name, + ParameterType = typeString.Equals("array", StringComparison.OrdinalIgnoreCase) ? typeof(object[]) : typeof(string) + }; + dp.Attributes.Add(new ParameterAttribute + { + ParameterSetName = ParameterlessPolicyParameterSetName, + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = helpString + }); + this.dynamicParameters.Add(param.Name, dp); } } } From 5cf14789faac5a28346f56e5094042cf664f4d3a Mon Sep 17 00:00:00 2001 From: Yang Wang Date: Wed, 15 Feb 2017 17:00:36 -0800 Subject: [PATCH 18/18] Disallow pipeline values for dynamic properties; object[]->string[] --- .../Implementation/Policy/NewAzurePolicyAssignment.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs index 80e907e714ae..77dea304ffc6 100644 --- a/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs +++ b/src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/NewAzurePolicyAssignment.cs @@ -74,7 +74,7 @@ public class NewAzurePolicyAssignmentCmdlet : PolicyAssignmentCmdletBase, IDynam /// Gets or sets the policy assignment policy parameter object. /// [Parameter(ParameterSetName = PolicyParameterObjectParameterSetName, - Mandatory = true, ValueFromPipelineByPropertyName = true, HelpMessage = "The policy parameter object.")] + Mandatory = true, ValueFromPipelineByPropertyName = false, HelpMessage = "The policy parameter object.")] public Hashtable PolicyParameterObject { get; set; } /// @@ -168,13 +168,13 @@ object IDynamicParameters.GetDynamicParameters() var dp = new RuntimeDefinedParameter { Name = param.Name, - ParameterType = typeString.Equals("array", StringComparison.OrdinalIgnoreCase) ? typeof(object[]) : typeof(string) + ParameterType = typeString.Equals("array", StringComparison.OrdinalIgnoreCase) ? typeof(string[]) : typeof(string) }; dp.Attributes.Add(new ParameterAttribute { ParameterSetName = ParameterlessPolicyParameterSetName, Mandatory = true, - ValueFromPipelineByPropertyName = true, + ValueFromPipelineByPropertyName = false, HelpMessage = helpString }); this.dynamicParameters.Add(param.Name, dp);