使用模块和计数时如何在 terraform 中包含标签
Posted
技术标签:
【中文标题】使用模块和计数时如何在 terraform 中包含标签【英文标题】:How to include tags in terraform when using modules and count 【发布时间】:2022-01-03 16:20:10 【问题描述】:我必须使用模块配置许多实例并计入其中。问题是,某些特定实例所需的标签必须不同。任何人都可以建议一种更好的方法,可以将标签与所有实例的默认标签一起添加。我使用的是一张所有 30 次出现的地图,很长。
默认标签:tag1,tag2
示例案例:
instance1......instance15 - tag1,tag2
instance16 - tag1,tag2,tag_xxx
instance17......instance29 - tag1,tag2.
instance30 - tag1,tag2,tag_yyy
地形代码:
module "compute-vm"
count = length(var.names)
source = "../modules/compute-vm"
project_id = var.project_id
name = var.name[count.index]
tags = var.tags[var.names[count.index]]
variable "tags"
type = map(list(string))
tags.tfvars:
tags=
"instance1" = ["tag1","tag2"],
"instance2"=["tag1","tag2"],
"instance3" = ["tag1","tag2"],
.
.
.
.
"instance16"=["tag1","tag2",tag_xxx]
【问题讨论】:
【参考方案1】:您可以使用concat 连接两个列表。 大致如下:
variable "default_tags"
type = list(string)
module "compute-vm"
...
tags = concat(var.default_tags, var.tags[var.names[count.index]])
另外,我会使用for_each 而不是count
。这使得块更容易阅读。此外,您稍后可以通过module.compute-vm["instance1"]
引用该块,而不必使用索引module.compute-vm[0]
。因为谁知道第一个虚拟机是否真的是"instance1"
(也许 Terraform 会改变地图内的顺序)。
module "compute-vm"
for_each = var.tags
source = "../modules/compute-vm"
project_id = var.project_id
name = each.key
tags = each.value // or concat(var.default_tags, each.value)
【讨论】:
以上是关于使用模块和计数时如何在 terraform 中包含标签的主要内容,如果未能解决你的问题,请参考以下文章