我正在尝试将多个 for_each
值组合到来自不同资源的列表中。然后在 for_each
Terraform Version: v1.4.2
provider registry.terraform.io/microsoft/azuredevops v0.4.0
代码:
#Implementation environments
resource "azuredevops_environment" "impl_regional_environment" {
for_each = toset(var.environment_regions)
project_id = data.azuredevops_project.vrx.id
name = "${each.key} - IMPL"
description = "${each.key} Implementation Environment. \n**Managed by Terraform**"
}
#Test environments
resource "azuredevops_environment" "test_regional_environment" {
for_each = toset(var.environment_regions)
project_id = data.azuredevops_project.vrx.id
name = "${each.key} - TEST"
description = "${each.key} Test Environment. \n**Managed by Terraform**"
}
#Preview environments
resource "azuredevops_environment" "prev_regional_environment" {
for_each = toset(var.environment_regions)
project_id = data.azuredevops_project.vrx.id
name = "${each.key} - PREV"
description = "${each.key} Preview Environment. \n**Managed by Terraform**"
}
我正在尝试组合,因为我想说如果名称包含“US”,则将资源应用于该值 ID。
resource "azuredevops_check_business_hours" "us_non-production" {
project_id = data.azuredevops_project.vrx.id
display_name = "Daily Deployment Window \n**Managed by Terraform**"
for_each = {for key, val in concat(azuredevops_environment.impl_regional_environment,azuredevops_environment.test_regional_environment,azuredevops_environment.prev_regional_environment,azuredevops_environment.pcpy_regional_environment):
key => val if length(regexall("US - ", val.name)) > 0}
target_resource_id = each.value.id
target_resource_type = "environment"
start_time = "18:00"
end_time = "23:30"
time_zone = "Central Standard Time"
monday = true
tuesday = true
wednesday = true
thursday = true
friday = true
saturday = true
sunday = true
}
如果我使用 concat 我会得到以下错误:
│ Error: Invalid function argument
│
│ on modules\project_vrx\vrx_environments\main.tf line 144, in resource "azuredevops_check_business_hours" "us_non-production":
│ 144: for_each = {for key, val in concat(azuredevops_environment.impl_regional_environment,azuredevops_environment.test_regional_environment,azuredevops_environment.prev_regional_environment,azuredevops_environment.pcpy_regional_environment):
│ ├────────────────
│ │ while calling concat(seqs...)
│ │ azuredevops_environment.impl_regional_environment is object with 6 attributes
│
│ Invalid value for "seqs" parameter: all arguments must be lists or tuples; got object.
最佳答案
为了能够合并您的 map ,您必须从中获取列表。您可以使用值
来做到这一点:
for_each = {
for key, val in concat(values(azuredevops_environment.impl_regional_environment), values(azuredevops_environment.test_regional_environment), values(azuredevops_environment.prev_regional_environment), values(azuredevops_environment.pcpy_regional_environment)): key => val if length(regexall("US - ", val.name)) > 0
}
关于azure - 将多个 for_each 值连接到单个列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76052729/