Terraform 变量定义
Terraform variable definition
我想创建一个部署输入并基于该变量驱动我的部署。
这是一个示例部署输入,
deployments = {
dev-1 = {
dev-api-us = {
hosts = ["dev-api-us.lm.com", "dev-api-us.lm1.com"]
}
region = "us-east1"
}
dev-2 = {
dev-api-uk = {
hosts = ["dev-api-uk.lm.com", "dev-api-uk.lm1.com"]
}
region = "europe-west2"
}
}
如果输入有效,那么相应的变量定义是什么样的?
我试过了,但它说语法不正确
variable "deployments" {
description = "A map of deployment"
type = map(map(object({
hosts = list(string)
})
region = string
))
}
感谢任何帮助。
这个数据结构有点混乱,因为第二层似乎是预定义属性 (region
) 和任意映射键(如 dev-api-us
和 dev-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 语言没有任何允许将映射和对象行为合并为单个值的类型约束。
我想创建一个部署输入并基于该变量驱动我的部署。 这是一个示例部署输入,
deployments = { dev-1 = { dev-api-us = { hosts = ["dev-api-us.lm.com", "dev-api-us.lm1.com"] } region = "us-east1" } dev-2 = { dev-api-uk = { hosts = ["dev-api-uk.lm.com", "dev-api-uk.lm1.com"] } region = "europe-west2" } }
如果输入有效,那么相应的变量定义是什么样的?
我试过了,但它说语法不正确
variable "deployments" { description = "A map of deployment" type = map(map(object({ hosts = list(string) }) region = string )) }
感谢任何帮助。
这个数据结构有点混乱,因为第二层似乎是预定义属性 (region
) 和任意映射键(如 dev-api-us
和 dev-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 语言没有任何允许将映射和对象行为合并为单个值的类型约束。