在我的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
  • 数据库产品
工作区的Repo如下所示:

├── 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这里只有可用的答案,我使用了我自己的答案。