此默认值与变量的类型约束不兼容:元素“tags”:需要字符串

2 terraform terraform-provider-gcp

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

\n
variable worker {\n    type        = map(string)\n    default     = {\n        worker_count = 2\n        name         = "k3s-master"\n        machine_type = "n1-standard-1"\n        tags         = ["k3s", "k3s-master"]\n        zone         = "us-central1-a"\n\n\n        boot_disk = {\n            initialize_params = {\n            image = "debian-9-stretch-v20200805"\n            }\n        }\n\n        network_interface = {\n            network = "default"\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Jor*_*dan 5

@MarkoE 在评论中的答案很接近,但不太正确。Terraform 的map类型是一个“集合”,并且根据Terraform 的文档,“集合的所有元素必须始终具有相同的类型”。

由于您的变量对于不同的字段具有不同的类型(例如worker_countis a number,但是tagsis 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 = ...
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,感谢您的扩展,您的答案确实是正确的方法。:) (2认同)