terraform-azurerm-set-diff-analyzer

bởi github

Xác định các diff dương tính giả trong các kế hoạch Terraform AzureRM do thứ tự thuộc tính kiểu Set gây ra. Phân tích đầu ra JSON của kế hoạch terraform để phân biệt các diff giả mạo (sắp xếp lại phần tử trong Sets) với các thay đổi tài nguyên thực tế. Nhắm mục tiêu các tài nguyên AzureRM có thuộc tính kiểu Set: Application Gateway, Load Balancer, NSG, Firewall, Front Door và các tài nguyên khác. Yêu cầu Python 3.8+ và chỉ sử dụng thư viện chuẩn; tích hợp vào các pipeline CI/CD với các định dạng đầu ra và mã thoát có thể cấu hình. Hỗ trợ người đánh giá...

npx skills add https://github.com/github/awesome-copilot --skill terraform-azurerm-set-diff-analyzer

Terraform AzureRM Set Diff Analyzer

A skill to identify "false-positive diffs" in Terraform plans caused by AzureRM Provider's Set-type attributes and distinguish them from actual changes.

When to Use

  • terraform plan shows many changes, but you only added/removed a single element
  • Application Gateway, Load Balancer, NSG, etc. show "all elements changed"
  • You want to automatically filter false-positive diffs in CI/CD

Background

Terraform's Set type compares by position rather than by key, so when adding or removing elements, all elements appear as "changed". This is a general Terraform issue, but it's particularly noticeable with AzureRM resources that heavily use Set-type attributes like Application Gateway, Load Balancer, and NSG.

These "false-positive diffs" don't actually affect the resources, but they make reviewing terraform plan output difficult.

Prerequisites

  • Python 3.8+

If Python is unavailable, install via your package manager (e.g., apt install python3, brew install python3) or from python.org.

Basic Usage

# 1. Generate plan JSON output
terraform plan -out=plan.tfplan
terraform show -json plan.tfplan > plan.json

# 2. Analyze
python scripts/analyze_plan.py plan.json

Troubleshooting

  • python: command not found: Use python3 instead, or install Python
  • ModuleNotFoundError: Script uses only standard library; ensure Python 3.8+

Detailed Documentation