Terraform 地形变量定义

Terraform 地形变量定义,terraform,terraform0.12+,Terraform,Terraform0.12+,我想创建一个部署输入,并基于该变量驱动我的部署。 下面是一个部署输入示例 这是一个有效的输入吗?如果是的话,相应的变量定义会是什么样子 我试过了,但它说语法不对 感谢您的帮助。此数据结构有点混乱,因为第二级似乎是预定义属性(区域)和任意映射键(如开发api us和开发api uk)的混合体 我认为最好的方法是改变这个结构,使第二层的地图与它所嵌入的对象分开。您在问题中没有提到一个名词来指代dev-api-us和dev-api-uk都是示例,因此我将它们称为“主机前缀”,以便有东西可以调用它们:

我想创建一个部署输入,并基于该变量驱动我的部署。 下面是一个部署输入示例

这是一个有效的输入吗?如果是的话,相应的变量定义会是什么样子

我试过了,但它说语法不对


感谢您的帮助。

此数据结构有点混乱,因为第二级似乎是预定义属性(
区域
)和任意映射键(如
开发api us
开发api uk
)的混合体

我认为最好的方法是改变这个结构,使第二层的地图与它所嵌入的对象分开。您在问题中没有提到一个名词来指代
dev-api-us
dev-api-uk
都是示例,因此我将它们称为“主机前缀”,以便有东西可以调用它们:

{
  dev-1 = {
    host_prefixes = {
      dev-api-us = {
        hosts = ["dev-api-us.lm.com", "dev-api-us.lm1.com"]
      }
    }
    region = "us-east1"
  }
  dev-2 = {
    host_prefixes = {
      dev-api-uk = {
        hosts = ["dev-api-uk.lm.com", "dev-api-uk.lm1.com"]
      }
    }
    region = "europe-west2"
  }
}
此调整数据结构的合适类型约束可以是:

variable "deployments" {
  type = map(object({
    host_prefixes = map(object({
      hosts = set(string)
    }))
    region = string
  }))
}
这种改变的结构在Terraform的类型系统中起作用,因为它将对象类型的部分与地图类型的部分分开。Terraform语言没有任何类型约束,允许将贴图和对象行为组合为单个值

{
  dev-1 = {
    host_prefixes = {
      dev-api-us = {
        hosts = ["dev-api-us.lm.com", "dev-api-us.lm1.com"]
      }
    }
    region = "us-east1"
  }
  dev-2 = {
    host_prefixes = {
      dev-api-uk = {
        hosts = ["dev-api-uk.lm.com", "dev-api-uk.lm1.com"]
      }
    }
    region = "europe-west2"
  }
}
variable "deployments" {
  type = map(object({
    host_prefixes = map(object({
      hosts = set(string)
    }))
    region = string
  }))
}