Skip to content

Commit 49f399b

Browse files
authored
Merge pull request #7324 from mentat9/preview
Add missing parameter to Set-AzureRmPolicyDefinition
2 parents 9737fbb + e3eff68 commit 49f399b

File tree

8 files changed

+2563
-17
lines changed

8 files changed

+2563
-17
lines changed

src/ResourceManager/Resources/Commands.ResourceManager/Cmdlets/Implementation/Policy/SetAzurePolicyDefinition.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,13 @@ public class SetAzurePolicyDefinitionCmdlet : PolicyCmdletBase
8080
[ValidateNotNullOrEmpty]
8181
public string Parameter { get; set; }
8282

83+
/// <summary>
84+
/// Gets or sets the new policy definition mode parameter.
85+
/// </summary>
86+
[Parameter(Mandatory = false, ValueFromPipelineByPropertyName = true, HelpMessage = PolicyHelpStrings.NewPolicyDefinitionModeHelp)]
87+
[ValidateNotNullOrEmpty]
88+
public PolicyDefinitionMode? Mode { get; set; }
89+
8390
/// <summary>
8491
/// Gets or sets the policy definition management group name parameter.
8592
/// </summary>
@@ -132,10 +139,17 @@ private JToken GetResource(string resourceId, string apiVersion)
132139
{
133140
var resource = this.GetExistingResource(resourceId, apiVersion).Result.ToResource();
134141

135-
var policyRuleJson = string.IsNullOrEmpty(this.Metadata) ? resource.Properties["policyRule"]?.ToString() : GetObjectFromParameter(this.Policy).ToString();
142+
var policyRuleJson = string.IsNullOrEmpty(this.Policy) ? resource.Properties["policyRule"]?.ToString() : GetObjectFromParameter(this.Policy).ToString();
136143
var metaDataJson = string.IsNullOrEmpty(this.Metadata) ? resource.Properties["metadata"]?.ToString() : GetObjectFromParameter(this.Metadata).ToString();
137144
var parameterJson = string.IsNullOrEmpty(this.Parameter) ? resource.Properties["parameters"]?.ToString() : GetObjectFromParameter(this.Parameter).ToString();
138145

146+
PolicyDefinitionMode tempMode;
147+
PolicyDefinitionMode? existingMode = null;
148+
if (Enum.TryParse(resource.Properties["mode"]?.ToString(), true, out tempMode))
149+
{
150+
existingMode = tempMode;
151+
}
152+
139153
var policyDefinitionObject = new PolicyDefinition
140154
{
141155
Name = this.Name ?? resource.Name,
@@ -145,7 +159,8 @@ private JToken GetResource(string resourceId, string apiVersion)
145159
DisplayName = this.DisplayName ?? resource.Properties["displayName"]?.ToString(),
146160
PolicyRule = string.IsNullOrEmpty(policyRuleJson) ? null : JObject.Parse(policyRuleJson),
147161
Metadata = string.IsNullOrEmpty(metaDataJson) ? null : JObject.Parse(metaDataJson),
148-
Parameters = string.IsNullOrEmpty(parameterJson) ? null : JObject.Parse(parameterJson)
162+
Parameters = string.IsNullOrEmpty(parameterJson) ? null : JObject.Parse(parameterJson),
163+
Mode = this.Mode ?? existingMode
149164
}
150165
};
151166

src/ResourceManager/Resources/Commands.Resources.Test/Commands.Resources.Test.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,9 @@
294294
<None Include="SessionRecords\Microsoft.Azure.Commands.Resources.Test.ScenarioTests.PolicyTests\TestPolicyAssignmentIdentity.json">
295295
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
296296
</None>
297+
<None Include="SessionRecords\Microsoft.Azure.Commands.Resources.Test.ScenarioTests.PolicyTests\TestPolicyDefinitionMode.json">
298+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
299+
</None>
297300
<None Include="SessionRecords\Microsoft.Azure.Commands.Resources.Test.ScenarioTests.SubscriptionLevelDeploymentTests\TestDeploymentAsJob.json">
298301
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
299302
</None>

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ public void TestPolicyDefinitionCRUD()
3838
ResourcesController.NewInstance.RunPsTest(_logger, "Test-PolicyDefinitionCRUD");
3939
}
4040

