Skip to content

Commit c86dc47

Browse files
committed
Address design review feedback
1 parent 53fe55c commit c86dc47

28 files changed

+84145
-988
lines changed

src/ResourceManager/PolicyInsights/Commands.PolicyInsights.Test/Commands.PolicyInsights.Test.Netcore.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
</PropertyGroup>
2525

2626
<ItemGroup Condition="'$(TargetFramework)' != 'net472'">
27-
<PackageReference Include="Microsoft.Azure.Management.PolicyInsights" Version="1.0.0" />
27+
<PackageReference Include="Microsoft.Azure.Management.PolicyInsights" Version="2.0.0" />
2828
</ItemGroup>
2929

3030
<ItemGroup>

src/ResourceManager/PolicyInsights/Commands.PolicyInsights.Test/ScenarioTests/RemediationTests.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,12 @@ public void ManagementGroupScopeCrud()
5757
{
5858
TestController.NewInstance.RunPowerShellTest(_logger, "Remediation-ManagementGroupScope-Crud");
5959
}
60+
61+
[Fact]
62+
[Trait(Category.AcceptanceType, Category.CheckIn)]
63+
public void BackgroundJobs()
64+
{
65+
TestController.NewInstance.RunPowerShellTest(_logger, "Remediation-BackgroundJobs");
66+
}
6067
}
6168
}

src/ResourceManager/PolicyInsights/Commands.PolicyInsights.Test/ScenarioTests/RemediationTests.ps1

Lines changed: 99 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ function Remediation-SubscriptionScope-Crud
2222
$remediationName = "PSTestRemediation"
2323

2424
# Create a new remediation
25-
$remediation = New-AzureRmPolicyRemediation -PolicyAssignmentId $assignmentId -Name $remediationName -LocationFilter "westus2","west central us"
25+
$remediation = Start-AzureRmPolicyRemediation -PolicyAssignmentId $assignmentId -Name $remediationName -LocationFilter "westus2","west central us"
2626
Validate-Remediation $remediation
2727
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
2828
Assert-Null $remediation.PolicyDefinitionReferenceId
@@ -31,40 +31,40 @@ function Remediation-SubscriptionScope-Crud
3131
Assert-AreEqualArray $remediation.Filters.Locations @("westus2", "westcentralus")
3232
Assert-AreEqual 3 $remediation.DeploymentSummary.TotalDeployments
3333

34-
# Cancel the remediation
35-
$remediation | Stop-AzureRmPolicyRemediation
34+
# Cancel the remediation as a job so that we wait for cancellation to complete
35+
$job = ($remediation | Stop-AzureRmPolicyRemediation -AsJob)
36+
$job | Wait-Job
3637

3738
# Get the remediation that was just cancelled
3839
$remediation = Get-AzureRmPolicyRemediation -Name $remediationName
3940
Validate-Remediation $remediation
4041
Assert-AreEqual $remediationName $remediation.Name
4142
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
42-
Assert-True { $remediation.ProvisioningState -like "Cancel*" }
43+
Assert-AreEqual "Canceled" $remediation.ProvisioningState
4344
Assert-AreEqual 2 $remediation.Filters.Locations.Count
4445
Assert-AreEqualArray $remediation.Filters.Locations @("westus2", "westcentralus")
4546
Assert-AreEqual 3 $remediation.DeploymentSummary.TotalDeployments
4647
Assert-AreEqual 0 $remediation.DeploymentSummary.FailedDeployments
4748

48-
# Get the deployments for the remediation via piping
49-
$deployments = $remediation | Get-AzureRmPolicyRemediationDeployment
50-
Assert-AreEqual 3 $deployments.Count
51-
$acceptedStates = "Canceled", "NotStarted"
52-
$deployments | ForEach-Object {
49+
# Get the deployments for the remediation
50+
$remediation = Get-AzureRmPolicyRemediation -Name $remediationName -IncludeDetail
51+
Assert-AreEqual 3 $remediation.Deployments.Count
52+
$remediation.Deployments | ForEach-Object {
5353
Validate-RemediationDeployment $_
54-
Assert-True { $acceptedStates -contains $_.Status }
54+
Assert-AreEqual "Canceled" $_.Status
5555
}
5656

57-
# Get the deployments for the remediation without piping (+ top filter)
58-
$deployments = Get-AzureRmPolicyRemediationDeployment -Name $remediationName -Top 2
59-
Assert-AreEqual 2 $deployments.Count
60-
$deployments | ForEach-Object {
57+
# Get the deployments for the remediation with a Top filter
58+
$remediation = Get-AzureRmPolicyRemediation -Name $remediationName -IncludeDetail -Top 2
59+
Assert-AreEqual 2 $remediation.Deployments.Count
60+
$remediation.Deployments | ForEach-Object {
6161
Validate-RemediationDeployment $_
62-
Assert-True { $acceptedStates -contains $_.Status }
62+
Assert-AreEqual "Canceled" $_.Status
6363
}
6464

6565
# Get all remediations in the subscription
6666
$remediations = Get-AzureRmPolicyRemediation
67-
Assert-AreEqual 71 $remediations.Count
67+
Assert-AreEqual 72 $remediations.Count
6868
Validate-Remediation $remediations[10]
6969

7070
# Get a limited number of remediations
@@ -81,8 +81,8 @@ function Remediation-SubscriptionScope-Crud
8181
}
8282

8383
# Delete the remediation that was created initially
84-
$result = { $remediation | Remove-AzureRmPolicyRemediation -PassThru }
85-
Assert-True $result
84+
$result = ($remediation | Remove-AzureRmPolicyRemediation -PassThru)
85+
Assert-AreEqual $true $result
8686
}
8787

