在我的Terraform云工作区中加载特定的tfvars变量文件
我希望指定要在我的工作区中加载的在我的Terraform云工作区中加载特定的tfvars变量文件,terraform,Terraform,我希望指定要在我的工作区中加载的.tfvars文件 与在工作区中输入所有内容相比,使用文件管理变量要容易得多。我会解释的 我有两个空间: 数据库qa 数据库产品 工作区的Repo如下所示: ├── database/ │ ├── main.tf │ ├── main.qa.tfvars │ ├── main.prod.tfvars 我想为数据库qa工作区加载main.qa.tfvars,为数据库prod工作区加载main.prod.tfvars 为了安全起见,我保留工作区变量上
.tfvars
文件
与在工作区中输入所有内容相比,使用文件管理变量要容易得多。我会解释的
我有两个空间:
数据库qa
数据库产品
├── database/
│ ├── main.tf
│ ├── main.qa.tfvars
│ ├── main.prod.tfvars
我想为数据库qa
工作区加载main.qa.tfvars
,为数据库prod
工作区加载main.prod.tfvars
为了安全起见,我保留工作区变量上的机密/密码,为了方便起见,我使用tfvars
进行名称、版本等非敏感配置。我发现这比将所有变量添加到云中的工作区要容易得多
我查过了,但找不到办法
可以选择使用*.auto.tfvars
作为文件名,但最终会加载qa
和prod
文件,这将无法正常工作
有可能吗?有哪些替代方案?经过大量阅读和帮助,我找到了解决方案/解决方法 首先,Terraform Cloud此时不支持指定要在工作区运行中加载的
.tfvars
文件。目前尚不清楚是否计划在待办事项上进行
不过,Terraform CLI通过以下命令支持它,如果您创建管道,它可以正常工作,但是手动运行它会有风险
-var文件=.tfvars
因为我使用的是TerraformCloud,所以我最终得到了以下配置。必须将其复制到所有工作区(叹气),但它可以工作
variable "TFC_WORKSPACE_NAME" {
type = string
}
locals {
env = merge(
yamldecode(file("env/${var.TFC_WORKSPACE_NAME}.yaml"))
)
}
resource "azurerm_resource_group" "group" {
name = local.env.group
location = local.env.location
}
任何对完整示例感兴趣的人都可以使用它。一种解决方案是在根目录上创建通用地形代码,并为每个环境创建一个目录
├── database/
│ ├── main.tf
│ ├── qa/
│ | ├── qa.auto.tfvars
│ | ├── root.tf
│ ├── prod/
│ | ├── prod.auto.tfvars
│ | ├── root.tf
在root.tf
中,只需指向根目录作为本地模块
module "database" {
source = "../"
cpu = var.cpu
}
[...]
在Terraform Cloud上,对于每个工作区,在常规设置中
您必须覆盖Terraform工作目录
,并配置目录qa
或prod
就这样 这不是一个完美的解决方案,因为我们丢失了变量元数据(如描述),但很实用。@Antoine确实,也许将来的更新会允许这样做。你找到解决方案了吗?@OpsterElasticsearchPro Vijay这里只有可用的答案,我使用了我自己的答案。