如何在azure devops中创建不同的环境,并通过参数或手动使用terraform给出不同的名称



我一直在尝试通过terraform在azure开发中创建两个不同的环境。但有一点我做不到,那就是"亲手"给这些羡慕者起名字。在终端

使用下面的代码:

main.tf

resource "azuredevops_environment" "environment1" {
project_id = azuredevops_project.project.id
name       = var.env_name1
}
resource "azuredevops_environment" "environment2" {
project_id = azuredevops_project.project.id
name       = var.env_name2
}

variables.tf

variable env_name1 {
type        = string
sensitive   = true
}
variable env_name2 {
type        = string
sensitive   = true
}

在我使用terraform apply之后,我必须在terminal中命名这两个env——这是我想要的。但是我想在一个模块中得到这个,而不是两个(例如通过使用count或for each),但我不知道如何。

这应该是相当容易做到的:

variable "environments" {
type        = list(string)
sensitive   = true
}

然后,假设您像这样将值添加到上述变量中:

environments = ["env1", "env2"]

最后:

resource "azuredevops_environment" "environment" {
for_each   = toset(var.environments)
project_id = azuredevops_project.project.id
name       = each.value
}

在这里,内置的toset函数[1]与for_each元参数一起使用。这将创建两个键为env1env2的环境,也就是说,它们将在输出中显示为azuredevops_environment.environment["env1"]azuredevops_environment.environment["env2"]

根据注释(h/t: @MattSchuchard),变量可以立即使用set(string)类型,这将避免使用toset:

variable "environments" {
type        = set(string)
sensitive   = true
}

变量的值将保持不变,资源块必须更新为:

resource "azuredevops_environment" "environment" {
for_each   = var.environments
project_id = azuredevops_project.project.id
name       = each.value
}

[1] https://developer.hashicorp.com/terraform/language/functions/toset

[2] https://developer.hashicorp.com/terraform/language/meta-arguments/for_each

最新更新