【问题标题】:Terraform dynamic block missing an argument or block definitionTerraform 动态块缺少参数或块定义
【发布时间】:2021-12-02 06:02:32
【问题描述】:

我正在尝试使用dynamic 块在一个资源中定义多个 ip_rules 和 virtual_network 异常。出于某种原因,当我尝试将变量用作 for_each 循环时,它会显示以下错误。

variable "vnet_subnet_ids" {
  description = "List of strings that are VNet Subnet IDs to whitelist."
  type        = list(string)
  default     = [
"/subscriptions/${subscription_id}/resourceGroups/${rg_name}/providers/Microsoft.Network/virtualNetworks/nonprod-vnet-gp-kubernetes/subnets/pods_pub_subnet_01",
"/subscriptions/${subscription_id}/resourceGroups/${rg_name}/providers/Microsoft.Network/virtualNetworks/nonprod-vnet-gp-kubernetes/subnets/pods_pub_subnet_02",
  ]
  sensitive   = false
}

resource "azurerm_container_registry" "devops" {
  name                     = var.acr_name
  resource_group_name      = var.rg_name
  location                 = var.rg_location
  sku                      = var.acr_sku
  admin_enabled            = false
  georeplication_locations = var.acr_geo_rep_locations

  network_rule_set {
    default_action = "Deny"

    dynamic "ip_rule" {
      for_each = [1]
      content {
        action = "Allow"
        ip_range = "xxx.xxx.xxx.xxx/32"
      }
    }
    #dynamic "ip_rule" {
    #  for_each = var.acr_ip_rules
    #  content {
    #    action = "Allow"
    #    ip_range = ip_rule.value
    #  }
    #}

    dynamic "virtual_network" {
      for_each = var.vnet_subnet_ids
      content {
        action = "Allow"
        subnet_id = virtual_network.value
    }
  }

  tags = var.company_tags
}

但是,我收到以下错误:

│ Error: Argument or block definition required
│ 
│ On ../../modules/azure/acr/main.tf line 41: An argument or block definition is required here.
╵

带有ip_rule 的部分有效,但virtual_network 部分无效。我不明白为什么。

【问题讨论】:

    标签: terraform terraform-provider-azure


    【解决方案1】:

    似乎有an open bug 与此相关。我目前无法对此进行测试,但请查看此变体是否适合您:

    variable "acr_name" { default = "acr_name" }
    variable "rg_location" { default = "rg_location" }
    variable "acr_sku" { default = "acr_sku" }
    variable "subscription_id" { default = "subscription_id" }
    variable "rg_name" { default = "rg_name" }
    variable "acr_geo_rep_locations" { default = "acr_geo_rep_locations" }
    variable "company_tags" { default = "company_tags" }
    variable "acr_ip_rules" { default = ["1", "2"]}
    variable "vnet_subnet_ids" { default = ["1", "2"]}
    
    terraform {
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "=2.79.1"
        }
      }
    }
    provider "azurerm" {
      features {}
    }
    
    locals {
      allowed_ips = [for ip in var.acr_ip_rules : {
        action    = "Allow",
        ip_range = ip
      }]
      allowed_virtual_networks = [for sub in var.vnet_subnet_ids : {
        action    = "Allow",
        subnet_id = sub
      }]
    }
    
    resource "azurerm_container_registry" "devops" {
      name                     = var.acr_name
      resource_group_name      = var.rg_name
      location                 = var.rg_location
      sku                      = var.acr_sku
      admin_enabled            = false
      georeplication_locations = var.acr_geo_rep_locations
      network_rule_set {
        default_action = "Deny"
        ip_rule = local.allowed_ips
        virtual_network = local.allowed_virtual_networks
      }
      tags = var.company_tags
    }
    
    
    

    【讨论】:

      【解决方案2】:

      原来我错过了}。所以,我正在处理此处列出的新错误

      【讨论】:

        猜你喜欢
        • 2020-09-20
        • 2020-08-18
        • 2022-01-14
        • 1970-01-01
        • 2021-02-18
        • 2022-07-07
        • 2019-11-24
        • 1970-01-01
        相关资源
        最近更新 更多