首页 > 解决方案 > 如何在 google_logging_metric 资源中使用格式函数

问题描述

我的要求是可变 cluster_name 和命名空间,并在 google_logging_metric 资源中使用

我的 tfvars 文件:

log_based_metrics = [
  {
    name = "name1",
    filter = "resource.type=\"k8s_pod\"\njsonPayload.kind=\"Event\"\nresource.labels.cluster_name=\"%s\"\njsonPayload.message:\"something\"\njsonPayload.involvedObject.namespace=\"%s\"",   << here I used %s for cluster name and namespace within filter>>
    metric_kind = "DELTA",
    value_type = "INT64"
  }
]

我的资源文件:

    resource "google_logging_metric" "logging_metric" {
      for_each = { for inst in var.log_based_metrics : inst.name => inst }
      name = each.value.name
      filter = "${format("${each.value.filter}",var.cluster_name,var.namespace)}"      
 *<< here when I am using each.value.filter inside format ,it is giving error , instead if I am replacing it with actual value from tfvars file it is not giving any error >>*    
      metric_descriptor {
        metric_kind = each.value.metric_kind
        value_type = each.value.value_type
        dynamic "labels" {
          for_each = each.value.labels
          content {
            key = labels.value["label_key"]
            value_type = labels.value["label_value_type"]
            description = labels.value["label_description"]
          }
        }
Error: Invalid function argument

  on log_based_metrics.tf line 4, in resource "google_logging_metric" "logging_metric":
   4:   filter = "${format("${each.value.filter}",var.cluster_name,var.namespace)}"
    |----------------
    | var.cluster_name is "cluster-5"

Invalid value for "args" parameter: too many arguments; no verbs in format
string.

当我在 "resource.type="k8s_pod"\njsonPayload.kind="Event"\nresource.labels.cluster_name="%s"\njsonPayload.message:"something"\ 的格式中使用each.value.filter的值时njsonPayload.involvedObject.namespace="%s" 它没有给出任何错误 如何在格式函数中使用 tfvars 文件中的变量?

标签: terraform

解决方案


我认为应该是:

 filter = format(each.value.filter,var.cluster_name,var.namespace)      

所以基本上就像你在原来的问题中所说的那样。


推荐阅读