0
# Remediations Operations
1
2
## Overview
3
4
Remediations operations enable creating, managing, and monitoring policy remediations to automatically fix non-compliant resources. Remediations can be created at management group, subscription, resource group, and individual resource scopes.
5
6
## Core Functionality
7
8
### Management Group Operations
9
10
#### list_deployments_at_management_group
11
12
```python
13
def list_deployments_at_management_group(
14
management_group_id: str,
15
remediation_name: str,
16
query_options: Optional[QueryOptions] = None,
17
**kwargs
18
) -> ItemPaged[RemediationDeploymentsListResult]
19
```
20
{ .api }
21
22
List remediation deployments at management group scope.
23
24
**Parameters:**
25
- `management_group_id`: Management group ID
26
- `remediation_name`: Name of the remediation
27
- `query_options`: Optional query parameters
28
29
**Returns:** Paginated collection of RemediationDeploymentsListResult objects
30
31
#### cancel_at_management_group
32
33
```python
34
def cancel_at_management_group(
35
management_group_id: str,
36
remediation_name: str,
37
**kwargs
38
) -> Remediation
39
```
40
{ .api }
41
42
Cancel a remediation at management group scope.
43
44
**Parameters:**
45
- `management_group_id`: Management group ID
46
- `remediation_name`: Name of the remediation
47
48
**Returns:** Updated Remediation object
49
50
#### list_for_management_group
51
52
```python
53
def list_for_management_group(
54
management_group_id: str,
55
query_options: Optional[QueryOptions] = None,
56
**kwargs
57
) -> ItemPaged[RemediationListResult]
58
```
59
{ .api }
60
61
List remediations for a management group.
62
63
**Parameters:**
64
- `management_group_id`: Management group ID
65
- `query_options`: Optional query parameters
66
67
**Returns:** Paginated collection of Remediation objects
68
69
#### create_or_update_at_management_group
70
71
```python
72
def create_or_update_at_management_group(
73
management_group_id: str,
74
remediation_name: str,
75
parameters: Remediation,
76
**kwargs
77
) -> Remediation
78
```
79
{ .api }
80
81
Create or update a remediation at management group scope.
82
83
**Parameters:**
84
- `management_group_id`: Management group ID
85
- `remediation_name`: Name of the remediation
86
- `parameters`: Remediation parameters
87
88
**Returns:** Created or updated Remediation object
89
90
#### get_at_management_group
91
92
```python
93
def get_at_management_group(
94
management_group_id: str,
95
remediation_name: str,
96
**kwargs
97
) -> Remediation
98
```
99
{ .api }
100
101
Get a remediation at management group scope.
102
103
**Parameters:**
104
- `management_group_id`: Management group ID
105
- `remediation_name`: Name of the remediation
106
107
**Returns:** Remediation object
108
109
#### delete_at_management_group
110
111
```python
112
def delete_at_management_group(
113
management_group_id: str,
114
remediation_name: str,
115
**kwargs
116
) -> Remediation
117
```
118
{ .api }
119
120
Delete a remediation at management group scope.
121
122
**Parameters:**
123
- `management_group_id`: Management group ID
124
- `remediation_name`: Name of the remediation
125
126
**Returns:** Deleted Remediation object
127
128
### Subscription Operations
129
130
#### list_deployments_at_subscription
131
132
```python
133
def list_deployments_at_subscription(
134
remediation_name: str,
135
query_options: Optional[QueryOptions] = None,
136
**kwargs
137
) -> ItemPaged[RemediationDeploymentsListResult]
138
```
139
{ .api }
140
141
List remediation deployments at subscription scope.
142
143
**Parameters:**
144
- `remediation_name`: Name of the remediation
145
- `query_options`: Optional query parameters
146
147
**Returns:** Paginated collection of RemediationDeploymentsListResult objects
148
149
#### cancel_at_subscription
150
151
```python
152
def cancel_at_subscription(
153
remediation_name: str,
154
**kwargs
155
) -> Remediation
156
```
157
{ .api }
158
159
Cancel a remediation at subscription scope.
160
161
**Parameters:**
162
- `remediation_name`: Name of the remediation
163
164
**Returns:** Updated Remediation object
165
166
#### list_for_subscription
167
168
```python
169
def list_for_subscription(
170
query_options: Optional[QueryOptions] = None,
171
**kwargs
172
) -> ItemPaged[RemediationListResult]
173
```
174
{ .api }
175
176
List remediations for a subscription.
177
178
**Parameters:**
179
- `query_options`: Optional query parameters
180
181
**Returns:** Paginated collection of RemediationListResult objects
182
183
#### create_or_update_at_subscription
184
185
```python
186
def create_or_update_at_subscription(
187
remediation_name: str,
188
parameters: Remediation,
189
**kwargs
190
) -> Remediation
191
```
192
{ .api }
193
194
Create or update a remediation at subscription scope.
195
196
**Parameters:**
197
- `remediation_name`: Name of the remediation
198
- `parameters`: Remediation parameters
199
200
**Returns:** Created or updated Remediation object
201
202
#### get_at_subscription
203
204
```python
205
def get_at_subscription(
206
remediation_name: str,
207
**kwargs
208
) -> Remediation
209
```
210
{ .api }
211
212
Get a remediation at subscription scope.
213
214
**Parameters:**
215
- `remediation_name`: Name of the remediation
216
217
**Returns:** Remediation object
218
219
#### delete_at_subscription
220
221
```python
222
def delete_at_subscription(
223
remediation_name: str,
224
**kwargs
225
) -> Remediation
226
```
227
{ .api }
228
229
Delete a remediation at subscription scope.
230
231
**Parameters:**
232
- `remediation_name`: Name of the remediation
233
234
**Returns:** Deleted Remediation object
235
236
### Resource Group Operations
237
238
#### list_deployments_at_resource_group
239
240
```python
241
def list_deployments_at_resource_group(
242
subscription_id: str,
243
resource_group_name: str,
244
remediation_name: str,
245
query_options: Optional[QueryOptions] = None,
246
**kwargs
247
) -> ItemPaged[RemediationDeploymentsListResult]
248
```
249
{ .api }
250
251
List remediation deployments at resource group scope.
252
253
**Parameters:**
254
- `subscription_id`: Azure subscription ID
255
- `resource_group_name`: Resource group name
256
- `remediation_name`: Name of the remediation
257
- `query_options`: Optional query parameters
258
259
**Returns:** Paginated collection of RemediationDeploymentsListResult objects
260
261
#### cancel_at_resource_group
262
263
```python
264
def cancel_at_resource_group(
265
subscription_id: str,
266
resource_group_name: str,
267
remediation_name: str,
268
**kwargs
269
) -> Remediation
270
```
271
{ .api }
272
273
Cancel a remediation at resource group scope.
274
275
**Parameters:**
276
- `subscription_id`: Azure subscription ID
277
- `resource_group_name`: Resource group name
278
- `remediation_name`: Name of the remediation
279
280
**Returns:** Updated Remediation object
281
282
#### list_for_resource_group
283
284
```python
285
def list_for_resource_group(
286
subscription_id: str,
287
resource_group_name: str,
288
query_options: Optional[QueryOptions] = None,
289
**kwargs
290
) -> ItemPaged[RemediationListResult]
291
```
292
{ .api }
293
294
List remediations for a resource group.
295
296
**Parameters:**
297
- `subscription_id`: Azure subscription ID
298
- `resource_group_name`: Resource group name
299
- `query_options`: Optional query parameters
300
301
**Returns:** Paginated collection of Remediation objects
302
303
#### create_or_update_at_resource_group
304
305
```python
306
def create_or_update_at_resource_group(
307
subscription_id: str,
308
resource_group_name: str,
309
remediation_name: str,
310
parameters: Remediation,
311
**kwargs
312
) -> Remediation
313
```
314
{ .api }
315
316
Create or update a remediation at resource group scope.
317
318
**Parameters:**
319
- `subscription_id`: Azure subscription ID
320
- `resource_group_name`: Resource group name
321
- `remediation_name`: Name of the remediation
322
- `parameters`: Remediation parameters
323
324
**Returns:** Created or updated Remediation object
325
326
#### get_at_resource_group
327
328
```python
329
def get_at_resource_group(
330
subscription_id: str,
331
resource_group_name: str,
332
remediation_name: str,
333
**kwargs
334
) -> Remediation
335
```
336
{ .api }
337
338
Get a remediation at resource group scope.
339
340
**Parameters:**
341
- `subscription_id`: Azure subscription ID
342
- `resource_group_name`: Resource group name
343
- `remediation_name`: Name of the remediation
344
345
**Returns:** Remediation object
346
347
#### delete_at_resource_group
348
349
```python
350
def delete_at_resource_group(
351
subscription_id: str,
352
resource_group_name: str,
353
remediation_name: str,
354
**kwargs
355
) -> Remediation
356
```
357
{ .api }
358
359
Delete a remediation at resource group scope.
360
361
**Parameters:**
362
- `subscription_id`: Azure subscription ID
363
- `resource_group_name`: Resource group name
364
- `remediation_name`: Name of the remediation
365
366
**Returns:** Deleted Remediation object
367
368
### Individual Resource Operations
369
370
#### list_deployments_at_resource
371
372
```python
373
def list_deployments_at_resource(
374
resource_id: str,
375
remediation_name: str,
376
query_options: Optional[QueryOptions] = None,
377
**kwargs
378
) -> ItemPaged[RemediationDeploymentsListResult]
379
```
380
{ .api }
381
382
List remediation deployments at individual resource scope.
383
384
**Parameters:**
385
- `resource_id`: Full Azure resource ID
386
- `remediation_name`: Name of the remediation
387
- `query_options`: Optional query parameters
388
389
**Returns:** Paginated collection of RemediationDeploymentsListResult objects
390
391
#### cancel_at_resource
392
393
```python
394
def cancel_at_resource(
395
resource_id: str,
396
remediation_name: str,
397
**kwargs
398
) -> Remediation
399
```
400
{ .api }
401
402
Cancel a remediation at individual resource scope.
403
404
**Parameters:**
405
- `resource_id`: Full Azure resource ID
406
- `remediation_name`: Name of the remediation
407
408
**Returns:** Updated Remediation object
409
410
#### list_for_resource
411
412
```python
413
def list_for_resource(
414
resource_id: str,
415
query_options: Optional[QueryOptions] = None,
416
**kwargs
417
) -> ItemPaged[RemediationListResult]
418
```
419
{ .api }
420
421
List remediations for an individual resource.
422
423
**Parameters:**
424
- `resource_id`: Full Azure resource ID
425
- `query_options`: Optional query parameters
426
427
**Returns:** Paginated collection of Remediation objects
428
429
#### create_or_update_at_resource
430
431
```python
432
def create_or_update_at_resource(
433
resource_id: str,
434
remediation_name: str,
435
parameters: Remediation,
436
**kwargs
437
) -> Remediation
438
```
439
{ .api }
440
441
Create or update a remediation at individual resource scope.
442
443
**Parameters:**
444
- `resource_id`: Full Azure resource ID
445
- `remediation_name`: Name of the remediation
446
- `parameters`: Remediation parameters
447
448
**Returns:** Created or updated Remediation object
449
450
#### get_at_resource
451
452
```python
453
def get_at_resource(
454
resource_id: str,
455
remediation_name: str,
456
**kwargs
457
) -> Remediation
458
```
459
{ .api }
460
461
Get a remediation at individual resource scope.
462
463
**Parameters:**
464
- `resource_id`: Full Azure resource ID
465
- `remediation_name`: Name of the remediation
466
467
**Returns:** Remediation object
468
469
#### delete_at_resource
470
471
```python
472
def delete_at_resource(
473
resource_id: str,
474
remediation_name: str,
475
**kwargs
476
) -> Remediation
477
```
478
{ .api }
479
480
Delete a remediation at individual resource scope.
481
482
**Parameters:**
483
- `resource_id`: Full Azure resource ID
484
- `remediation_name`: Name of the remediation
485
486
**Returns:** Deleted Remediation object
487
488
## Related Types
489
490
### Remediation
491
492
```python
493
class Remediation:
494
id: Optional[str]
495
type: Optional[str]
496
name: Optional[str]
497
system_data: Optional[SystemData]
498
policy_assignment_id: Optional[str]
499
policy_definition_reference_id: Optional[str]
500
resource_discovery_mode: Optional[Union[str, ResourceDiscoveryMode]]
501
provisioning_state: Optional[str]
502
created_on: Optional[datetime.datetime]
503
last_updated_on: Optional[datetime.datetime]
504
filters: Optional[RemediationFilters]
505
deployment_status: Optional[RemediationDeploymentSummary]
506
status_message: Optional[str]
507
correlation_id: Optional[str]
508
resource_count: Optional[int]
509
parallel_deployments: Optional[int]
510
failure_threshold: Optional[RemediationPropertiesFailureThreshold]
511
```
512
{ .api }
513
514
### RemediationDeployment
515
516
```python
517
class RemediationDeployment:
518
remediated_resource_id: Optional[str]
519
deployment_id: Optional[str]
520
status: Optional[str]
521
resource_location: Optional[str]
522
error: Optional[ErrorDefinition]
523
created_on: Optional[datetime.datetime]
524
last_updated_on: Optional[datetime.datetime]
525
```
526
{ .api }
527
528
### RemediationFilters
529
530
```python
531
class RemediationFilters:
532
locations: Optional[List[str]]
533
```
534
{ .api }
535
536
### RemediationDeploymentSummary
537
538
```python
539
class RemediationDeploymentSummary:
540
total_deployments: Optional[int]
541
successful_deployments: Optional[int]
542
failed_deployments: Optional[int]
543
```
544
{ .api }
545
546
### ResourceDiscoveryMode Enum
547
548
```python
549
class ResourceDiscoveryMode(str, Enum):
550
EXISTING_NON_COMPLIANT = "ExistingNonCompliant"
551
RE_EVALUATE_COMPLIANCE = "ReEvaluateCompliance"
552
```
553
{ .api }
554
555
## Usage Examples
556
557
### Create Subscription-Level Remediation
558
559
```python
560
from azure.mgmt.policyinsights.models import Remediation, ResourceDiscoveryMode
561
562
# Create a remediation for non-compliant resources
563
remediation_params = Remediation(
564
policy_assignment_id="/subscriptions/{subscription-id}/providers/Microsoft.Authorization/policyAssignments/my-policy-assignment",
565
resource_discovery_mode=ResourceDiscoveryMode.EXISTING_NON_COMPLIANT,
566
parallel_deployments=5,
567
failure_threshold={"percentage": 0.1} # Allow 10% failure rate
568
)
569
570
remediation = client.remediations.create_or_update_at_subscription(
571
remediation_name="fix-non-compliant-storage-accounts",
572
parameters=remediation_params
573
)
574
575
print(f"Created remediation: {remediation.name}")
576
print(f"Status: {remediation.provisioning_state}")
577
```
578
579
### Monitor Remediation Progress
580
581
```python
582
# Get remediation status
583
remediation = client.remediations.get_at_subscription(
584
remediation_name="fix-non-compliant-storage-accounts"
585
)
586
587
print(f"Remediation status: {remediation.provisioning_state}")
588
print(f"Resources to remediate: {remediation.resource_count}")
589
590
if remediation.deployment_status:
591
status = remediation.deployment_status
592
print(f"Total deployments: {status.total_deployments}")
593
print(f"Successful: {status.successful_deployments}")
594
print(f"Failed: {status.failed_deployments}")
595
596
# List deployment details
597
deployments = client.remediations.list_deployments_at_subscription(
598
remediation_name="fix-non-compliant-storage-accounts"
599
)
600
601
for deployment in deployments:
602
print(f"Resource: {deployment.remediated_resource_id}")
603
print(f"Status: {deployment.status}")
604
if deployment.error:
605
print(f"Error: {deployment.error.message}")
606
```
607
608
### Cancel Remediation
609
610
```python
611
# Cancel a running remediation
612
cancelled_remediation = client.remediations.cancel_at_subscription(
613
remediation_name="fix-non-compliant-storage-accounts"
614
)
615
616
print(f"Remediation cancelled: {cancelled_remediation.provisioning_state}")
617
```
618
619
### Create Resource Group Remediation with Filters
620
621
```python
622
from azure.mgmt.policyinsights.models import RemediationFilters
623
624
# Create remediation with location filter
625
remediation_params = Remediation(
626
policy_assignment_id="/subscriptions/{subscription-id}/providers/Microsoft.Authorization/policyAssignments/my-policy-assignment",
627
resource_discovery_mode=ResourceDiscoveryMode.RE_EVALUATE_COMPLIANCE,
628
filters=RemediationFilters(
629
locations=["eastus", "westus2"] # Only remediate resources in these regions
630
)
631
)
632
633
remediation = client.remediations.create_or_update_at_resource_group(
634
subscription_id=subscription_id,
635
resource_group_name="production-rg",
636
remediation_name="fix-location-specific-issues",
637
parameters=remediation_params
638
)
639
```
640
641
### List All Remediations
642
643
```python
644
# List all remediations for a subscription
645
remediations = client.remediations.list_for_subscription(
646
query_options=QueryOptions(top=50)
647
)
648
649
for remediation in remediations:
650
print(f"Name: {remediation.name}")
651
print(f"Policy Assignment: {remediation.policy_assignment_id}")
652
print(f"Status: {remediation.provisioning_state}")
653
print(f"Resource Count: {remediation.resource_count}")
654
print("---")
655
```