8888
<#
@@ -96,7 +96,7 @@ function Remediation-ResourceGroupScope-Crud
9696
$resourceGroupName = "elpere"
9797

9898
# Create a new remediation
99-
$remediation = New-AzureRmPolicyRemediation -ResourceGroupName $resourceGroupName -PolicyAssignmentId $assignmentId -Name $remediationName
99+
$remediation = Start-AzureRmPolicyRemediation -ResourceGroupName $resourceGroupName -PolicyAssignmentId $assignmentId -Name $remediationName
100100
Validate-Remediation $remediation
101101
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
102102
Assert-Null $remediation.PolicyDefinitionReferenceId
@@ -105,33 +105,32 @@ function Remediation-ResourceGroupScope-Crud
105105
Assert-AreEqual 5 $remediation.DeploymentSummary.TotalDeployments
106106

107107
# Cancel the remediation
108-
Stop-AzureRmPolicyRemediation -ResourceId $remediation.Id
108+
Stop-AzureRmPolicyRemediation -ResourceId $remediation.Id
109109

110110
# Get the remediation that was just cancelled
111111
$remediation = Get-AzureRmPolicyRemediation -ResourceGroupName $resourceGroupName -Name $remediationName
112112
Validate-Remediation $remediation
113113
Assert-AreEqual $remediationName $remediation.Name
114114
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
115-
Assert-True { $remediation.ProvisioningState -like "Cancel*" }
115+
Assert-AreEqual "Canceled" $remediation.ProvisioningState
116116
Assert-Null $remediation.Filters
117117
Assert-AreEqual 5 $remediation.DeploymentSummary.TotalDeployments
118118
Assert-AreEqual 0 $remediation.DeploymentSummary.FailedDeployments
119119

120-
# Get the deployments for the remediation via piping
121-
$deployments = $remediation | Get-AzureRmPolicyRemediationDeployment
122-
Assert-AreEqual 5 $deployments.Count
123-
$acceptedStates = "Canceled", "NotStarted"
124-
$deployments | ForEach-Object {
120+
# Get the deployments for the remediation
121+
$remediation = Get-AzureRmPolicyRemediation -ResourceGroupName $resourceGroupName -Name $remediationName -IncludeDetail
122+
Assert-AreEqual 5 $remediation.Deployments.Count
123+
$remediation.Deployments | ForEach-Object {
125124
Validate-RemediationDeployment $_
126-
Assert-True { $acceptedStates -contains $_.Status }
125+
Assert-AreEqual "Canceled" $_.Status
127126
}
128127

129-
# Get the deployments for the remediation without piping (+ top filter)
130-
$deployments = Get-AzureRmPolicyRemediationDeployment -ResourceGroupName $resourceGroupName -Name $remediationName -Top 2
131-
Assert-AreEqual 2 $deployments.Count
132-
$deployments | ForEach-Object {
128+
# Get the deployments for the remediation (+ top filter)
129+
$remediation = Get-AzureRmPolicyRemediation -ResourceGroupName $resourceGroupName -Name $remediationName -IncludeDetail -Top 2
130+
Assert-AreEqual 2 $remediation.Deployments.Count
131+
$remediation.Deployments | ForEach-Object {
133132
Validate-RemediationDeployment $_
134-
Assert-True { $acceptedStates -contains $_.Status }
133+
Assert-AreEqual "Canceled" $_.Status
135134
}
136135

137136
# Get all remediations in the resource group
@@ -153,8 +152,8 @@ function Remediation-ResourceGroupScope-Crud
153152
}
154153

155154
# Delete the remediation that was created initially
156-
$result = { Remove-AzureRmPolicyRemediation -ResourceGroupName $resourceGroupName -Name $remediationName -PassThru }
157-
Assert-True $result
155+
$result = (Remove-AzureRmPolicyRemediation -ResourceGroupName $resourceGroupName -Name $remediationName -PassThru)
156+
Assert-AreEqual $true $result
158157
}
159158

