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
}))
}