首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >地形动态内部动态

地形动态内部动态
EN

Stack Overflow用户
提问于 2020-07-16 12:18:39
回答 2查看 3.6K关注 0票数 0

这样的想法是产生这样的东西:

代码语言:javascript
复制
  environment {
    ...

    environment_variable {
      ...
    }

    environment_variable {
      ...
    }
  }

其中有一个具有某些属性的环境块和0.n个具有某些属性的environment_variables。

我有以下模块,它使用动态内部的动态。这个是可能的吗?或者我该如何做到这一点?

到目前为止,我拥有的是以下模块,它使用动态内部的动态:

模块:

代码语言:javascript
复制
dynamic "environment" {
  for_each = var.environment_definition

  content {
    field1 = environment.value.field1
    field2 = environment.value.field2

    dynamic "environment_variable" {
      for_each = length(var.environment_variables) == 0 ? [] : [var.environment_variables]

      content {
        name  = environment_variable.value.env_name
        value = environment_variable.value.env_value
      }
    }
  }
}

variables.tf:

代码语言:javascript
复制
variable "environment_definition" {
  description = ""
  type = any
  default = {}
}

variable "environment_variables" {
  description = ""
  type = map(object({
    env_name  = string
    env_value = string
  }))
  default = {}
}

上面的模块及其变量在我的main.tf中被调用:

代码语言:javascript
复制
  environment_definition = {
    field1                = "value"
    field2                = "value"
  }

  environment_variables = {
    tf_version = {
      env_name  = "TERRAFORM_VERSION"
      env_value = "0.12.28"
    },
    aws_account = {
      env_name  = "AWS_ACCOUNT"
      env_value = "Account123456"
    },
    environment = {
      env_name  = "ENVIRONMENT"
      env_value = "dev"
    }
  }

但是,我得到了这个错误:

代码语言:javascript
复制
Error: Missing map element

  on ../../../modules/codebuild/main.tf line 123, in resource "aws_codebuild_project" "this":
 152:           value = environment_variable.value.env_value
    |----------------
    | environment_variable.value is map of object with 3 elements

This map does not have an element with the key "env_value".

我怎样才能成功地实现这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-16 13:04:33

问题是,您调用根变量而不是each.value

代码语言:javascript
复制
content {
        name  = environment_variable.value.env_name
        value = environment_variable.value.env_value
      }

问题是,您将映射放在一个数组中,如下所示:

代码语言:javascript
复制
  for_each = length(var.environment_variables) == 0 ? [] : 
   [var.environment_variables]

因此,现在您正在处理一组表示第一个元素的映射。

键=0和值= tf_version ={ env_name = "TERRAFORM_VERSION“env_value = "0.12.28”}

您的代码应该是:

代码语言:javascript
复制
dynamic "environment_variable" {
      #solution1
      for_each = var.environment_variable
      #solution 2 am not sure this works but so you get the prob
     for_each = length(var.environment_variables) == 0 ? {} : 
   var.environment_variables
      content {
        name  = environment_variable.value.env_name
        value = environment_variable.value.env_value
      }
    }

而且你也应该尝试更改动态名称--这更好

代码语言:javascript
复制
content {
        name  = <dynamic_name>.value.env_name
        value = <dynamic_name>.value.env_value
      }

https://www.hashicorp.com/blog/hashicorp-terraform-0-12-preview-for-and-for-each/

票数 2
EN

Stack Overflow用户

发布于 2020-07-16 12:45:14

你试过这个吗?既然你有地图,我想你应该用keyvalue代替。

代码语言:javascript
复制
dynamic "environment" {
  for_each = var.environment_definition

  content {
    field1 = environment.value.field1
    field2 = environment.value.field2

    dynamic "environment_variable" {
      for_each = length(var.environment_variables) == 0 ? [] : [var.environment_variables]

      content {
        name  = environment_variable.key
        value = environment_variable.value
      }
    }
  }
}

下面的示例摘自Terraform的博客,并认为它描述了您想要做的事情:

代码语言:javascript
复制
# Configuration for Terraform 0.12

locals {
  standard_tags = {
    Component   = "user-service"
    Environment = "production"
  }
}

resource "aws_autoscaling_group" "example" {
  # ...

  tag {
    key                 = "Name"
    value               = "example-asg-name"
    propagate_at_launch = false
  }

  dynamic "tag" {
    for_each = local.standard_tags

    content {
      key                 = tag.key
      value               = tag.value
      propagate_at_launch = true
    }
  }
}

参考资料:https://www.hashicorp.com/blog/hashicorp-terraform-0-12-preview-for-and-for-each/

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

https://stackoverflow.com/questions/62934524

复制
相关文章

相似问题

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