160159
<#
@@ -168,42 +167,42 @@ function Remediation-ResourceScope-Crud
168167
$scope = "/subscriptions/d0610b27-9663-4c05-89f8-5b4be01e86a5/resourceGroups/elpere/providers/Microsoft.KeyVault/vaults/elpereKv"
169168

170169
# Create a new remediation
171-
$remediation = New-AzureRmPolicyRemediation -Scope $scope -PolicyAssignmentId $assignmentId -Name $remediationName
170+
$remediation = Start-AzureRmPolicyRemediation -Scope $scope -PolicyAssignmentId $assignmentId -Name $remediationName
172171
Validate-Remediation $remediation
173172
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
174173
Assert-Null $remediation.PolicyDefinitionReferenceId
175174
Assert-AreEqual "Accepted" $remediation.ProvisioningState
176175
Assert-Null $remediation.Filters
177176
Assert-AreEqual 1 $remediation.DeploymentSummary.TotalDeployments
178177

179-
# Cancel the remediation
180-
Stop-AzureRmPolicyRemediation -Scope $scope -Name $remediationName
178+
# Cancel the remediation as a job so that we wait for cancellation to complete
179+
$job = Stop-AzureRmPolicyRemediation -Scope $scope -Name $remediationName -AsJob
180+
$job | Wait-Job
181181

182182
# Get the remediation that was just cancelled
183183
$remediation = Get-AzureRmPolicyRemediation -Scope $scope -Name $remediationName
184184
Validate-Remediation $remediation
185185
Assert-AreEqual $remediationName $remediation.Name
186186
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
187-
Assert-True { $remediation.ProvisioningState -like "Cancel*" }
187+
Assert-AreEqual "Canceled" $remediation.ProvisioningState
188188
Assert-Null $remediation.Filters
189189
Assert-AreEqual 1 $remediation.DeploymentSummary.TotalDeployments
190190
Assert-AreEqual 0 $remediation.DeploymentSummary.FailedDeployments
191191

192-
# Get the deployments for the remediation via piping
193-
$deployments = $remediation | Get-AzureRmPolicyRemediationDeployment
194-
Assert-AreEqual 1 $deployments.Count
195-
$acceptedStates = "Canceled", "NotStarted"
196-
$deployments | ForEach-Object {
192+
# Get the deployments for the remediation
193+
$remediation = Get-AzureRmPolicyRemediation -Scope $scope -Name $remediationName -IncludeDetail
194+
Assert-AreEqual 1 $remediation.Deployments.Count
195+
$remediation.Deployments | ForEach-Object {
197196
Validate-RemediationDeployment $_
198-
Assert-True { $acceptedStates -contains $_.Status }
197+
Assert-AreEqual "Canceled" $_.Status
199198
}
200199

201-
# Get the deployments for the remediation without piping (+ top filter)
202-
$deployments = Get-AzureRmPolicyRemediationDeployment -Scope $scope -Name $remediationName -Top 2
203-
Assert-AreEqual 1 $deployments.Count
204-
$deployments | ForEach-Object {
200+
# Get the deployments for the remediation (+ top filter)
201+
$remediation = Get-AzureRmPolicyRemediation -Scope $scope -Name $remediationName -IncludeDetail -Top 2
202+
Assert-AreEqual 1 $remediation.Deployments.Count
203+
$remediation.Deployments | ForEach-Object {
205204
Validate-RemediationDeployment $_
206-
Assert-True { $acceptedStates -contains $_.Status }
205+
Assert-AreEqual "Canceled" $_.Status
207206
}
208207

209208
# Get all remediations underneath the resource
@@ -220,8 +219,8 @@ function Remediation-ResourceScope-Crud
220219
}
221220

222221
# Delete the remediation that was created initially
223-
$result = { Remove-AzureRmPolicyRemediation -Scope $scope -Name $remediationName -PassThru }
224-
Assert-True $result
222+
$result = (Remove-AzureRmPolicyRemediation -Scope $scope -Name $remediationName -PassThru)
223+
Assert-AreEqual $true $result
225224
}
226225

227226
<#
@@ -235,7 +234,7 @@ function Remediation-ManagementGroupScope-Crud
235234
$managementGroupId = "PolicyUIMG"
236235

