Terraform 使用for_each填写列表参数
我正在尝试向Terraform 使用for_each填写列表参数,terraform,hcl,Terraform,Hcl,我正在尝试向google\u monitoring\u metric\u descriptor上的标签和元数据子块添加条目。我很难在每个度量描述符的结构图以及标签和元数据的内部集合上为每个循环。它似乎不接受块内每个的内部,并且尝试用=分配给它似乎也不起作用 locals { metrics = { gsuite_user_count = { name = "projects/my-gcp-project-123/metricDescriptors/custom
google\u monitoring\u metric\u descriptor
上的标签和元数据子块添加条目。我很难在每个度量描述符的结构图以及标签
和元数据
的内部集合上为每个
循环。它似乎不接受块内每个
的内部,并且尝试用=
分配给它似乎也不起作用
locals {
metrics = {
gsuite_user_count = {
name = "projects/my-gcp-project-123/metricDescriptors/custom.googleapis.com/gsuite_user_count",
labels = [
{
key = "gsuite_domain"
},
{
key = "opencensus_task",
description = "Opencensus task identifier"
}
],
metricKind = "GAUGE",
valueType = "INT64",
unit = "1",
description = "Number of users in GSuite Directory.",
displayName = "custom.googleapis.com/gsuite_user_count",
type = "custom.googleapis.com/gsuite_user_count"
}
}
}
resource "google_monitoring_metric_descriptor" "basic" {
provider = google-beta
for_each = local.metrics
description = lookup(each.value, "description")
display_name = each.value.displayName
# How do I do this?
labels = [for label in each.value.labels : {
key = label.key
value = label.value
}]
// launch_stage = each.value.launchStage
// metadata = each.value.metadata
metric_kind = each.value.metricKind
type = each.value.type
unit = each.value.unit
value_type = each.value.valueType
project = var.project_id
}
这会导致terraform apply上出现此错误:
Error: Unsupported argument
on /Users/jaycarlton/repos/workbench/ops/terraform/modules/workbench/modules/monitoring/modules/metrics/main.tf line 32, in resource "google_monitoring_metric_descriptor" "basic":
32: labels = [for label in each.value.labels : {
An argument named "labels" is not expected here. Did you mean to define a
block of type "labels"?
可以使用迭代方式设置标签。可能是这样的:
dynamic "labels" {
for_each = each.value.labels
content {
key = labels.key
value = labels.value
}
}
错误消息表明您正在将标签
指定为参数而不是块。在继续添加iteration.Yep之前,您需要先解决这个问题。在找到这一个之前,我经历了很多错误。这是有道理的。一次是否只有一个和一个?@JayCarlton不确定你的意思是什么?我感觉接下来的问题是关于动态块中的迭代器变量。名称each
始终是each的主资源的迭代器;每个动态块都有自己的迭代器变量(默认情况下)以块类型命名,这就是为什么labels.key
和labels.value
在块内是相关的。@MartinAtkins说得很好。迭代器总是被命名为each
,除非它不是。如果我在这里潜得太深之前先学会了基本知识,这可能会更自然。