当前,我必须在每个Terraform模板中定义Terraform版本和Provider版本。
我想在Terraform模板之外创建一个文件,在其中可以定义用于目录结构中每个模板的Provider版本和Terraform版本。
我已经看过使用替代文件(https://www.terraform.io/docs/configuration/override.html),但看来我不得不从override.tf
文件中的每个模板定义整个Terraform / Provider块。我真的很想告诉Terraform查看(伪文件)versions.tf
,例如,获取每个模板的必需版本。
因此,这样的东西将是所需的(简化的)目录结构:
terraform
├── dev
│ └── main.tf
├── prod
│ └── main.tf
├── stg
│ └── main.tf
└── versions.tf
现在只需要在versions.tf
是否可以通过这种方式将Provider / Terraform版本传递到模板中?
答案 0 :(得分:0)
如果您不想使用Terraform Workspaces,则在每个指向versions.tf
文件的子目录中创建一个符号链接。
例如,如果您的结构是:
terraform
├── dev
│ └── main.tf
├── prod
│ └── main.tf
├── stg
│ └── main.tf
└── versions.tf
并且您希望每个子目录(dev
,prod
,stg
)指向根versions.tf
目录中的terraform
文件,创建一个符号链接在每个子目录中:
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
然后根据您所使用的环境,使用terraform插值来做一些不同的事情,terraform状态也分别存储在每个工作空间中。
因此,如果您想在dev
环境中工作,请切换到该环境:
terraform workspace select dev