237236
# Create a new remediation
238-
$remediation = New-AzureRmPolicyRemediation -ManagementGroupName $managementGroupId -PolicyAssignmentId $assignmentId -Name $remediationName
237+
$remediation = Start-AzureRmPolicyRemediation -ManagementGroupName $managementGroupId -PolicyAssignmentId $assignmentId -Name $remediationName
239238
Validate-Remediation $remediation
240239
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
241240
Assert-Null $remediation.PolicyDefinitionReferenceId
@@ -251,26 +250,25 @@ function Remediation-ManagementGroupScope-Crud
251250
Validate-Remediation $remediation
252251
Assert-AreEqual $remediationName $remediation.Name
253252
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
254-
Assert-True { $remediation.ProvisioningState -like "Cancel*" }
253+
Assert-AreEqual "Canceled" $remediation.ProvisioningState
255254
Assert-Null $remediation.Filters
256255
Assert-AreEqual 1 $remediation.DeploymentSummary.TotalDeployments
257256
Assert-AreEqual 0 $remediation.DeploymentSummary.FailedDeployments
258257

259-
# Get the deployments for the remediation via piping
260-
$deployments = $remediation | Get-AzureRmPolicyRemediationDeployment
261-
Assert-AreEqual 1 $deployments.Count
262-
$acceptedStates = "Canceled", "NotStarted"
263-
$deployments | ForEach-Object {
258+
# Get the deployments for the remediation
259+
$remediation = Get-AzureRmPolicyRemediation -ManagementGroupName $managementGroupId -Name $remediationName -IncludeDetail
260+
Assert-AreEqual 1 $remediation.Deployments.Count
261+
$remediation.Deployments | ForEach-Object {
264262
Validate-RemediationDeployment $_
265-
Assert-True { $acceptedStates -contains $_.Status }
263+
Assert-AreEqual "Canceled" $_.Status
266264
}
267265

268-
# Get the deployments for the remediation without piping (+ top filter)
269-
$deployments = Get-AzureRmPolicyRemediationDeployment -ManagementGroupName $managementGroupId -Name $remediationName -Top 2
270-
Assert-AreEqual 1 $deployments.Count
271-
$deployments | ForEach-Object {
266+
# Get the deployments for the remediation (+ top filter)
267+
$remediation = Get-AzureRmPolicyRemediation -ManagementGroupName $managementGroupId -Name $remediationName -IncludeDetail -Top 2
268+
Assert-AreEqual 1 $remediation.Deployments.Count
269+
$remediation.Deployments | ForEach-Object {
272270
Validate-RemediationDeployment $_
273-
Assert-True { $acceptedStates -contains $_.Status }
271+
Assert-AreEqual "Canceled" $_.Status
274272
}
275273

276274
# Get all remediations in the management group
@@ -292,6 +290,41 @@ function Remediation-ManagementGroupScope-Crud
292290
}
293291

294292
# Delete the remediation that was created initially
295-
$result = { Remove-AzureRmPolicyRemediation -ResourceId $remediation.Id -PassThru }
296-
Assert-True $result
293+
$result = (Remove-AzureRmPolicyRemediation -ResourceId $remediation.Id -PassThru)
294+
Assert-AreEqual $true $result
295+
}
296+
297+
<#
298+
.SYNOPSIS
299+
Perform remediation CRUD operations using background jobs
300+
#>
301+
function Remediation-BackgroundJobs {
302+
$assignmentId = Get-TestRemediationSubscriptionPolicyAssignmentId
303+
$remediationName = "PSTestRemediation"
304+
305+
# Create a new remediation as a job which will wait for it to complete
306+
$job = Start-AzureRmPolicyRemediation -PolicyAssignmentId $assignmentId -Name $remediationName -LocationFilter "eastus2" -AsJob
307+
$job | Wait-Job
308+
Assert-AreEqual "Completed" $job.State
309+
$remediation = $job | Receive-Job
310+
311+
Validate-Remediation $remediation
312+
Assert-AreEqual $assignmentId $remediation.PolicyAssignmentId
313+
Assert-Null $remediation.PolicyDefinitionReferenceId
314+
Assert-AreEqual "Succeeded" $remediation.ProvisioningState
315+
Assert-AreEqual 1 $remediation.Filters.Locations.Count
316+
Assert-AreEqualArray $remediation.Filters.Locations @("eastus2")
317+
Assert-AreEqual 1 $remediation.DeploymentSummary.TotalDeployments
318+
Assert-AreEqual 1 $remediation.DeploymentSummary.SuccessfulDeployments
319+
Assert-AreEqual 0 $remediation.DeploymentSummary.FailedDeployments
320+
321+
# Create the remediation again so we can remove/stop it in a job
322+
$remediation = Start-AzureRmPolicyRemediation -PolicyAssignmentId $assignmentId -Name $remediationName -LocationFilter "eastus2"
323+
324+
# Remove and stop the remediation in one action as a background job
325+
$job = ($remediation | Remove-AzureRmPolicyRemediation -AllowStop -PassThru -AsJob)
326+
$job | Wait-Job
327+
Assert-AreEqual "Completed" $job.State
328+
$result = $job | Receive-Job
329+
Assert-AreEqual $true $result
297330
}

0 commit comments

Comments
 (0)