41+
[Fact]
42+
[Trait(Category.AcceptanceType, Category.CheckIn)]
43+
public void TestPolicyDefinitionMode()
44+
{
45+
ResourcesController.NewInstance.RunPsTest(_logger, "Test-PolicyDefinitionMode");
46+
}
47+
4148
[Fact]
4249
[Trait(Category.AcceptanceType, Category.CheckIn)]
4350
public void TestPolicyDefinitionCRUDAtManagementGroup()

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

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,154 @@ function Test-PolicyDefinitionCRUD
6666
Assert-AreEqual True $remove
6767
}
6868

69+
<#
70+
.SYNOPSIS
71+
Tests Policy definition CRUD operations
72+
#>
73+
function Test-PolicyDefinitionMode
74+
{
75+
# setup
76+
$policyName = Get-ResourceName
77+
78+
# make a policy definition with non-default mode, get it back and validate
79+
$expected = New-AzureRMPolicyDefinition -Name $policyName -Policy "$TestOutputRoot\SamplePolicyDefinition.json" -Mode All -Description $description
80+
$actual = Get-AzureRMPolicyDefinition -Name $policyName
81+
Assert-NotNull $actual
82+
Assert-AreEqual $expected.Name $actual.Name
83+
Assert-AreEqual $expected.PolicyDefinitionId $actual.PolicyDefinitionId
84+
Assert-NotNull($actual.Properties.PolicyRule)
85+
Assert-AreEqual 'All' $actual.Properties.Mode
86+
Assert-AreEqual 'All' $expected.Properties.Mode
87+
88+
# update the same policy definition without touching mode, get it back and validate
89+
$actual = Set-AzureRMPolicyDefinition -Name $policyName -DisplayName testDisplay -Description $updatedDescription -Policy "$TestOutputRoot\SamplePolicyDefinition.json" -Metadata $metadata
90+
$expected = Get-AzureRMPolicyDefinition -Name $policyName
91+
Assert-AreEqual $expected.Properties.DisplayName $actual.Properties.DisplayName
92+
Assert-AreEqual $expected.Properties.Description $actual.Properties.Description
93+
Assert-NotNull($actual.Properties.Metadata)
94+
Assert-AreEqual $metadataValue $actual.Properties.Metadata.$metadataName
95+
Assert-AreEqual 'All' $actual.Properties.Mode
96+
Assert-AreEqual 'All' $expected.Properties.Mode
97+
98+
# update the same policy definition explicitly providing the same mode, get it back and validate
99+
$actual = Set-AzureRMPolicyDefinition -Name $policyName -DisplayName testDisplay -Mode 'All' -Description $updatedDescription -Policy "$TestOutputRoot\SamplePolicyDefinition.json" -Metadata $metadata
100+
$expected = Get-AzureRMPolicyDefinition -Name $policyName
101+
Assert-AreEqual $expected.Properties.DisplayName $actual.Properties.DisplayName
102+
Assert-AreEqual $expected.Properties.Description $actual.Properties.Description
103+
Assert-NotNull($actual.Properties.Metadata)
104+
Assert-AreEqual $metadataValue $actual.Properties.Metadata.$metadataName
105+
Assert-AreEqual 'All' $actual.Properties.Mode
106+
Assert-AreEqual 'All' $expected.Properties.Mode
107+
108+
# update the same policy definition explicitly providing a different mode, get it back and validate
109+
$actual = Set-AzureRMPolicyDefinition -Name $policyName -DisplayName testDisplay -Mode 'Indexed' -Description $updatedDescription -Policy "$TestOutputRoot\SamplePolicyDefinition.json" -Metadata $metadata
110+
$expected = Get-AzureRMPolicyDefinition -Name $policyName
111+
Assert-AreEqual $expected.Properties.DisplayName $actual.Properties.DisplayName
112+
Assert-AreEqual $expected.Properties.Description $actual.Properties.Description
113+
Assert-NotNull($actual.Properties.Metadata)
114+
Assert-AreEqual $metadataValue $actual.Properties.Metadata.$metadataName
115+
Assert-AreEqual 'Indexed' $actual.Properties.Mode
116+
Assert-AreEqual 'Indexed' $expected.Properties.Mode
117+
118+
# clean up
119+
$remove = Remove-AzureRMPolicyDefinition -Name $policyName -Force
120+
Assert-AreEqual True $remove
121+
122+
# repeat the same four tests at management group
123+
$managementGroup = 'AzGovTest8'
124+
125+
# make a policy definition with non-default mode, get it back and validate
126+
$expected = New-AzureRMPolicyDefinition -ManagementGroupName $managementGroup -Name $policyName -Policy "$TestOutputRoot\SamplePolicyDefinition.json" -Mode All -Description $description
127+
$actual = Get-AzureRMPolicyDefinition -ManagementGroupName $managementGroup -Name $policyName
128+
Assert-NotNull $actual
129+
Assert-AreEqual $expected.Name $actual.Name
130+
Assert-AreEqual $expected.PolicyDefinitionId $actual.PolicyDefinitionId
131+
Assert-NotNull($actual.Properties.PolicyRule)
132+
Assert-AreEqual 'All' $actual.Properties.Mode
133+
Assert-AreEqual 'All' $expected.Properties.Mode
134+
135+
# update the same policy definition without touching mode, get it back and validate
136+
$actual = Set-AzureRMPolicyDefinition -ManagementGroupName $managementGroup -Name $policyName -DisplayName testDisplay -Description $updatedDescription -Policy "$TestOutputRoot\SamplePolicyDefinition.json" -Metadata $metadata
137+
$expected = Get-AzureRMPolicyDefinition -ManagementGroupName $managementGroup -Name $policyName
138+
Assert-AreEqual $expected.Properties.DisplayName $actual.Properties.DisplayName
139+
Assert-AreEqual $expected.Properties.Description $actual.Properties.Description
140+
Assert-NotNull($actual.Properties.Metadata)
141+
Assert-AreEqual $metadataValue $actual.Properties.Metadata.$metadataName
142+
Assert-AreEqual 'All' $actual.Properties.Mode
143+
Assert-AreEqual 'All' $expected.Properties.Mode
144+
145+
# update the same policy definition explicitly providing the same mode, get it back and validate
146+
$actual = Set-AzureRMPolicyDefinition -ManagementGroupName $managementGroup -Name $policyName -DisplayName testDisplay -Mode 'All' -Description $updatedDescription -Policy "$TestOutputRoot\SamplePolicyDefinition.json" -Metadata $metadata
147+
$expected = Get-AzureRMPolicyDefinition -ManagementGroupName $managementGroup -Name $policyName
148+
Assert-AreEqual $expected.Properties.DisplayName $actual.Properties.DisplayName
149+
Assert-AreEqual $expected.Properties.Description $actual.Properties.Description
150+
Assert-NotNull($actual.Properties.Metadata)
151+
Assert-AreEqual $metadataValue $actual.Properties.Metadata.$metadataName
152+
Assert-AreEqual 'All' $actual.Properties.Mode
153+
Assert-AreEqual 'All' $expected.Properties.Mode
154+
155+
# update the same policy definition explicitly providing a different mode, get it back and validate
156+
$actual = Set-AzureRMPolicyDefinition -ManagementGroupName $managementGroup -Name $policyName -DisplayName testDisplay -Mode 'Indexed' -Description $updatedDescription -Policy "$TestOutputRoot\SamplePolicyDefinition.json" -Metadata $metadata
157+
$expected = Get-AzureRMPolicyDefinition -ManagementGroupName $managementGroup -Name $policyName
158+
Assert-AreEqual $expected.Properties.DisplayName $actual.Properties.DisplayName
159+
Assert-AreEqual $expected.Properties.Description $actual.Properties.Description
160+
Assert-NotNull($actual.Properties.Metadata)
161+
Assert-AreEqual $metadataValue $actual.Properties.Metadata.$metadataName
162+
Assert-AreEqual 'Indexed' $actual.Properties.Mode
163+
Assert-AreEqual 'Indexed' $expected.Properties.Mode
164+
165+
# clean up
166+
$remove = Remove-AzureRMPolicyDefinition -ManagementGroupName $managementGroup -Name $policyName -Force
167+
Assert-AreEqual True $remove
168+
169+
# repeat the same four tests at subscription id
170+
$subscriptionId = 'e8a0d3c2-c26a-4363-ba6b-f56ac74c5ae0' # AIMES Deployment Test
171+
172+
# make a policy definition with non-default mode, get it back and validate
173+
$expected = New-AzureRMPolicyDefinition -SubscriptionId $subscriptionId -Name $policyName -Policy "$TestOutputRoot\SamplePolicyDefinition.json" -Mode All -Description $description
174+
$actual = Get-AzureRMPolicyDefinition -SubscriptionId $subscriptionId -Name $policyName
175+
Assert-NotNull $actual
176+
Assert-AreEqual $expected.Name $actual.Name
177+
Assert-AreEqual $expected.PolicyDefinitionId $actual.PolicyDefinitionId
178+
Assert-NotNull($actual.Properties.PolicyRule)
179+
Assert-AreEqual 'All' $actual.Properties.Mode
180+
Assert-AreEqual 'All' $expected.Properties.Mode
181+
182+
# update the same policy definition without touching mode, get it back and validate
183+
$actual = Set-AzureRMPolicyDefinition -SubscriptionId $subscriptionId -Name $policyName -DisplayName testDisplay -Description $updatedDescription -Policy "$TestOutputRoot\SamplePolicyDefinition.json" -Metadata $metadata
184+
$expected = Get-AzureRMPolicyDefinition -SubscriptionId $subscriptionId -Name $policyName
185+
Assert-AreEqual $expected.Properties.DisplayName $actual.Properties.DisplayName
186+
Assert-AreEqual $expected.Properties.Description $actual.Properties.Description
187+
Assert-NotNull($actual.Properties.Metadata)
188+
Assert-AreEqual $metadataValue $actual.Properties.Metadata.$metadataName
189+
Assert-AreEqual 'All' $actual.Properties.Mode
190+
Assert-AreEqual 'All' $expected.Properties.Mode
191+
192+
# update the same policy definition explicitly providing the same mode, get it back and validate
193+
$actual = Set-AzureRMPolicyDefinition -SubscriptionId $subscriptionId -Name $policyName -DisplayName testDisplay -Mode 'All' -Description $updatedDescription -Policy "$TestOutputRoot\SamplePolicyDefinition.json" -Metadata $metadata
194+
$expected = Get-AzureRMPolicyDefinition -SubscriptionId $subscriptionId -Name $policyName
195+
Assert-AreEqual $expected.Properties.DisplayName $actual.Properties.DisplayName
196+
Assert-AreEqual $expected.Properties.Description $actual.Properties.Description
197+
Assert-NotNull($actual.Properties.Metadata)
198+
Assert-AreEqual $metadataValue $actual.Properties.Metadata.$metadataName
199+
Assert-AreEqual 'All' $actual.Properties.Mode
200+
Assert-AreEqual 'All' $expected.Properties.Mode
201+
202+
# update the same policy definition explicitly providing a different mode, get it back and validate
203+
$actual = Set-AzureRMPolicyDefinition -SubscriptionId $subscriptionId -Name $policyName -DisplayName testDisplay -Mode 'Indexed' -Description $updatedDescription -Policy "$TestOutputRoot\SamplePolicyDefinition.json" -Metadata $metadata
204+
$expected = Get-AzureRMPolicyDefinition -SubscriptionId $subscriptionId -Name $policyName
205+
Assert-AreEqual $expected.Properties.DisplayName $actual.Properties.DisplayName
206+
Assert-AreEqual $expected.Properties.Description $actual.Properties.Description
207+
Assert-NotNull($actual.Properties.Metadata)
208+
Assert-AreEqual $metadataValue $actual.Properties.Metadata.$metadataName
209+
Assert-AreEqual 'Indexed' $actual.Properties.Mode
210+
Assert-AreEqual 'Indexed' $expected.Properties.Mode
211+
212+
# clean up
213+
$remove = Remove-AzureRMPolicyDefinition -SubscriptionId $subscriptionId -Name $policyName -Force
214+
Assert-AreEqual True $remove
215+
}
216+
69217
<#
70218
.SYNOPSIS
71219
Tests Policy definition with uri

0 commit comments

Comments
 (0)