gpt4 book ai didi

terraform - 如果 terraform 中不存在键,如何跳过 for_each 循环

转载 作者:行者123 更新时间:2023-12-05 04:29:46 24 4
gpt4 key购买 nike

我的问题陈述很简单,但我无法在互联网上的任何地方找到解决方案。

我将用户列为 locals:

// users

locals {
allUsers = {

dev_user_1 = {
Name = "user1"
Email = "user1@abc.com"
GitHub = "user1" # github username
Team = "Dev"
}

devops_user_2 = {
Name = "user2"
Email = "user2@abc.com"
GitHub = "user2" # github username
Team = "DevOps"
}

product_user_3 = {
Name = "user3"
Email = "user3@abc.com"
Team = "Product"
}
}
}

这些是 local 标签,用于创建对 Github、监控工具等内部工具的访问。

现在,对于属于 DevDevOps 团队的 2 个用户,他们需要访问 Github ORG,而产品用户只需要访问一些仪表板但不是 Github,因此,标签丢失了。

我如何遍历 terraform 资源 github_membership 以跳过此产品用户(或者只是没有标签 key GitHub 的任何人?)

我正在尝试以下代码,但没有成功

// Send GitHub invite
resource "github_membership" "xyzTeam" {
for_each = local.allUsers
username = each.value.GitHub
role = "member"
}

错误:


│ Error: Unsupported attribute

│ on users.tf line 12, in resource "github_membership" "xyzTeam":
│ 12: username = each.value.GitHub
│ ├────────────────
│ │ each.value is object with 3 attributes

│ This object does not have an attribute named "GitHub".

我做了什么来解决这个问题?

  1. 为每个人设置 GitHub key 但它的 valuenull。错误:

│ Error: "username": required field is not set

│ with github_membership.xyzTeam["user3"],
│ on users.tf line 10, in resource "github_membership" "xyzTeam":
│ 10: resource "github_membership" "devops" {


  1. 如果我将该值留空,则错误:
Error: PATCH https://api.github.com/user/memberships/orgs/XYZ: 422 You can only update an organization membership's state to 'active'. []
  1. 对于 local.allUsers 中的 k, v : k => v if v != ""同样的错误,因为它仍然试图创建具有空值的用户,但最终失败了。

我想不出别的了。如果有人可以帮助从这些现有的 locals 中创建单独的 locals,这将创建 locals 的列表,grep GitHub 值(value)观,那个 hack 会非常有帮助。

最佳答案

您第三次尝试的想法是正确的,但 for 表达式中的条件逻辑略有偏差。您需要改用 can 函数:

{ for user, attributes in local.allUsers : user => attributes if can(attributes.GitHub) }

如果嵌套 map 包含Github键,则can(attributes.Github)返回true, map 构造函数将包含键值对。使用此算法,您可以从旧 map 构建新 map ,并删除嵌套 map 值中不包含 Github 键的条目。

关于terraform - 如果 terraform 中不存在键,如何跳过 for_each 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72233803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com