Alo*_*ath 5 terraform terraform-provider-github
我的问题陈述很简单,但我无法在互联网上的任何地方找到解决方案。
\n我的用户列表如下locals:
// users\n\nlocals {\n allUsers = {\n\n dev_user_1 = {\n Name = "user1"\n Email = "user1@abc.com"\n GitHub = "user1" # github username\n Team = "Dev"\n }\n\n devops_user_2 = {\n Name = "user2"\n Email = "user2@abc.com"\n GitHub = "user2" # github username\n Team = "DevOps"\n }\n\n product_user_3 = {\n Name = "user3"\n Email = "user3@abc.com"\n Team = "Product"\n }\n }\n}\n\nRun Code Online (Sandbox Code Playgroud)\n这些local标签用于创建对内部工具(例如 Github、监控工具等)的访问。
现在,对于属于Dev和DevOps团队的 2 个用户,他们需要访问 Github ORG,而产品用户只需要访问一些仪表板,但不需要访问 Github,因此,标签丢失。
我如何循环 terraform 资源github_membership以跳过此产品用户(或只是任何没有标签keyGitHub 的人?)
我正在尝试以下代码,但没有运气
\n// Send GitHub invite\nresource "github_membership" "xyzTeam" {\n for_each = local.allUsers\n username = each.value.GitHub\n role = "member"\n}\n\nRun Code Online (Sandbox Code Playgroud)\n错误:
\n\xe2\x95\xb7\n\xe2\x94\x82 Error: Unsupported attribute\n\xe2\x94\x82\n\xe2\x94\x82 on users.tf line 12, in resource "github_membership" "xyzTeam":\n\xe2\x94\x82 12: username = each.value.GitHub\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n\xe2\x94\x82 \xe2\x94\x82 each.value is object with 3 attributes\n\xe2\x94\x82\n\xe2\x94\x82 This object does not have an attribute named "GitHub".\nRun Code Online (Sandbox Code Playgroud)\nkey,但它value就像null。\n错误:\xe2\x95\xb7\n\xe2\x94\x82 Error: "username": required field is not set\n\xe2\x94\x82\n\xe2\x94\x82 with github_membership.xyzTeam["user3"],\n\xe2\x94\x82 on users.tf line 10, in resource "github_membership" "xyzTeam":\n\xe2\x94\x82 10: resource "github_membership" "devops" {\n\xe2\x94\x82\n\xe2\x95\xb5\nRun Code Online (Sandbox Code Playgroud)\nError: PATCH https://api.github.com/user/memberships/orgs/XYZ: 422 You can only update an organization membership\'s state to \'active\'. []\nRun Code Online (Sandbox Code Playgroud)\nfor k, v in local.allUsers : k => v if v != ""\n同样的错误,因为它仍然尝试创建具有空值的用户,并最终失败。我想不出别的什么了。如果有人可以帮助创建locals与这些现有的分离的,这会创建该 grep值locals的列表,那么该 hack 将非常有帮助。localsGitHub
您的第三次尝试的想法是正确的,但 for 表达式中的条件逻辑略有偏差。您需要改用该can函数:
{ for user, attributes in local.allUsers : user => attributes if can(attributes.GitHub) }
Run Code Online (Sandbox Code Playgroud)
如果嵌套映射包含Github键,则can(attributes.Github)返回true,并且映射构造函数将包含键值对。Github使用此算法,您可以从旧映射构造一个新映射,并删除嵌套映射值中不包含键的条目。
| 归档时间: |
|
| 查看次数: |
5480 次 |
| 最近记录: |