【问题标题】:Data module terraform - How to use conditioanl block数据模块 terraform - 如何使用条件块
【发布时间】:2022-07-30 00:48:01
【问题描述】:

我有一个数据模块,我正在其中创建 \"aws_iam_policy_document\" \"trust-policy,并且只想为某些模块添加条件,而不是全部。

例如:

data \"aws_iam_policy_document\" \"trust-policy\" {
  statement {
    actions = [var.action]

    principals {
      type        = var.type
      identifiers = concat(var.trusted_arns)
    }
    count        = var.git ? 1 : 0
    condition {
      test     = \"StringEquals\"
      variable = \"abc\"
      values   = [\"sts.amazonaws.com\"]
    }
    condition {
      test     = \"StringLike\"
      variable = \"dcf\"
      values   = [\"repo:var.org_name/var.repo_name:ref:refs/heads/var.branch_name\"]
    }

  }
}

我只想在模块是 git 时运行条件块。但是使用 count ,它会失败并出现以下错误:

 An argument named \"count\" is not expected here.

标签: terraform amazon-iam terraform-provider-aws


【解决方案1】:

您可以使用 dynamic 块。例如,像这样声明一个新变量trust_policy_conditions

variable "trust_policy_conditions" {
  description = "A list of trust policy conditions"
  type = list(object({
    test     = string
    variable = string
    values   = list(string)
  }))
  default = []
}

然后将动态块添加到数据源:

data "aws_iam_policy_document" "trust-policy" {
  statement {
    actions = [var.action]

    principals {
      type        = var.type
      identifiers = concat(var.trusted_arns)
    }

    dynamic "condition" {
      for_each = var.git == true ? { for index, policy in var.trust_policy_conditions : index => policy } : {}
      content {
        test     = condition.value.test
        variable = condition.value.variable
        values   = condition.value.values
      }
    }
  }
}

请注意,索引是关键,因为可能存在多个条件共享相同测试或变量属性的情况。

【讨论】:

  • 我声明了这个变量并添加了 dynamc 条件块,但它没有在 IAM 角色中创建条件,即使我的 var.git == true
  • 您是否设置了变量trust_policy_conditions?在示例中,我将默认设置为空列表
  • 这是 git 字符串值的问题,它起作用了。谢谢!
猜你喜欢
  • 2023-01-30
  • 1970-01-01
  • 2023-02-14
  • 2021-12-30
  • 2021-05-15
  • 2021-06-24
  • 1970-01-01
  • 2020-07-16
  • 2021-06-26
相关资源
最近更新 更多