我想创建一个部署输入,并基于这个var驱动我的部署。下面是一个部署输入示例,
部署={ dev-api-us ={dev-api-us.lm.com,"dev-api-us.lm1.com“} hosts =”us-east1 1“} dev-2 ={ dev-api-uk ={dev-api-uk.lm.com,"dev-api-uk.lm1.com“}europe= "europe-west2”}
这是一个有效的输入吗?如果是的话,对应的变量定义会是什么样子?
我试过了,但它说语法不对
变量“部署”{ description =“一个部署映射”类型= map (map({host= list( string ) }) region =string)}
任何帮助都是非常感谢的。
发布于 2021-04-29 00:13:08
这种数据结构有点混乱,因为第二级似乎是预定义属性(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语言没有允许将映射和对象行为组合为单个值的任何类型约束。
https://stackoverflow.com/questions/67308699
复制相似问题