首页 > 解决方案 > 无法通过 -var-file 传递 azurerm_subnet 资源组

问题描述

我想运行 terraform plan -var-file -out 然后应用该计划,但出现以下错误。

下面是我的main.tfvariable.tf和 networking.tfvars 文件:

###### Resource Group ##############
resource "azurerm_resource_group" "resourcegroupname" {
  name     = "${var.resourcegrouprefix}-RG"
  location = "${var.location}"
}

###### VNET ##############
resource "azurerm_virtual_network" "vnet" {
  name                = "${var.vnet-prefix}-vnet"
  resource_group_name = "${azurerm_resource_group.resourcegroupname.name}"
  location            = "${azurerm_resource_group.resourcegroupname.location}"
  address_space       = "${var.vnetcidr}"
}
# address_space       = ["10.0.0.0/20"]

###### Subnets ##############
resource "azurerm_subnet" "subnet1" {
  name                 = "${var.subnet1-prefix}"
  virtual_network_name = "${azurerm_virtual_network.vnet.name}"
  resource_group_name  = "${azurerm_resource_group.resourcegroupname.name}"
  address_space       = "${var.subnet1cidr}"
}

resource "azurerm_subnet" "subnet2" {
  name                 = "${var.subnet2-prefix}"
  virtual_network_name = "${azurerm_virtual_network.vnet.name}"
  resource_group_name  = "${azurerm_resource_group.resourcegroupname.name}"
  address_space       = "${var.subnet2cidr}"
}

resource "azurerm_subnet" "subnet3" {
  name                 = "${var.subnet3-prefix}"
  virtual_network_name = "${azurerm_virtual_network.vnet.name}"
  resource_group_name  = "${azurerm_resource_group.resourcegroupname.name}"
  address_space       = "${var.subnet3cidr}"

变量文件

variable "resourcegrouprefix" {
  description = "The prefix used for all resources in VNET RG"
  default = ""
}

variable "vnet-prefix" {
  description = "The prefix used for VNET resource"
  default = ""
}

variable "vnetcidr" {
  default = ""
}

variable "subnet1cidr" {
  default = ""
}

variable "subnet2cidr" {
  default = ""
}
variable "subnet3cidr" {
  default = ""
}

网络.tfvars

resourcegrouprefix = "networking"
vnet-prefix = "networking"
vnetcidr = "10.0.0.0/20"
subnet1-prefix = "untrust"
subnet2-prefix = "trust"
subnet3-prefix = "mgmt"
subnet1cidr = "10.0.0.0/24"
subnet2cidr = "10.0.1.0/24"
subnet3cidr = "10.0.2.0/24"

我试图执行的命令:

terraform plan -var-file="networking.tfvars" -out="networkingplan.out"

错误信息:

azurerm_subnet.subnet1:“address_prefix”:未设置必填字段 azurerm_subnet.subnet1::无效或未知键:address_space azurerm_subnet.subnet2:“address_prefix”:未设置必填字段 azurerm_subnet.subnet2::无效或未知键:address_space azurerm_subnet。 subnet3:“address_prefix”:未设置必填字段 azurerm_subnet.subnet3::无效或未知键:address_space azurerm_subnet.subnet4:“address_prefix”:未设置必填字段 azurerm_subnet.subnet4::无效或未知键:address_space azurerm_subnet.subnet5: “address_prefix”:未设置必填字段 azurerm_subnet.subnet5::无效或未知键:address_space azurerm_subnet.subnet6:“address_prefix”:未设置必填字段 azurerm_subnet.subnet6::无效或未知键:address_space azurerm_virtual_network.vnet: address_space: 应该是一个列表

标签: azureazure-devopsterraformterraform-provider-azure

解决方案


修复了错误信息

   ###### Resource Group ##############
    resource "azurerm_resource_group" "resourcegroupname" {
      name     = "${var.resourcegrouprefix}-RG"
      location = "${var.location}"
    }

    ###### VNET ##############
    resource "azurerm_virtual_network" "vnet" {
      name                = "${var.vnet-prefix}-vnet"
      resource_group_name = "${azurerm_resource_group.resourcegroupname.name}"
      location            = "${azurerm_resource_group.resourcegroupname.location}"
      address_space       = ["${var.vnetcidr}"]
    }
    # address_space       = ["10.0.0.0/20"]

    ###### Subnets ##############
    resource "azurerm_subnet" "subnet1" {
      name                 = "${var.subnet1-prefix}"
      virtual_network_name = "${azurerm_virtual_network.vnet.name}"
      resource_group_name  = "${azurerm_resource_group.resourcegroupname.name}"
      address_prefix      = "${var.subnet1cidr}"
    }

    resource "azurerm_subnet" "subnet2" {
      name                 = "${var.subnet2-prefix}"
      virtual_network_name = "${azurerm_virtual_network.vnet.name}"
      resource_group_name  = "${azurerm_resource_group.resourcegroupname.name}"
      address_prefix     = "${var.subnet2cidr}"
    }

    resource "azurerm_subnet" "subnet3" {
      name                 = "${var.subnet3-prefix}"
      virtual_network_name = "${azurerm_virtual_network.vnet.name}"
      resource_group_name  = "${azurerm_resource_group.resourcegroupname.name}"
      address_prefix    = "${var.subnet3cidr}"
    }

推荐阅读