每次执行 `terraform plan` 前都需要运行 `terraform init` 吗?

7

想知道在每次执行terraform plan之前是否都必须要执行terraform init

也就是说,如果我已经执行了terraform init,而现在又要基于一些更改过的Terraform代码执行第二个terraform plan,那么是否需要再次执行terraform init

4个回答

7

这要看情况。

根据你修改的Terraform代码的具体内容,你 可能 需要重新运行init。例如,如果你对配置好的后端做了修改,你需要重新运行terraform init以便用这些更改重新初始化。如果更改是针对脚本中非terraform配置部分的,则只使用terraform planterraform apply即可。

另外需要说明的一点是,如果你正在使用模块,并且在一个模块中进行了修改,那么你需要在运行planapply之前重新运行terraform get -update以获取这些更改。


5
在即将发布的0.10版本中,init命令将额外负责安装提供者插件,因此添加新提供者的第一个资源将是重新运行该命令的另一个原因。 - Martin Atkins
正如他们在博客文章中所述。 - aderubaru
@James Thorpe,您能否详细说明一下您使用的术语“配置后端”和“非Terraform配置部分”? - Sreeraju V

3

同意以上所有答案,但是这里还有一些需要补充的内容,即使没有任何变化,多次运行terraform init也是安全的,不会影响任何东西。


1

terraform init 运行的状态取决于插件或后端配置是否有更改。这个命令可以安全地多次运行,以使工作目录与配置中的更改保持同步。尽管后续运行可能会产生错误,但此命令不会删除现有的配置或状态。

因此,您可以在每次运行terraform plan时运行init以保持更新。如果没有更改,则可以跳过它。但是,如果有多个人在项目上工作,并且您正在某个位置存储状态,则始终在运行terraform plan之前运行terraform init


0

这取决于具体情况。 terraform init 命令用于初始化包含 Terraform 配置文件的工作目录。如果您没有更改 Terraform 配置(可以说是关键字),则不需要发出 terraform init 命令。相反,您可以使用 terraform planterraform apply 命令。通常,Terraform 会通过消息告诉您是否需要初始化。


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