【问题标题】:How do I turn a block Map of Maps into a variable in Terraform如何将地图的块地图转换为 Terraform 中的变量
【发布时间】:2021-07-20 04:36:35
【问题描述】:

我正在使用 terraform-aws-eks 模块来部署 EKS 集群。我希望得到一些帮助,将地图的 node_groups 地图转换为变量,以便我可以针对不同的环境修改变量文件。这是地图地图:

node_groups = {
    example = {
      desired_capacity = 1
      max_capacity     = 10
      min_capacity     = 1

      instance_types = ["m5.large"]
      capacity_type  = "ON_DEMAND"
      k8s_labels = {
        Environment = "test"
        GithubRepo  = "terraform-aws-eks"
        GithubOrg   = "terraform-aws-modules"
      }
      additional_tags = {
        ExtraTag = "example"
      }
    }
  }

我希望能够引用一个变量而不是 main.tf 中的映射,例如

node_groups = var.node_groups

我正在努力处理 variables.tf 中列表(对象)的各个级别。提前感谢您的帮助。

【问题讨论】:

  • “我正在苦苦挣扎”并不具体。您究竟尝试了什么,遇到了什么错误?

标签: variables terraform terraform-provider-aws


【解决方案1】:

我想您是在问对于接受这样的数据结构的变量,什么可能是合适的 type constraint。如果是这样,这是一个尝试:

  type = map(object({
    desired_capacity = number
    max_capacity     = number
    min_capacity     = number

    instance_types  = set(string)
    capacity_type   = string
    k8s_labels      = map(string)
    additional_tags = map(string)
  }))

我在这里猜测了你的意图:

  • 我将instance_types 设置为一组字符串而不是字符串列表,因为通常没有对实例类型进行有意义的排序,并且集合是无序集合的合适数据结构。但是,如果确实打算使用设置实例类型的顺序,则可以将其更改为 list(string)
  • 对于k8s_labelsadditional_tags,它们似乎只是调用者选择的任意键/值对,而不是您的模块指定的特定数据结构,因此我将它们限制为map(string),而不是作为覆盖您在示例中显示的确切属性名称的特定对象类型。如果您打算在k8s_labels 中准确要求EnvironmentGithubRepoGithubOrg 属性,而不是让调用者决定,那么您可以将其更改为对象类型而不是映射类型。

【讨论】:

    猜你喜欢
    • 2021-12-09
    • 2022-01-25
    • 1970-01-01
    • 2019-06-09
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    相关资源
    最近更新 更多