terraform apply/plan refresh-only是什么意思?

7
我有点困惑 terraform plan refresh-only 给我的信息。仅使用 terraform plan 时,它会显示检测到 terraform 之外的更改(由我造成),并尝试“纠正”这些更改,但不幸的是,纠正这些更改需要重新创建资源。然而,如果在计划后添加 "refresh-only",则会取消重新创建,并更新 tfstate 以匹配我手动进行的更改。
我的理解正确吗?还是有些事情我没有注意到?
2个回答

9
一个“正常”的 Terraform 计划包括两个主要行为:
  1. 更新状态以反映在 Terraform 之外所做的任何更改。这在 Terraform 中称为“刷新”。
  2. 比较更新后的状态与配置描述的期望状态,并在有差异的情况下生成一组建议的操作,以使实际远程对象与期望状态相匹配。
当你创建一个“仅刷新”的计划时,你禁用了第二项行为,但仍执行第一项。 Terraform 将更新状态以匹配在 Terraform 之外进行的更改,然后询问您是否要将该结果提交为新的状态快照以在将来运行中使用。通常,“仅刷新”计划的期望结果是 Terraform 报告在 Terraform 之外没有进行任何更改,尽管如果您希望保存那些新结果(例如,如果更改从用作“数据”资源的更新对象级联而来),Terraform 允许您将结果作为新状态快照提交。
“仅刷新”计划会阻止 Terraform 提出任何更改实际基础架构的操作(针对该特定计划),但它不避免在未来的计划中处理任何差异的需要。如果 Terraform 提出的更改不可接受,则向前移动需要更改配置以匹配实际期望状态(例如,以匹配您不想替换的对象的当前状态)或更改实际基础架构(在 Terraform 之外),使其与您的配置相匹配。

那么这是否意味着,如果我执行 terraform apply refresh-only 命令,后续的 "terraform apply" 命令(在配置或基础设施未做任何更改的情况下)会响应状态文件与配置对齐(无需更改),还是会尝试进行某些操作,此时我将不得不每次使用 refresh-only 标志? - Dmytro Lysak
如果您已更改了远程基础架构以匹配配置文件,则“terraform apply -refresh-only”可能会使您处于“不需要更改”的情况。但是,如果这正是您计划要做的,则可以直接运行terraform apply(没有选项),因为它将在工作的一部分中执行刷新步骤,并立即返回“不需要更改”,如果刷新导致状态和配置匹配。 - Martin Atkins

0
对于涉及状态的所有terraform命令,例如plan、apply、refresh(已弃用,现在是'-refresh-only'),有两个方面需要考虑:
1. 权威状态(authoritative state) 2. 被比较的状态(states being compared) 请注意,“权威状态”永远不会因为命令的执行而改变。
有三种类型的“状态”(宽泛地说):
1. 基础设施的实际状态(actual-state) 2. terraform状态文件(tf-state-file) 3. terraform代码配置描述的状态(tf-dsl-config)
当您使用-refresh-only执行terraform plan/apply时:
1. 权威状态是“实际状态”(actual-state) 2. 在“terraform plan -refresh-only”中进行比较的状态是“实际状态”与“tf-state-file” 3. “terraform apply -refresh-only”的结果是将“tf-state-file”同步为“实际状态”
当您在不使用-refresh-only的情况下执行terraform plan/apply时:
  • 权威状态是'tf-dsl-config'
  • 'terraform plan'中正在比较的状态是'tf-dsl-config'与'actual-state'
  • 'terraform apply'的结果是'actual-state'与'tf-dsl-config'同步

有关权威状态的详细信息以及各种terraform命令中要比较的状态,请参见:

enter image description here

这是来自https://medium.com/code-oil/understanding-terraform-plan-apply-refresh-only-the-myths-and-fixing-drift-5963207a1df8的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接