Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terraform 从未生成的资源应用地形_Terraform_Terraform Provider Azure_Terragrunt - Fatal编程技术网

Terraform 从未生成的资源应用地形

Terraform 从未生成的资源应用地形,terraform,terraform-provider-azure,terragrunt,Terraform,Terraform Provider Azure,Terragrunt,我正在尝试根据子网名称列表创建映射列表,因此我创建了以下内容: 创建了一个名为subnet_name的变量,类型为字符串列表 创建了空资源块以从此列表创建映射列表,如下所示: 如果我只执行这个块,我就有了正确的贴图列表,但是当我尝试将这个贴图列表与动态块一起使用时,这是不起作用的 resource "azurerm_virtual_network" "virtual_network" { address_space = "${var.cidr_network_range}" locati

我正在尝试根据子网名称列表创建映射列表,因此我创建了以下内容:

  • 创建了一个名为subnet_name的变量,类型为字符串列表
  • 创建了空资源块以从此列表创建映射列表,如下所示:
  • 如果我只执行这个块,我就有了正确的贴图列表,但是当我尝试将这个贴图列表与动态块一起使用时,这是不起作用的

    resource "azurerm_virtual_network" "virtual_network" {
      address_space = "${var.cidr_network_range}"
      location = "${var.location}"
      name = "${var.virtual_network_resource_name}"
      resource_group_name = "${var.resource_group_name}"
      count = "${length(var.subnet_names)}"
    
      dynamic "subnet"{
        for_each = [for s in null_resource.subnet_mapping: {
          name = s.name
          prefix = cidrsubnet(element(var.cidr_network_range, 0),8 ,s.number)
        }]
    
        content {
          name = subnet.value.name
          address_prefix = subnet.value.prefix
        }
      }
    
      depends_on = [null_resource.subnet_mapping]
    }
    
    resource "null_resource" "subnet_mapping" {
      count = "${length(var.subnet_names)}"
    
      triggers = {
        name   = "${element(var.subnet_names, count.index)}"
        number = "${count.index}"
      }
    }
    
    
    resource "azurerm_resource_group" "virtual_network_group" {
      location = "${var.location}"
      name = "${var.resource_group_name}"
    }
    
    
    它应该是有效的,但是我仍然没有null_资源的输出,所以它失败了

    dynamic "subnet"{
        for_each = [for s in null_resource.subnet_mapping: {
          name = s.name
          prefix = cidrsubnet(element(var.cidr_network_range, 0),8 ,s.number)
        }]
    
        content {
          name = subnet.value.name
          address_prefix = subnet.value.prefix
        }
      }
    
      depends_on = [null_resource.subnet_mapping]
    }
    
    
    我的错误消息:

    Error: Unsupported attribute
    
      on main.tf line 10, in resource "azurerm_virtual_network" "virtual_network":
      10:       name = s.name
    
    This object does not have an attribute named "name".
    
    
    Error: Unsupported attribute
    
      on main.tf line 10, in resource "azurerm_virtual_network" "virtual_network":
      10:       name = s.name
    
    This object does not have an attribute named "name".
    
    
    Error: Unsupported attribute
    
      on main.tf line 10, in resource "azurerm_virtual_network" "virtual_network":
      10:       name = s.name
    
    This object does not have an attribute named "name".
    
    
    Error: Unsupported attribute
    
      on main.tf line 10, in resource "azurerm_virtual_network" "virtual_network":
      10:       name = s.name
    
    This object does not have an attribute named "name".
    
    
    Error: Unsupported attribute
    
      on main.tf line 11, in resource "azurerm_virtual_network" "virtual_network":
      11:       prefix = cidrsubnet(element(var.cidr_network_range, 0),8 ,s.number)
    
    This object does not have an attribute named "number".
    
    
    Error: Unsupported attribute
    
      on main.tf line 11, in resource "azurerm_virtual_network" "virtual_network":
      11:       prefix = cidrsubnet(element(var.cidr_network_range, 0),8 ,s.number)
    
    This object does not have an attribute named "number".
    
    
    Error: Unsupported attribute
    
      on main.tf line 11, in resource "azurerm_virtual_network" "virtual_network":
      11:       prefix = cidrsubnet(element(var.cidr_network_range, 0),8 ,s.number)
    
    This object does not have an attribute named "number".
    
    
    Error: Unsupported attribute
    
      on main.tf line 11, in resource "azurerm_virtual_network" "virtual_network":
      11:       prefix = cidrsubnet(element(var.cidr_network_range, 0),8 ,s.number)
    
    This object does not have an attribute named "number".
    
    

    从消息中,我不清楚您要创建多少个VNET,因为您的代码有点混乱。对于
    null\u资源的问题
    ,我认为这不是一个好的选择,我建议使用
    locals

    在这里,我假设您只想创建一个具有串行子网的Vnet,并使用列表存储子网的名称,然后使用下面的核心代码示例:

    locals {
      subnets = [for sname in var.subnet_names: {
        name = sname
        # the index begin from 0, so you need to add 1
        number = index(var.subnet_names, sname) + 1
      }]
    }
    
    resource "azurerm_virtual_network" "virtual_network" {
      address_space = "${var.cidr_network_range}"
      location = "${var.location}"
      name = "${var.virtual_network_resource_name}"
      resource_group_name = "${var.resource_group_name}"
    
    
      dynamic "subnet"{
        for_each = [for s in local.subnets: {
          name = s.name
          prefix = cidrsubnet(var.cidr_network_range, 8 , s.number)
        }]
    
        content {
          name = subnet.value.name
          address_prefix = subnet.value.prefix
        }
      }
    }
    

    我这样解决了,我创建了一个名为

    variable "subnets" {
      type = list(map(string))
      description = "A list of maps of names and network addresses bits for subnets that will be created inside this network (this is parallel to subnet_prefixes array)."
    }
    
    这样我已经创建了地图,我想已经自动创建了它,因为我以前张贴,但它似乎不是很常见的地形的方式

    在Charles Xu示例中,映射将基于序列(1,2,3)创建,我希望始终以不同的方式使用它,如(21,24,26) 所以我能找到的唯一解决办法就是在之前强制地图


    无论如何,谢谢大家

    为什么不给点回应呢?你还想解决这个问题吗?或者你只想得到答案而什么也不做?不要忽视别人的帮助!我没有忽视,伙计,我想你的答案是我的。你应该接受我的回答。请检查我发布的代码,这是你的副本吗?我刚刚删除了空资源。
    variable "subnets" {
      type = list(map(string))
      description = "A list of maps of names and network addresses bits for subnets that will be created inside this network (this is parallel to subnet_prefixes array)."
    }
    
    resource "azurerm_virtual_network" "virtual_network" {
      address_space = var.cidr_network_range
      location = var.location
      name = var.virtual_network_resource_name
      resource_group_name = var.resource_group_name
    
      dynamic "subnet"{
        for_each = [for subnet in var.subnets: {
          name = subnet.name
          prefix = cidrsubnet(element(var.cidr_network_range, 0),8 ,subnet.number)
        }]
        content {
          name = subnet.value.name
          address_prefix = subnet.value.prefix
        }
      }
    }
    
    resource "azurerm_resource_group" "virtual_network_group" {
      location = var.location
      name = var.resource_group_name
    }