See exactly which variables changed—metadata visible, secret values protected.
When Azure DevOps variable groups change, Terraform shows "At least one attribute in this block is (or was) sensitive" for all variables—even non-secret ones. This makes it impossible to review changes. tfplan2md's specialized template displays all variable metadata clearly while protecting actual secret values.
~ azuredevops_variable_group.example will be updated in-place
~ resource "azuredevops_variable_group" "example" {
id = "123"
name = "example-variables"
# (3 unchanged attributes hidden)
- variable {
# At least one attribute in this block is (or was) sensitive,
# so its contents will not be displayed.
}
- variable {
# At least one attribute in this block is (or was) sensitive,
# so its contents will not be displayed.
}
+ variable {
# At least one attribute in this block is (or was) sensitive,
# so its contents will not be displayed.
}
+ variable {
# At least one attribute in this block is (or was) sensitive,
# so its contents will not be displayed.
}
}
Which variables changed? What are their names? Completely opaque.
Variable Group: example-variables
Description: Variables for CI/CD pipeline
| Change | Name | Value | Enabled |
|---|---|---|---|
| ➕ | ENV |
Production |
- |
| 🔄 | APP_VERSION |
- 1.0.0 |
true |
| 🔄 | API_KEY |
(sensitive / hidden) |
- true |
| ❌ | LEGACY_URL |
https://old.example.com |
false |
### 🔄 azuredevops_variable_group.example
**Variable Group:** `example-variables`
**Description:** `Variables for CI/CD pipeline`
#### Variables
| Change | Name | Value | Enabled |
| ------ | ---- | ----- | ------- |
| ➕ | `ENV` | `Production` | - |
| 🔄 | `APP_VERSION` | <code style="display:block; white-space:normal; padding:0; margin:0;"><span style="background-color: #fff5f5; border-left: 3px solid #d73a49; color: #24292e; display: inline-block; padding-left: 8px; margin-left: 0;">- 1.0.0</span><br><span style="background-color: #f0fff4; border-left: 3px solid #28a745; color: #24292e; display: inline-block; padding-left: 8px; margin-left: 0;">+ 2.0.0</span></code> | `true` |
| 🔄 | `API_KEY` | `(sensitive / hidden)` | <code style="display:block; white-space:normal; padding:0; margin:0;"><span style="background-color: #fff5f5; border-left: 3px solid #d73a49; color: #24292e; display: inline-block; padding-left: 8px; margin-left: 0;">- true</span><br><span style="background-color: #f0fff4; border-left: 3px solid #28a745; color: #24292e; display: inline-block; padding-left: 8px; margin-left: 0;">+ false</span></code> |
| ❌ | `LEGACY_URL` | `https://old.example.com` | `false` |
Clear semantic diff: added ENV, updated APP_VERSION, API_KEY enabled changed, removed LEGACY_URL.
Secret variable values display as "(sensitive / hidden)" while showing all metadata: name, enabled status, content type, and expiration. Security maintained, visibility restored.
Variables matched by name across before/after states. Changes categorized as Added (➕), Modified (🔄), Removed (❌), or Unchanged (⏺️). See exactly what changed.
Regular and secret variables merged into single table. No need to mentally combine separate arrays. All variables visible in one clear, scannable format.
Shows variable group name, description, project reference, and Key Vault integration details. Every attribute visible for informed decision-making.
How variable groups appear for different Terraform operations
Variable Group: app-config-prod
Description: Production app configuration
| Name | Value | Enabled |
|---|---|---|
APP_NAME |
MyApp |
- |
ENVIRONMENT |
Production |
- |
DB_HOST |
prod-db.example.com |
true |
DB_PASSWORD |
(sensitive / hidden) |
true |
API_KEY |
(sensitive / hidden) |
true |
### ➕ azuredevops_variable_group.app_config
**Variable Group:** `app-config-prod`
**Description:** `Production app configuration`
#### Variables
| Name | Value | Enabled |
| ---- | ----- | ------- |
| `APP_NAME` | `MyApp` | - |
| `ENVIRONMENT` | `Production` | - |
| `DB_HOST` | `prod-db.example.com` | `true` |
| `DB_PASSWORD` | `(sensitive / hidden)` | `true` |
| `API_KEY` | `(sensitive / hidden)` | `true` |
Simple table for new variable groups. Secret values protected from the start.
Variable Group: app-config-prod
| Change | Name | Value | Enabled |
|---|---|---|---|
| 🔄 | APP_VERSION |
- 2.1.0+ 2.2.0
|
true |
| 🔄 | FEATURE_FLAGS |
- alpha,beta+ beta,gamma
|
true |
| 🔄 | API_KEY |
(sensitive / hidden) |
- true+ false
|
| ⏺️ | ENVIRONMENT |
Production |
- |
### 🔄 azuredevops_variable_group.app_config
**Variable Group:** `app-config-prod`
#### Variables
| Change | Name | Value | Enabled |
| ------ | ---- | ----- | ------- |
| 🔄 | `APP_VERSION` | - `2.1.0`
+ `2.2.0` | `true` |
| 🔄 | `FEATURE_FLAGS` | - `alpha,beta`
+ `beta,gamma` | `true` |
| 🔄 | `API_KEY` | `(sensitive / hidden)` | - `true`
+ `false` |
| ⏺️ | `ENVIRONMENT` | `Production` | - |
Before/after values with change indicators. Unchanged variables marked with ⏺️.
Variable Group: legacy-config
| Name | Value | Enabled |
|---|---|---|
OLD_API_URL |
https://legacy.example.com |
false |
DEPRECATED_KEY |
(sensitive / hidden) |
false |
TEMP_SETTING |
temporary |
false |
### ❌ azuredevops_variable_group.legacy_config
**Variable Group:** `legacy-config`
#### Variables (being deleted)
| Name | Value | Enabled |
| ---- | ----- | ------- |
| `OLD_API_URL` | `https://legacy.example.com` | `false` |
| `DEPRECATED_KEY` | `(sensitive / hidden)` | `false` |
| `TEMP_SETTING` | `temporary` | `false` |
Clear view of what's being removed. Audit trail for cleanup operations.
When variable groups are linked to Azure Key Vault, tfplan2md displays the Key Vault block metadata in a separate table showing the connection details.
Variable Group: keyvault-secrets
Description: Secrets from Azure Key Vault
| Name | Service Endpoint ID | Search Depth |
|---|---|---|
kv-myapp-prod |
12345678-1234-1234-1234-123456789012 |
1 |
(No variables configured - all values retrieved from Key Vault)
### ➕ azuredevops_variable_group.keyvault_secrets
**Variable Group:** `keyvault-secrets`
**Description:** `Secrets from Azure Key Vault`
#### Key Vault Integration
| Name | Service Endpoint ID | Search Depth |
| ---- | ------------------- | ------------ |
| `kv-myapp-prod` | `12345678-1234-1234-1234-123456789012` | `1` |
#### Variables
(No variables configured - all values retrieved from Key Vault)
azuredevops_variable_group
ViewModel pattern with C# Factory for semantic diffing. Merges variable and secret_variable arrays by name.
Values >100 characters or multi-line moved to collapsible large values section with inline diff highlighting.
Secret variable value attribute always displayed as "(sensitive / hidden)". All other metadata (name, enabled, etc.) visible.
No more guessing what changed in your Azure DevOps variable groups. Get the visibility you need for confident deployments.