or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

index.mdpolicy-events.mdpolicy-metadata.mdpolicy-restrictions.mdpolicy-states.mdpolicy-tracked-resources.mdremediations.md

remediations.mddocs/

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

```