Terraform 创建资源,遍历地图的值,而不是关键地形
我想不出如何循环遍历下面映射的值之和Terraform 创建资源,遍历地图的值,而不是关键地形,terraform,Terraform,我想不出如何循环遍历下面映射的值之和 variable "images" { default = { "rhel-8-factory-os-ready" = { "availability_zone" = "eu-fra-1ah" "flavor" = 4 "instance_count" = 2 "image_name" = "rhel-8-factory-os-ready" }, "rhel-7-factor
variable "images" {
default = {
"rhel-8-factory-os-ready" = {
"availability_zone" = "eu-fra-1ah"
"flavor" = 4
"instance_count" = 2
"image_name" = "rhel-8-factory-os-ready"
},
"rhel-7-factory-os-ready" = {
"availability_zone" = "eu-fra-1ai"
"instance_count" = 3
"flavor" = 3
"image_name" = "rhel-7-factory-os-ready"
},
"rhel-6-factory-os-ready" = {
"availability_zone" = "eu-fra-1ah"
"instance_count" = 3
"flavor" = 3
"image_name" = "rhel-6-factory-os-ready"
}
}
}
在这里,我必须遍历所有键的instance\u count
属性之和,并基于instance\u count
创建实例
我可以使用以下内置函数计算实例计数的总和
locals {
list_sum = length(flatten([for i in var.images: range(i["instance_count"])]))
}
如何遍历list\u sum
变量并基于instance\u count
创建资源
我创建了以下列表以创建资源:
locals {
list_images = tolist(keys(var.images))
list_instance_count = [for i in var.images: i["instance_count"]]
list_flavors = [for i in var.images: i["flavor"]]
list_image_names = [for i in var.images: i["image_name"]]
list_availability_zones = [for i in var.images: i["availability_zone"]]
}
我的资源::
resource "openstack_compute_instance_v2" "instance" {
count = local.list_sum
image_name = element(local.list_image_names, count.index +1 )
flavor_id = element(local.list_flavors, (count.index + 1) )
name = element(local.list_image_names, (count.index + 1) )
security_groups = var.security_group
availability_zone = element(local.list_availability_zones, (count.index + 1) )
key_pair = "foptst"
network {
name = var.network_name
}
}
到现在为止,您可能已经知道我的迭代是不正确的。我的资源块必须根据实例计数变量创建资源数量,即rhel-8-factory-os-ready
的2个实例、rhel-7-factory-os-ready
的3个实例和rhel-6-factory-os-ready
的3个实例
因为循环不正确,我无法得到它。如果有人能帮助我正确地迭代以按预期创建资源,那就太好了
多谢各位,
哈沙
这将产生:
expanded_image_names = [
"rhel-6-factory-os-ready",
"rhel-6-factory-os-ready",
"rhel-6-factory-os-ready",
"rhel-7-factory-os-ready",
"rhel-7-factory-os-ready",
"rhel-7-factory-os-ready",
"rhel-8-factory-os-ready",
"rhel-8-factory-os-ready",
]
然后使用它们:
resource "openstack_compute_instance_v2" "instance" {
count = local.list_sum
image_name = element(local.expanded_image_names, count.index +1 ) # <-----
... # Do similar for the others.
key_pair = "foptst"
network {
name = var.network_name
}
}
resource“openstack\u compute\u instance\u v2”“instance”{
count=local.list\u sum
image_name=element(local.expanded_image_names,count.index+1)#也许尚未发布的每个资源的地形特征可以是一个()要使用?terraform 0.12已经发布,我正在使用它,因为每个可用的
。我知道我的数据集很复杂,但完全有效。我使用了setproduct
为每个使用,但它正在生成3*3=9
资源,其中我只需要创建8个。我尝试使用动态
,根本不起作用请仔细阅读。它说“很遗憾,我们无法在Terraform 0.12初始版本中完全完成此功能,但我们计划在后续版本中包含此功能”非常感谢,这将按预期创建资源。但是,由于它使用了计数
,因此存在一个缺点。但是,这是我的选择。这只会影响我增加/减少讨论的计数。除非我使用正确的键,否则地形无法保证按预期方式进行更改。不过,非常感谢您的回答。@h阿尔沙文,你试过每个人而不是计数吗?
resource "openstack_compute_instance_v2" "instance" {
count = local.list_sum
image_name = element(local.expanded_image_names, count.index +1 ) # <-----
... # Do similar for the others.
key_pair = "foptst"
network {
name = var.network_name
}
}