首页 > 解决方案 > 此默认值与变量的类型约束不兼容:元素“标签”:需要字符串

问题描述

我正在尝试添加类型但它没有拾取它boot_disk如果我将类型创建为对象,我很困惑如何给出和'network_interface'类型。错误 :│ This default value is not compatible with the variable's type constraint: element "tags": string required.

variable worker {
    type        = map(string)
    default     = {
        worker_count = 2
        name         = "k3s-master"
        machine_type = "n1-standard-1"
        tags         = ["k3s", "k3s-master"]
        zone         = "us-central1-a"


        boot_disk = {
            initialize_params = {
            image = "debian-9-stretch-v20200805"
            }
        }

        network_interface = {
            network = "default"
        }
    }
}

标签: terraformterraform-provider-gcp

解决方案


@MarkoE 在评论中的回答很接近,但并不完全正确。Terraform 的map类型是“集合”,根据Terraform 的文档,“集合的所有元素必须始终属于同一类型。”

由于您的变量对于不同的字段具有不同的类型(例如worker_count是 a number,但是tags是 a list(string)),map(any)因此将不起作用。

由于看起来您想要严格键入变量,因此您可能想要的是object类型。在您的情况下,它看起来像这样:

variable "worker" {
    type = object({
      worker_count = number
      name         = string
      machine_type = string
      tags         = list(string)
      zone         = string
      boot_disk    = object({
        initialize_params = object({
          image = string
        })
      })
      network_interface = object({
        network = string
      })
    })

    default = ...
}

推荐阅读