首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform变量定义

Terraform变量定义
EN

Stack Overflow用户
提问于 2021-04-28 22:27:00
回答 1查看 56关注 0票数 1

我想创建一个部署输入,并基于这个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)}

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-29 00:13:08

这种数据结构有点混乱,因为第二级似乎是预定义属性(region)和任意映射键(如dev-api-usdev-api-uk)的混合。

我认为在这里进行的最好的方法是改变这个结构,使第二级映射与嵌入的对象是分开的。在你的问题中,你没有提到一个名词来指dev-api-usdev-api-uk,所以我只想称它们为“主机前缀”,以便有什么东西来称呼它们:

代码语言:javascript
复制
{
  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"
  }
}

这种调整后的数据结构的适当类型约束可以是:

代码语言:javascript
复制
variable "deployments" {
  type = map(object({
    host_prefixes = map(object({
      hosts = set(string)
    }))
    region = string
  }))
}

这种改变的结构可以在Terraform的类型系统中工作,因为它将对象类型的部件与映射类型的部件分开。Terraform语言没有允许将映射和对象行为组合为单个值的任何类型约束。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67308699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档