Terraform 6: Leyendo un diff del plan (+ / ~ / -)
easy⏱ 5 mincourseterraform
Los cuatro símbolos de acción
En un plan, cada recurso lleva un prefijo: + crear, ~ actualizar en el lugar, - destruir y -/+ destruir-y-crear (reemplazo). La línea resumen del final — Plan: X to add, Y to change, Z to destroy — es lo primero que escaneás en una revisión.
# azurerm_storage_account.orders will be created
+ resource "azurerm_storage_account" "orders" {
+ name = "myorgordersdev"
+ account_tier = "Standard"
+ account_replication_type = "LRS"
}
# azurerm_resource_group.orders will be updated in-place
~ resource "azurerm_resource_group" "orders" {
~ tags = {
~ "env" = "development" -> "dev"
}
}
Plan: 1 to add, 1 to change, 0 to destroy.
Cuidado con los reemplazos -/+
~ muta en el lugar (barato, seguro). -/+ destruye y recrea — para recursos con estado como una storage account o base de datos eso puede significar pérdida de datos o downtime. Terraform anota al culpable con # forces replacement; siempre leé esas líneas antes de aprobar.
# azurerm_storage_account.orders must be replaced
-/+ resource "azurerm_storage_account" "orders" {
~ name = "myorgordersdev" -> "myorgordersdev2" # forces replacement
}
Plan: 1 to add, 0 to change, 1 to destroy.
El resumen es un contrato
Nunca apruebes un plan cuyos conteos del resumen te sorprendan. 1 to add en un recurso nuevo es esperado; 3 to destroy cuando solo editaste un tag es una bandera roja — normalmente una clave de for_each cambiada o un recurso renombrado. Los números deben coincidir exactamente con tu intención.
Contá un diff del plan
Dado changes: Array<"+" | "~" | "-">, escribí summarize(changes) que devuelva "Plan: A to add, C to change, D to destroy." contando +, ~, - respectivamente. Logueá summarize del ejemplo provisto.