我希望指定要.tfvars
在我的工作区中加载哪个文件。
与在工作区中输入所有内容相比,使用文件管理变量要容易得多。我会解释一下。
\n\n我有两个工作空间:
\n\ndatabase-qa
database-prod
工作区的存储库如下所示:
\n\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 database/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.qa.tfvars\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.prod.tfvars\n
Run Code Online (Sandbox Code Playgroud)\n\n我想main.qa.tfvars
为database-qa
工作区加载,自然地main.prod.tfvars
为database-prod
工作区加载。
为了安全起见,我将机密/密码保留在工作区变量上,并使用tfvars
来进行非敏感配置,例如名称、版本等,以方便起见。我发现这比将所有变量添加到云中的工作区要容易得多。
我检查了文档,但找不到方法。
\n\n可以选择使用文件名的*.auto.tfvars
变量定义,但最终会加载qa
文件prod
并且无法正常工作。
有可能做到吗?有哪些替代方案?
\n一种解决方案是在根目录上创建通用 Terraform 代码,并为每个环境创建一个目录。
\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 database/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 qa/\n\xe2\x94\x82 | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 qa.auto.tfvars\n\xe2\x94\x82 | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 root.tf\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 prod/\n\xe2\x94\x82 | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 prod.auto.tfvars\n\xe2\x94\x82 | \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 root.tf\n
Run Code Online (Sandbox Code Playgroud)\n在 中root.tf
,只需将根目录指向本地模块即可。
module "database" {\n source = "../"\n cpu = var.cpu\n}\n\n[...]\n
Run Code Online (Sandbox Code Playgroud)\n在 Terraform Cloud 上,对于每个工作区,General Settings
您必须覆盖Terraform Working Directory
,并配置目录qa
或prod
.
就是这样!
\n经过大量阅读和帮助该线程后,我找到了解决方案/解决方法。
首先,Terraform Cloud.tfvars
目前不支持在工作区运行中指定要加载的文件。目前尚不清楚是否有计划积压。
然而,Terraform CLI 通过以下命令支持它,如果您创建管道,它可以正常工作,但手动运行它有风险。
-var-file=<filename>.tfvars
Run Code Online (Sandbox Code Playgroud)
由于我使用 Terraform Cloud,我最终得到了以下配置。必须将其复制到所有工作区,但它可以工作。
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
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5308 次 |
最近记录: |