how/state
Что на самом деле сравнивает terraform plan. Зачем refresh, как из трёх источников получается один план, и что прячет -refresh=false.
Привычная картинка про git diff - это двусторонний дифф: было / стало.
В Terraform диффов три, и они образуют треугольник:
main.tf - желаемое состояние. То, что ты написал руками.terraform.tfstate - кэш Terraform. Снимок реальности, каким Terraform его видел в последний раз.terraform plan сначала чинит одну сторону треугольника (state ↔ cloud, через refresh),
а потом считает диф по другой (HCL ↔ state). Жми ▶ - посмотрим, как это собирается.
Базовая позиция треугольника: все три источника согласны.
Owner = "student".Повторный plan сейчас вернёт No changes. Это инвариант, к
которому Terraform всегда стремится после успешного apply.
итого
Главное про трёхсторонний дифф:
plan - это refresh + diff, в этом порядке. Сначала state синхронизируется
с облаком, потом сравнивается с HCL. Если поменять порядок, получится не план,
а каша.-refresh=false пропускает первый шаг. План становится быстрым, но слепым:
Terraform не увидит, если кто-то правил руками в облаке. Удобно для
pre-commit-проверок локально, опасно для CI и для prod-плана.terraform plan -refresh-only -
получает только обновлённый state, без сравнения с HCL. Полезна для drift detection.Дальше: tf-drift про то, что делать, когда дрейф уже виден, и tf-state-mv-rm-import про императивные операции на state.