首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >terraform - azure vnet by variables

terraform - azure vnet by variables
EN

Stack Overflow用户
提问于 2021-03-26 01:16:45
回答 1查看 113关注 0票数 0

terraform版本: v0.12.24 provider.azurerm v2.49.0

我试图通过将所有行项目作为变量,然后将它们填充到variables.auto.tfvars文件中来构建一个vnet。

对于我的main.tf部分:

代码语言:javascript
复制
resource "azurerm_virtual_network" "vnet" {
  name                   = var.vnet_name
  resource_group_name    = var.rg_grp_name
  address_space          = var.vnet_cidr
  location               = var.region_location #match RG location
  dns_servers            = var.vnet_dns_servers




#tags stuff here
}
Resource "azurerm_subnet" "subnet" {
  for_each               = var.subnets
  name                   = lookup(each.value, "name")
  resource_group_name    = var.rg_grp_name
  virtual_network_name   = azurerm_virtual_network.vnet.name
  address_prefix         = lookup(each.value, "cidr")
  
}

在我的variables.tf里,我真的不太确定;

代码语言:javascript
复制
###vnet section###################
#variable for defining what region
variable "name" {
  type = string
}
#variable for defining what region
variable "resource_group_name" {
  type = string
}
#variable for defining what region
variable "vnet_cidr" {
  description = "address space"
  type = list
}

#variable for defining what region
variable "region_location" {
  type = string
}
#variable for defining what region
variable "vnet_dns_servers" {
  type = list
}
#variable for defining what region
variable "subnets" {
   type = map(object({
   name = string
   cidr = string

}))
}
##end subnet block


#variable for defining what region
variable "azregion" {
  type = string
}

#####end vnet section#############

我还没有variables.auto.tfvars部分...

做这件事最好的方法是什么?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-03-26 10:12:56

我们可以通过变量块创建输入变量,但将它们作为属性引用到名为var.的对象上。我们可以从表达式中访问其值,如var.<NAME>,其中与声明块中给定的标签相匹配。

所以,根据你的main.tf文件中的表达式,变量声明块应该是这样的:

代码语言:javascript
复制
variable "vnet_name" {
  description = "Name of the vnet to create"
  type        = string
  # default     = "acctvnet"
}

variable "rg_grp_name" {
  description = "Name of the resource group to be imported."
  type        = string
  # default = "testrg"
}

variable "vnet_cidr" {
  type        = list(string)
  description = "The address space that is used by the virtual network."
  # default     = ["10.0.0.0/16"]
}

variable "region_location" {
  type  = string
  # default = "eastus"
}


# If no values specified, this defaults to Azure DNS 
variable "vnet_dns_servers" {
  description = "The DNS servers to be used with vNet."
  type        = list(string)
  # default     = []
}

variable "subnets" {
   type = map(object({
   name = string
   cidr = string

}))
# default = {
#   subnet1 = {
#     name = "subnet1"
#     cidr = "10.0.1.0/24"
#   },
#   subnet2 = {
#     name = "subnet2"
#     cidr = "10.0.2.0/24"
#   }
# }
}

如果要使terraform自动加载多个变量定义文件,可以在variables.auto.tfvars文件中输入该变量的默认值作为表达式variable_name = default_value

代码语言:javascript
复制
vnet_name = "acctvnet"
rg_grp_name = "testrg"
vnet_cidr = ["10.0.0.0/16"]
region_location = "eastus"
vnet_dns_servers = []

subnets = {
  subnet1 = {
    name = "subnet1"
    cidr = "10.0.1.0/24"
  },
  subnet2 = {
    name = "subnet2"
    cidr = "10.0.2.0/24"
  }
}

你可以使用terraform查看vnet module中的源代码以了解更多详细信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66804482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档