Fuc*_*zak 6 terraform devops hashicorp
我正在使用 GitHub Actions 和 Terraform 构建 CI/CD 管道。我有一个如下所示的 main.tf 文件,我从多个环境的 GitHub 操作中调用该文件。我正在使用https://github.com/hashicorp/setup-terraform与 GitHub 操作中的 Terraform 进行交互。我有 MyService 组件,并且正在部署到 DEV、UAT 和 PROD 环境。我想在所有环境中重用 main.tf 并动态设置工作区名称,如下所示:MyService-DEV、MyService-UAT、MyService-PROD。terraform/cloud 块中不允许使用变量。我正在使用 HashiCorp 云来存储状态。
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 2.0"
}
}
cloud {
organization = "tf-organization"
workspaces {
name = "MyService-${env.envname}" #<==not allowed to use variables
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新
我终于成功地启动并运行了这个程序并提供了有用的评论。以下是我的发现:
作为块内块terraform.workspace
的一部分进行引用是没有意义的,因为该块定义了 Terraform 将使用哪些远程工作空间,因此决定了配置的其余部分中的最终值。workspaces
cloud
terraform.workspace
要声明您的 Terraform 配置属于 Terraform Cloud 中的多个工作区,您可以为每个工作区分配标签“MyService”,然后使用该参数tags
而不是参数name
:
cloud {
organization = "tf-organization"
workspaces {
tags = ["MyService"]
}
}
Run Code Online (Sandbox Code Playgroud)
如果您将该标签分配给 Terraform Cloud 中的假设MyService-dev
工作MyService-prod
区,然后使用上面的配置进行初始化,那么terraform workspace
在该目录中工作时,Terraform 将使用命令显示这两个工作区以供选择。
terraform.workspace
然后将显示为 或MyService-dev
,MyService-prod
具体取决于您选择的选项。
归档时间: |
|
查看次数: |
2107 次 |
最近记录: |