azure - 将多个 for_each 值连接到单个列表中

标签 azure terraform

我正在尝试将多个 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/

相关文章:

amazon-web-services - terraform 资源模块中的两个 for_each

Azure Web App 使用自签名 SSL 证书调用本地服务

Azure网站 Poodle 漏洞问题

Azure 服务总线有序处理消息

azure - 西欧 Azure 数据工厂中的复制事件

deployment - Azure部署错误: cannot find ClientPerfCountersInstaller. exe

azure - 使用 terraform 在 Azure 中为每个可用区创建子网

Terraform 将元组元素组合为列表

amazon-web-services - 创建 CloudFront 分配 : NoSuchOrigin: 时出错

amazon-s3 - 将S3静态站点与应用程序负载平衡器一起使用