无法在Terraform中输入列表变量值
我正在尝试使用Terraform创建CosmosDB,并使用子网的列表变量类型,因为我们在一个VNET中有多个子网。但我的错误率越来越低- var.subnet是包含2个元素的字符串列表 │ 无法在字符串模板中包含给定值:字符串必需 我的variable.tf和main.tf在这里-无法在Terraform中输入列表变量值,terraform,terraform-provider-azure,terraform0.12+,Terraform,Terraform Provider Azure,Terraform0.12+,我正在尝试使用Terraform创建CosmosDB,并使用子网的列表变量类型,因为我们在一个VNET中有多个子网。但我的错误率越来越低- var.subnet是包含2个元素的字符串列表 │ 无法在字符串模板中包含给定值:字符串必需 我的variable.tf和main.tf在这里- # ================ # Variable.tf # ============== variable "vnet" { description = "Provide
# ================
# Variable.tf
# ==============
variable "vnet" {
description = "Provide VNET Name"
default = "cosmosdb-icn-vnet"
}
variable "subnet" {
description = "Specifies subnet name"
type = list(string)
}
# ====================
# main.tf
# ===================
resource "azurerm_cosmosdb_account" "db" {
name = "cosmosdb-${var.environment}"
location = var.location
resource_group_name = var.rgname
offer_type = "Standard"
enable_automatic_failover = true
is_virtual_network_filter_enabled = true
consistency_policy {
consistency_level = "Session"
}
tags = {
ENVIRONMENT = var.environment
}
backup {
type = var.backuptype
interval_in_minutes = "60"
retention_in_hours = "8"
}
virtual_network_rule {
id = "/subscriptions/${var.subscription}/resourceGroups/${var.rgname}/providers/Microsoft.Network/virtualNetworks/${var.vnet}/subnets/${var.subnet}"
ignore_missing_vnet_service_endpoint = true
}
geo_location {
location = var.failover_location
failover_priority = 0
}
}
我正在使用下面的命令进行应用
terraform apply-var='subnet=[“deafolt”,“cosmosdb2.0”]
您应该尝试分离两个子网,从而在资源中创建两个虚拟网络\u规则
块:
# ================
# Variable.tf
# ==============
variable "vnet" {
description = "Provide VNET Name"
default = "cosmosdb-icn-vnet"
}
variable "subnets" {
description = "Specifies subnet names"
type = list(string)
}
# ====================
# main.tf
# ===================
resource "azurerm_cosmosdb_account" "db" {
name = "cosmosdb-${var.environment}"
location = var.location
resource_group_name = var.rgname
offer_type = "Standard"
enable_automatic_failover = true
is_virtual_network_filter_enabled = true
consistency_policy {
consistency_level = "Session"
}
tags = {
ENVIRONMENT = var.environment
}
backup {
type = var.backuptype
interval_in_minutes = "60"
retention_in_hours = "8"
}
dynamic "virtual_network_rule" {
for_each = var.subnets
id = "/subscriptions/${var.subscription}/resourceGroups/${var.rgname}/providers/Microsoft.Network/virtualNetworks/${var.vnet}/subnets/${virtual_network_rule.value}"
ignore_missing_vnet_service_endpoint = true
}
geo_location {
location = var.failover_location
failover_priority = 0
}
}
您的
var.subnet
在字符串中使用,因此您不能输入列表,但必须输入字符串。你到底想得到什么?嗨@LazyEval-我正试图创建CosmosDB并传递子网和vnet。我试图以不同的方式传递子网,但也没有成功。所以使用这种方式。Hi@LazyEval-我们在VNET中有多个子网,所以在这里传递单个字符串不起作用。我需要通过一个列表,所以请在这里帮助我hi@LazyEval-谢谢你的帮助。但这不起作用,因为在测试中,我使用了两个子网,但我们有超过5-6个子网。所以创建5-6变量不是一个好的实践。你能告诉我其他的方法吗?编辑创建一个动态块。试试看谢谢你@LazyEval,它现在可以工作了。