Terraform 商店「;供应商;及;“地形”;版本在单独的TF文件中?

Terraform 商店「;供应商;及;“地形”;版本在单独的TF文件中?,terraform,provider,Terraform,Provider,目前,我必须在每个Terraform模板中定义Terraform版本和提供程序版本 我希望在我的Terraform模板之外有一个文件,在这里我可以定义提供者版本和Terraform版本,以用于目录结构中的每个模板 我已经研究过使用覆盖文件(),但似乎我必须从override.tf文件中的每个模板定义整个Terraform/Provider块。我真的很想告诉Terraform查看(伪文件)versions.tf,例如,获取每个模板所需的版本 这样的目录结构就是理想的(简化的)目录结构: terr

目前,我必须在每个Terraform模板中定义Terraform版本和提供程序版本

我希望在我的Terraform模板之外有一个文件,在这里我可以定义提供者版本和Terraform版本,以用于目录结构中的每个模板

我已经研究过使用覆盖文件(),但似乎我必须从
override.tf
文件中的每个模板定义整个Terraform/Provider块。我真的很想告诉Terraform查看(伪文件)
versions.tf,例如,获取每个模板所需的版本

这样的目录结构就是理想的(简化的)目录结构:

 terraform
     ├── dev
     │   └── main.tf
     ├── prod
     │   └── main.tf
     ├── stg
     │   └── main.tf
     └── versions.tf
现在只需要在
versions.tf中定义一个提供者版本和一个地形版本

是否可以通过这种方式将提供程序/地形版本传递到模板中?

如果不想使用,请在每个子目录中创建一个符号链接,指向
版本.tf
文件

例如,如果您的结构是:

terraform
     ├── dev
     │   └── main.tf
     ├── prod
     │   └── main.tf
     ├── stg
     │   └── main.tf
     └── versions.tf
如果希望每个子目录(
dev
prod
stg
)指向根
terraform
目录上的
versions.tf
文件,请在每个子目录中创建一个符号链接:

ln -sf terraform/versions.tf terraform/dev/versions.tf
ln -sf terraform/versions.tf terraform/prod/versions.tf
ln -sf terraform/versions.tf terraform/stg/versions.tf
您的最终结构将是:

terraform
     ├── dev
     │   └── main.tf
     │   └── versions.tf -> ../versions.tf
     ├── prod
     │   └── main.tf
     │   └── versions.tf -> ../versions.tf
     ├── stg
     │   └── main.tf
     │   └── versions.tf -> ../versions.tf
     └── versions.tf
使用Terraform工作区,而不是为您正在使用的每个“环境”都有一个子目录,因此只有一个目录,如:

terraform
     ├── main.tf
     └── versions.tf
以及通过以下操作创建的每个环境的工作区:

terraform workspace new dev
然后使用地形插值执行不同的操作,具体取决于您所处的环境,地形状态也会在每个工作空间中单独存储

因此,如果您想在
dev
环境中工作,请切换到该环境:

terraform workspace select dev

这些目录不能成为工作区有什么原因吗?这将解决您和其他人的问题。我确实使用工作区,但不太确定如何解决此问题。你能详细说明一下吗?类似地,你如何通过符号链接实现这一点?@xyz1234我已经用更多信息编辑了我的答案。谢谢你的澄清。我明白你的意思。所以听起来我必须为versions.tf中的每个模板定义我的提供者块、地形块、远程状态块,对吗?