删除“.terraform”文件夹的副作用
Side effects of removing ".terraform" folder
根据文档,.terraform
文件夹包含提供商插件的缓存。
如果删除此文件夹(但保留状态文件),是否会在 terraform init
重新创建?
删除 .terraform
可能产生哪些不良影响?
如果您删除了 .terraform 文件夹,您是正确的,提供商已被删除,但您需要备份状态文件,因为我曾多次看到该文件有时会被删除或损坏。
terraform init 确实会恢复 .terraform 文件夹。
为什么需要这样做?正如您可以 运行 terraform init -reconfigure 那样,这是一个更安全的选择。
删除.terraform
目录是完全安全的。
提供程序的目录 (./modules
) 和二进制文件 (./providers
)
./
./modules --> contains the code of used modules
./providers --> contains the binaries of the providers
./terraform.tfstate --> the state file
根据 Jason 的回答,删除 terraform.tfstate 文件的结果取决于您是否使用后端。
如果您使用 backend(这是保存状态文件的推荐方式),下一个 terraform init
将创建一个指向状态文件的文件。
.terraform
目录包含几种不同类型的工件,其中一些跟踪仅与您当前工作目录相关的本地设置,而其他则是来自其他地方的数据缓存。
广义上讲 terraform init
可以在 .terraform
目录中重新创建 大部分 东西,但有一些小例外需要注意:
- 除非您的 Terraform 配置仅包含本地模块或对远程模块有确切的版本限制,
terraform init
不一定 select 每个外部模块的相同版本,如果上游的可用版本有变了。 .terraform/modules/modules.json
文件(在当前 Terraform 版本中)跟踪当前工作目录中的特定 selection。
- 如果您使用
terraform workspace select
select 编辑了一个非默认 workspace,删除 .terraform
目录将重置回默认工作空间,因为 Terraform 使用.terraform
下的文件以跟踪您当前的 selection.
- 如果您在使用
terraform init
时使用了 -backend-config
选项,则删除 .terraform
将丢弃这些自定义设置,并且您需要在 运行 terraform init
再一次。
.terraform
中的其他主要人工制品 Terraform 轨迹源自 .terraform
之外的信息,因此可重现:
- 如果您不使用
-backend-config
,那么您的后端配置将存在于您配置的backend
块中,因此 Terraform 将能够只要您没有更改配置,就完全重现它。
.terraform/providers
中的本地提供程序缓存由 the dependency lock file 索引,它是在 .terraform
旁边生成的而不是在 .terraform
内部生成的,因此它可以保存在版本控制中并在工作之间共享目录。 terraform init
默认情况下,将安装与该文件中记录的完全相同的依赖项。
以上内容适用于 Terraform v1.0 和 v1.1。 .terraform
的确切内容和布局是 Terraform 的一个实现细节,因此旧版本对它的处理方式不同,新版本可能不一定完全遵循我上面描述的内容。
根据文档,.terraform
文件夹包含提供商插件的缓存。
如果删除此文件夹(但保留状态文件),是否会在 terraform init
重新创建?
删除 .terraform
可能产生哪些不良影响?
如果您删除了 .terraform 文件夹,您是正确的,提供商已被删除,但您需要备份状态文件,因为我曾多次看到该文件有时会被删除或损坏。
terraform init 确实会恢复 .terraform 文件夹。
为什么需要这样做?正如您可以 运行 terraform init -reconfigure 那样,这是一个更安全的选择。
删除.terraform
目录是完全安全的。
提供程序的目录 (./modules
) 和二进制文件 (./providers
)
./
./modules --> contains the code of used modules
./providers --> contains the binaries of the providers
./terraform.tfstate --> the state file
根据 Jason 的回答,删除 terraform.tfstate 文件的结果取决于您是否使用后端。
如果您使用 backend(这是保存状态文件的推荐方式),下一个 terraform init
将创建一个指向状态文件的文件。
.terraform
目录包含几种不同类型的工件,其中一些跟踪仅与您当前工作目录相关的本地设置,而其他则是来自其他地方的数据缓存。
广义上讲 terraform init
可以在 .terraform
目录中重新创建 大部分 东西,但有一些小例外需要注意:
- 除非您的 Terraform 配置仅包含本地模块或对远程模块有确切的版本限制,
terraform init
不一定 select 每个外部模块的相同版本,如果上游的可用版本有变了。.terraform/modules/modules.json
文件(在当前 Terraform 版本中)跟踪当前工作目录中的特定 selection。 - 如果您使用
terraform workspace select
select 编辑了一个非默认 workspace,删除.terraform
目录将重置回默认工作空间,因为 Terraform 使用.terraform
下的文件以跟踪您当前的 selection. - 如果您在使用
terraform init
时使用了-backend-config
选项,则删除.terraform
将丢弃这些自定义设置,并且您需要在 运行terraform init
再一次。
.terraform
中的其他主要人工制品 Terraform 轨迹源自 .terraform
之外的信息,因此可重现:
- 如果您不使用
-backend-config
,那么您的后端配置将存在于您配置的backend
块中,因此 Terraform 将能够只要您没有更改配置,就完全重现它。 .terraform/providers
中的本地提供程序缓存由 the dependency lock file 索引,它是在.terraform
旁边生成的而不是在.terraform
内部生成的,因此它可以保存在版本控制中并在工作之间共享目录。terraform init
默认情况下,将安装与该文件中记录的完全相同的依赖项。
以上内容适用于 Terraform v1.0 和 v1.1。 .terraform
的确切内容和布局是 Terraform 的一个实现细节,因此旧版本对它的处理方式不同,新版本可能不一定完全遵循我上面描述的内容。