1. Registry
  2. Packages
  3. Keycloak Provider
  4. API Docs
  5. getGroup
Viewing docs for Keycloak v6.13.0
published on Saturday, Aug 1, 2026 by Pulumi
keycloak logo keycloak logo
Viewing docs for Keycloak v6.13.0
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 dictionary
    data "keycloak_get_group" "name" {
        # arguments
    }

    The following arguments are supported:

    RealmId string
    The realm this group exists within.
    Description string
    GroupPath string
    The full path of the group (e.g. "/parent/child/subgroup"). Mutually exclusive with name. This uses the Keycloak /group-by-path endpoint for a precise lookup.
    Name string
    The name of the group. Mutually exclusive with groupPath. If there are multiple groups matching name, the first result is returned.
    OrganizationId string
    The organization this group exists within. If omitted, the data source looks up realm groups.
    RealmId string
    The realm this group exists within.
    Description string
    GroupPath string
    The full path of the group (e.g. "/parent/child/subgroup"). Mutually exclusive with name. This uses the Keycloak /group-by-path endpoint for a precise lookup.
    Name string
    The name of the group. Mutually exclusive with groupPath. If there are multiple groups matching name, the first result is returned.
    OrganizationId 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 with name. This uses the Keycloak /group-by-path endpoint for a precise lookup.
    name string
    The name of the group. Mutually exclusive with groupPath. If there are multiple groups matching name, the first result is returned.
    organization_id string
    The organization this group exists within. If omitted, the data source looks up realm groups.
    realmId String
    The realm this group exists within.
    description String
    groupPath String
    The full path of the group (e.g. "/parent/child/subgroup"). Mutually exclusive with name. This uses the Keycloak /group-by-path endpoint for a precise lookup.
    name String
    The name of the group. Mutually exclusive with groupPath. If there are multiple groups matching name, the first result is returned.
    organizationId String
    The organization this group exists within. If omitted, the data source looks up realm groups.
    realmId string
    The realm this group exists within.
    description string
    groupPath string
    The full path of the group (e.g. "/parent/child/subgroup"). Mutually exclusive with name. This uses the Keycloak /group-by-path endpoint for a precise lookup.
    name string
    The name of the group. Mutually exclusive with groupPath. If there are multiple groups matching name, the first result is returned.
    organizationId 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 with name. This uses the Keycloak /group-by-path endpoint for a precise lookup.
    name str
    The name of the group. Mutually exclusive with groupPath. If there are multiple groups matching name, the first result is returned.
    organization_id str
    The organization this group exists within. If omitted, the data source looks up realm groups.
    realmId String
    The realm this group exists within.
    description String
    groupPath String
    The full path of the group (e.g. "/parent/child/subgroup"). Mutually exclusive with name. This uses the Keycloak /group-by-path endpoint for a precise lookup.
    name String
    The name of the group. Mutually exclusive with groupPath. If there are multiple groups matching name, the first result is returned.
    organizationId 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.
    ParentId string
    Path string
    RealmId string
    Description string
    GroupPath string
    Name string
    OrganizationId string
    Attributes map[string]string
    Id string
    The provider-assigned unique ID for this managed resource.
    ParentId string
    Path string
    RealmId string
    Description string
    GroupPath string
    Name string
    OrganizationId 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.
    parentId String
    path String
    realmId String
    description String
    groupPath String
    name String
    organizationId String
    attributes {[key: string]: string}
    id string
    The provider-assigned unique ID for this managed resource.
    parentId string
    path string
    realmId string
    description string
    groupPath string
    name string
    organizationId 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.
    parentId String
    path String
    realmId String
    description String
    groupPath String
    name String
    organizationId String

    Package Details

    Repository
    Keycloak pulumi/pulumi-keycloak
    License
    Apache-2.0
    Notes
    This Pulumi package is based on the keycloak Terraform Provider.
    keycloak logo keycloak logo
    Viewing docs for Keycloak v6.13.0
    published on Saturday, Aug 1, 2026 by Pulumi

      Try Pulumi Cloud free.
      Your team will thank you.

      Start free trial