如何通过mrparkers/keycloak Provider从组名获取Keycloak组ID
解决Terraform中Keycloak组UUID获取问题
我使用Terraform的mrparkers/keycloak Provider配置Keycloak用户,已成功创建用户'hellfire'和组'mrpc-admins',但在使用keycloak_group_memberships资源时,group_id字段需要Keycloak生成的组UUID而非组名,特此寻求解决方法。
现有变量定义
variable "mrpc-groups" { type = map(object({ name = string realm = string })) default = { "10001" = { name = "mrpc-admins" realm = "mrpc" } } } variable "mrpc-users" { type = map(object({ username = string email = string first_name = string last_name = string realm = string group = string })) default = { "10001" = { username = "hellfire" email = "bla@bla.bla" first_name = "hell" last_name = "fire" realm = "mrpc" group = "mrpc-admins" } } }
现有资源定义
resource "keycloak_realm" "realm" { realm = "mrpc" } resource "keycloak_group" "group" { for_each = var.mrpc-groups realm_id = keycloak_realm.realm.id name = each.value["name"] } resource "keycloak_user" "user" { for_each = var.mrpc-users realm_id = each.value["realm"] username = each.value["username"] email = each.value["email"] first_name = each.value["first_name"] last_name = each.value["last_name"] }
修正后的keycloak_group_memberships资源
你需要通过Terraform内置表达式,从已创建的keycloak_group资源中匹配组名获取UUID,同时注意members字段需要传入用户UUID而非用户名:
resource "keycloak_group_memberships" "group_members" { for_each = var.mrpc-users realm_id = each.value["realm"] # 通过组名匹配对应的group资源,获取其UUID group_id = [for g in keycloak_group.group : g.id if g.name == each.value.group][0] # 使用用户资源的id作为members值 members = [keycloak_user.user[each.key].id] }
说明
- 获取组UUID:使用
for表达式遍历所有keycloak_group.group实例,筛选出名称与用户指定组名匹配的实例,取其id(即Keycloak生成的UUID)。 - 修正用户成员值:
keycloak_group_memberships的members字段要求传入用户UUID,而非用户名,因此直接引用keycloak_user.user[each.key].id即可。
内容的提问来源于stack exchange,提问作者martincarpenter
相关产品推荐
相关产品推荐

