Viewing docs for Keycloak v6.13.0
published on Saturday, Aug 1, 2026 by Pulumi
published on Saturday, Aug 1, 2026 by Pulumi
Viewing docs for Keycloak v6.13.0
published on Saturday, Aug 1, 2026 by Pulumi
published on Saturday, Aug 1, 2026 by Pulumi
This data source can be used to fetch properties of a Keycloak group for
usage with other resources, such as keycloak.GroupRoles.
Example Usage
import * as pulumi from "@pulumi/pulumi";
import * as keycloak from "@pulumi/keycloak";
const realm = new keycloak.Realm("realm", {
realm: "my-realm",
enabled: true,
});
const offlineAccess = keycloak.getRoleOutput({
realmId: realm.id,
name: "offline_access",
});
const group = keycloak.getGroupOutput({
realmId: realm.id,
name: "group",
});
const groupRoles = new keycloak.GroupRoles("group_roles", {
realmId: realm.id,
groupId: group.apply(group => group.id),
roleIds: [offlineAccess.apply(offlineAccess => offlineAccess.id)],
});
// Using group_path to look up nested groups by their full path
const superAdmin = keycloak.getRoleOutput({
realmId: realm.id,
name: "super_admin",
});
const admins = keycloak.getGroupOutput({
realmId: realm.id,
groupPath: "/Administration/Full Admins",
});
const adminsRoles = new keycloak.GroupRoles("admins_roles", {
realmId: realm.id,
groupId: admins.apply(admins => admins.id),
roleIds: [superAdmin.apply(superAdmin => superAdmin.id)],
});
import pulumi
import pulumi_keycloak as keycloak
realm = keycloak.Realm("realm",
realm="my-realm",
enabled=True)
offline_access = keycloak.get_role_output(realm_id=realm.id,
name="offline_access")
group = keycloak.get_group_output(realm_id=realm.id,
name="group")
group_roles = keycloak.GroupRoles("group_roles",
realm_id=realm.id,
group_id=group.id,
role_ids=[offline_access.id])
# Using group_path to look up nested groups by their full path
super_admin = keycloak.get_role_output(realm_id=realm.id,
name="super_admin")
admins = keycloak.get_group_output(realm_id=realm.id,
group_path="/Administration/Full Admins")
admins_roles = keycloak.GroupRoles("admins_roles",
realm_id=realm.id,
group_id=admins.id,
role_ids=[super_admin.id])
package main
import (
"github.com/pulumi/pulumi-keycloak/sdk/v6/go/keycloak"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
realm, err := keycloak.NewRealm(ctx, "realm", &keycloak.RealmArgs{
Realm: pulumi.String("my-realm"),
Enabled: pulumi.Bool(true),
})
if err != nil {
return err
}
offlineAccess := keycloak.GetRoleOutput(ctx, keycloak.GetRoleOutputArgs{
RealmId: realm.ID(),
Name: pulumi.String("offline_access"),
}, nil)
group := keycloak.GetGroupOutput(ctx, keycloak.GetGroupOutputArgs{
RealmId: realm.ID(),
Name: pulumi.String("group"),
}, nil)
_, err = keycloak.NewGroupRoles(ctx, "group_roles", &keycloak.GroupRolesArgs{
RealmId: realm.ID(),
GroupId: pulumi.String(group.ApplyT(func(group keycloak.GetGroupResult) (*string, error) {
return group.Id, nil
}).(pulumi.StringPtrOutput)),
RoleIds: pulumi.StringArray{
pulumi.String(offlineAccess.ApplyT(func(offlineAccess keycloak.GetRoleResult) (*string, error) {
return offlineAccess.Id, nil
}).(pulumi.StringPtrOutput)),
},
})
if err != nil {
return err
}
// Using group_path to look up nested groups by their full path
superAdmin := keycloak.GetRoleOutput(ctx, keycloak.GetRoleOutputArgs{
RealmId: realm.ID(),
Name: pulumi.String("super_admin"),
}, nil)
admins := keycloak.GetGroupOutput(ctx, keycloak.GetGroupOutputArgs{
RealmId: realm.ID(),
GroupPath: pulumi.String("/Administration/Full Admins"),
}, nil)
_, err = keycloak.NewGroupRoles(ctx, "admins_roles", &keycloak.GroupRolesArgs{
RealmId: realm.ID(),
GroupId: pulumi.String(admins.ApplyT(func(admins keycloak.GetGroupResult) (*string, error) {
return admins.Id, nil
}).(pulumi.StringPtrOutput)),
RoleIds: pulumi.StringArray{
pulumi.String(superAdmin.ApplyT(func(superAdmin keycloak.GetRoleResult) (*string, error) {
return superAdmin.Id, nil
}).(pulumi.StringPtrOutput)),
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Keycloak = Pulumi.Keycloak;
return await Deployment.RunAsync(() =>
{
var realm = new Keycloak.Realm("realm", new()
{
RealmName = "my-realm",
Enabled = true,
});
var offlineAccess = Keycloak.GetRole.Invoke(new()
{
RealmId = realm.Id,
Name = "offline_access",
});
var @group = Keycloak.GetGroup.Invoke(new()
{
RealmId = realm.Id,
Name = "group",
});
var groupRoles = new Keycloak.GroupRoles("group_roles", new()
{
RealmId = realm.Id,
GroupId = @group.Apply(@group => @group.Apply(getGroupResult => getGroupResult.Id)),
RoleIds = new[]
{
offlineAccess.Apply(getRoleResult => getRoleResult.Id),
},
});
// Using group_path to look up nested groups by their full path
var superAdmin = Keycloak.GetRole.Invoke(new()
{
RealmId = realm.Id,
Name = "super_admin",
});
var admins = Keycloak.GetGroup.Invoke(new()
{
RealmId = realm.Id,
GroupPath = "/Administration/Full Admins",
});
var adminsRoles = new Keycloak.GroupRoles("admins_roles", new()
{
RealmId = realm.Id,
GroupId = admins.Apply(getGroupResult => getGroupResult.Id),
RoleIds = new[]
{
superAdmin.Apply(getRoleResult => getRoleResult.Id),
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.keycloak.Realm;
import com.pulumi.keycloak.RealmArgs;
import com.pulumi.keycloak.KeycloakFunctions;
import com.pulumi.keycloak.inputs.GetRoleArgs;
import com.pulumi.keycloak.inputs.GetGroupArgs;
import com.pulumi.keycloak.GroupRoles;
import com.pulumi.keycloak.GroupRolesArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var realm = new Realm("realm", RealmArgs.builder()
.realm("my-realm")
.enabled(true)
.build());
final var offlineAccess = KeycloakFunctions.getRole(GetRoleArgs.builder()
.realmId(realm.id())
.name("offline_access")
.build());
final var group = KeycloakFunctions.getGroup(GetGroupArgs.builder()
.realmId(realm.id())
.name("group")
.build());
var groupRoles = new GroupRoles("groupRoles", GroupRolesArgs.builder()
.realmId(realm.id())
.groupId(group.applyValue(_group -> _group.id()))
.roleIds(offlineAccess.applyValue(_offlineAccess -> _offlineAccess.id()))
.build());
// Using group_path to look up nested groups by their full path
final var superAdmin = KeycloakFunctions.getRole(GetRoleArgs.builder()
.realmId(realm.id())
.name("super_admin")
.build());
final var admins = KeycloakFunctions.getGroup(GetGroupArgs.builder()
.realmId(realm.id())
.groupPath("/Administration/Full Admins")
.build());
var adminsRoles = new GroupRoles("adminsRoles", GroupRolesArgs.builder()
.realmId(realm.id())
.groupId(admins.applyValue(_admins -> _admins.id()))
.roleIds(superAdmin.applyValue(_superAdmin -> _superAdmin.id()))
.build());
}
}
resources:
realm:
type: keycloak:Realm
properties:
realm: my-realm
enabled: true
groupRoles:
type: keycloak:GroupRoles
name: group_roles
properties:
realmId: ${realm.id}
groupId: ${group.id}
roleIds:
- ${offlineAccess.id}
adminsRoles:
type: keycloak:GroupRoles
name: admins_roles
properties:
realmId: ${realm.id}
groupId: ${admins.id}
roleIds:
- ${superAdmin.id}
variables:
offlineAccess:
fn::invoke:
function: keycloak:getRole
arguments:
realmId: ${realm.id}
name: offline_access
group:
fn::invoke:
function: keycloak:getGroup
arguments:
realmId: ${realm.id}
name: group
# Using group_path to look up nested groups by their full path
superAdmin:
fn::invoke:
function: keycloak:getRole
arguments:
realmId: ${realm.id}
name: super_admin
admins:
fn::invoke:
function: keycloak:getGroup
arguments:
realmId: ${realm.id}
groupPath: /Administration/Full Admins
pulumi {
required_providers {
keycloak = {
source = "pulumi/keycloak"
}
}
}
data "keycloak_getrole" "offlineAccess" {
realm_id = keycloak_realm.realm.id
name = "offline_access"
}
data "keycloak_getgroup" "group" {
realm_id = keycloak_realm.realm.id
name = "group"
}
data "keycloak_getrole" "superAdmin" {
realm_id = keycloak_realm.realm.id
name = "super_admin"
}
data "keycloak_getgroup" "admins" {
realm_id = keycloak_realm.realm.id
group_path = "/Administration/Full Admins"
}
resource "keycloak_realm" "realm" {
realm = "my-realm"
enabled = true
}
resource "keycloak_grouproles" "group_roles" {
realm_id = keycloak_realm.realm.id
group_id = data.keycloak_getgroup.group.id
role_ids = [data.keycloak_getrole.offlineAccess.id]
}
resource "keycloak_grouproles" "admins_roles" {
realm_id = keycloak_realm.realm.id
group_id = data.keycloak_getgroup.admins.id
role_ids = [data.keycloak_getrole.superAdmin.id]
}
# Using group_path to look up nested groups by their full path
Organization groups can be looked up by setting organizationId. Organization groups require Keycloak 26.6.0 or later.
import * as pulumi from "@pulumi/pulumi";
import * as keycloak from "@pulumi/keycloak";
const organizationGroup = keycloak.getGroup({
realmId: realm.id,
organizationId: organization.id,
name: "organization-group",
});
import pulumi
import pulumi_keycloak as keycloak
organization_group = keycloak.get_group(realm_id=realm["id"],
organization_id=organization["id"],
name="organization-group")
package main
import (
"github.com/pulumi/pulumi-keycloak/sdk/v6/go/keycloak"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := keycloak.GetGroup(ctx, &keycloak.LookupGroupArgs{
RealmId: realm.Id,
OrganizationId: pulumi.StringRef(organization.Id),
Name: pulumi.StringRef("organization-group"),
}, nil)
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Keycloak = Pulumi.Keycloak;
return await Deployment.RunAsync(() =>
{
var organizationGroup = Keycloak.GetGroup.Invoke(new()
{
RealmId = realm.Id,
OrganizationId = organization.Id,
Name = "organization-group",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.keycloak.KeycloakFunctions;
import com.pulumi.keycloak.inputs.GetGroupArgs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var organizationGroup = KeycloakFunctions.getGroup(GetGroupArgs.builder()
.realmId(realm.id())
.organizationId(organization.id())
.name("organization-group")
.build());
}
}
variables:
organizationGroup:
fn::invoke:
function: keycloak:getGroup
arguments:
realmId: ${realm.id}
organizationId: ${organization.id}
name: organization-group
pulumi {
required_providers {
keycloak = {
source = "pulumi/keycloak"
}
}
}
data "keycloak_getgroup" "organizationGroup" {
realm_id = realm.id
organization_id = organization.id
name = "organization-group"
}
Using getGroup
Two invocation forms are available. The direct form accepts plain arguments and either blocks until the result value is available, or returns a Promise-wrapped result. The output form accepts Input-wrapped arguments and returns an Output-wrapped result.
function getGroup(args: GetGroupArgs, opts?: InvokeOptions): Promise<GetGroupResult>
function getGroupOutput(args: GetGroupOutputArgs, opts?: InvokeOutputOptions): Output<GetGroupResult>def get_group(description: Optional[str] = None,
group_path: Optional[str] = None,
name: Optional[str] = None,
organization_id: Optional[str] = None,
realm_id: Optional[str] = None,
opts: Optional[InvokeOptions] = None) -> GetGroupResult
def get_group_output(description: pulumi.Input[Optional[str]] = None,
group_path: pulumi.Input[Optional[str]] = None,
name: pulumi.Input[Optional[str]] = None,
organization_id: pulumi.Input[Optional[str]] = None,
realm_id: pulumi.Input[Optional[str]] = None,
opts: Optional[InvokeOutputOptions] = None) -> Output[GetGroupResult]func LookupGroup(ctx *Context, args *LookupGroupArgs, opts ...InvokeOption) (*LookupGroupResult, error)
func LookupGroupOutput(ctx *Context, args *LookupGroupOutputArgs, opts ...InvokeOption) LookupGroupResultOutput> Note: This function is named LookupGroup in the Go SDK.
public static class GetGroup
{
public static Task<GetGroupResult> InvokeAsync(GetGroupArgs args, InvokeOptions? opts = null)
public static Output<GetGroupResult> Invoke(GetGroupInvokeArgs args, InvokeOptions? opts = null)
public static Output<GetGroupResult> Invoke(GetGroupInvokeArgs args, InvokeOutputOptions opts)
}public static CompletableFuture<GetGroupResult> getGroup(GetGroupArgs args, InvokeOptions options)
public static Output<GetGroupResult> getGroup(GetGroupArgs args, InvokeOptions options)
public static Output<GetGroupResult> getGroup(GetGroupArgs args, InvokeOutputOptions options)
fn::invoke:
function: keycloak:index/getGroup:getGroup
arguments:
# arguments dictionarydata "keycloak_get_group" "name" {
# arguments
}The following arguments are supported:
- Realm
Id string - The realm this group exists within.
- Description string
- Group
Path string - The full path of the group (e.g.
"/parent/child/subgroup"). Mutually exclusive withname. This uses the Keycloak/group-by-pathendpoint for a precise lookup. - Name string
- The name of the group. Mutually exclusive with
groupPath. If there are multiple groups matchingname, the first result is returned. - Organization
Id string - The organization this group exists within. If omitted, the data source looks up realm groups.
- Realm
Id string - The realm this group exists within.
- Description string
- Group
Path string - The full path of the group (e.g.
"/parent/child/subgroup"). Mutually exclusive withname. This uses the Keycloak/group-by-pathendpoint for a precise lookup. - Name string
- The name of the group. Mutually exclusive with
groupPath. If there are multiple groups matchingname, the first result is returned. - Organization
Id string - The organization this group exists within. If omitted, the data source looks up realm groups.
- realm_
id string - The realm this group exists within.
- description string
- group_
path string - The full path of the group (e.g.
"/parent/child/subgroup"). Mutually exclusive withname. This uses the Keycloak/group-by-pathendpoint for a precise lookup. - name string
- The name of the group. Mutually exclusive with
groupPath. If there are multiple groups matchingname, the first result is returned. - organization_
id string - The organization this group exists within. If omitted, the data source looks up realm groups.
- realm
Id String - The realm this group exists within.
- description String
- group
Path String - The full path of the group (e.g.
"/parent/child/subgroup"). Mutually exclusive withname. This uses the Keycloak/group-by-pathendpoint for a precise lookup. - name String
- The name of the group. Mutually exclusive with
groupPath. If there are multiple groups matchingname, the first result is returned. - organization
Id String - The organization this group exists within. If omitted, the data source looks up realm groups.
- realm
Id string - The realm this group exists within.
- description string
- group
Path string - The full path of the group (e.g.
"/parent/child/subgroup"). Mutually exclusive withname. This uses the Keycloak/group-by-pathendpoint for a precise lookup. - name string
- The name of the group. Mutually exclusive with
groupPath. If there are multiple groups matchingname, the first result is returned. - organization
Id string - The organization this group exists within. If omitted, the data source looks up realm groups.
- realm_
id str - The realm this group exists within.
- description str
- group_
path str - The full path of the group (e.g.
"/parent/child/subgroup"). Mutually exclusive withname. This uses the Keycloak/group-by-pathendpoint for a precise lookup. - name str
- The name of the group. Mutually exclusive with
groupPath. If there are multiple groups matchingname, the first result is returned. - organization_
id str - The organization this group exists within. If omitted, the data source looks up realm groups.
- realm
Id String - The realm this group exists within.
- description String
- group
Path String - The full path of the group (e.g.
"/parent/child/subgroup"). Mutually exclusive withname. This uses the Keycloak/group-by-pathendpoint for a precise lookup. - name String
- The name of the group. Mutually exclusive with
groupPath. If there are multiple groups matchingname, the first result is returned. - organization
Id String - The organization this group exists within. If omitted, the data source looks up realm groups.
getGroup Result
The following output properties are available:
- Attributes Dictionary<string, string>
- Id string
- The provider-assigned unique ID for this managed resource.
- Parent
Id string - Path string
- Realm
Id string - Description string
- Group
Path string - Name string
- Organization
Id string
- Attributes map[string]string
- Id string
- The provider-assigned unique ID for this managed resource.
- Parent
Id string - Path string
- Realm
Id string - Description string
- Group
Path string - Name string
- Organization
Id string
- attributes map(string)
- id string
- The provider-assigned unique ID for this managed resource.
- parent_
id string - path string
- realm_
id string - description string
- group_
path string - name string
- organization_
id string
- attributes Map<String,String>
- id String
- The provider-assigned unique ID for this managed resource.
- parent
Id String - path String
- realm
Id String - description String
- group
Path String - name String
- organization
Id String
- attributes {[key: string]: string}
- id string
- The provider-assigned unique ID for this managed resource.
- parent
Id string - path string
- realm
Id string - description string
- group
Path string - name string
- organization
Id string
- attributes Mapping[str, str]
- id str
- The provider-assigned unique ID for this managed resource.
- parent_
id str - path str
- realm_
id str - description str
- group_
path str - name str
- organization_
id str
- attributes Map<String>
- id String
- The provider-assigned unique ID for this managed resource.
- parent
Id String - path String
- realm
Id String - description String
- group
Path String - name String
- organization
Id String
Package Details
- Repository
- Keycloak pulumi/pulumi-keycloak
- License
- Apache-2.0
- Notes
- This Pulumi package is based on the
keycloakTerraform Provider.
Viewing docs for Keycloak v6.13.0
published on Saturday, Aug 1, 2026 by Pulumi
published on Saturday, Aug 1, 2026 by Pulumi