# KeycloakResourceBuilderExtensions Methods

- Package: [Aspire.Hosting.Keycloak](/reference/api/csharp/aspire.hosting.keycloak.md)
- Type: [KeycloakResourceBuilderExtensions](/reference/api/csharp/aspire.hosting.keycloak/keycloakresourcebuilderextensions.md)
- Kind: `Methods`
- Members: `9`

Provides extension methods for adding Keycloak resources to an `Hosting.IDistributedApplicationBuilder`.

## AddKeycloak(IDistributedApplicationBuilder, string, int?, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>)

- Name: `AddKeycloak(IDistributedApplicationBuilder, string, int?, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<KeycloakResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/becb48e2d61099e35ae336d527d3875e928d6594/src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs#L61-L141)

Adds a Keycloak container to the application model.

```csharp
public static class KeycloakResourceBuilderExtensions
{
    public static IResourceBuilder<KeycloakResource> AddKeycloak(
        this IDistributedApplicationBuilder builder,
        string name,
        int? port = null,
        IResourceBuilder<ParameterResource>? adminUsername = null,
        IResourceBuilder<ParameterResource>? adminPassword = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IDistributedApplicationBuilder`)
  The `Hosting.IDistributedApplicationBuilder`.
- `name` (`string`)
  The name of the resource.
- `port` (`int?`) `optional`
  The host port that the underlying container is bound to when running locally.
- `adminUsername` (`IResourceBuilder<ParameterResource>`) `optional`
  The parameter used as the admin for the Keycloak resource. If `null` a default value will be used.
- `adminPassword` (`IResourceBuilder<ParameterResource>`) `optional`
  The parameter used as the admin password for the Keycloak resource. If `null` a default password will be used.

## Returns

`IResourceBuilder<KeycloakResource>` -- A reference to the `ApplicationModel.IResourceBuilder`1`.

## Remarks

The container exposes port 8080 by default. This version of the package defaults to the tag of the / container image. Use in application host

```csharp
var keycloak = builder.AddKeycloak("keycloak");

var myService = builder.AddProject<Projects.MyService<()
                       .WithReference(keycloak);
```

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

## WithDataBindMount(IResourceBuilder<KeycloakResource>, string)

- Name: `WithDataBindMount(IResourceBuilder<KeycloakResource>, string)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<KeycloakResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/becb48e2d61099e35ae336d527d3875e928d6594/src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs#L189-L192)

Adds a bind mount for the data folder to a Keycloak container resource.

```csharp
public static class KeycloakResourceBuilderExtensions
{
    public static IResourceBuilder<KeycloakResource> WithDataBindMount(
        this IResourceBuilder<KeycloakResource> builder,
        string source)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<KeycloakResource>`)
  The resource builder.
- `source` (`string`)
  The source directory on the host to mount into the container.

## Returns

`IResourceBuilder<KeycloakResource>` -- The `ApplicationModel.IResourceBuilder`1`.

## Remarks

The source directory is mounted at /opt/keycloak/data in the container. Use a bind mount

```csharp
var keycloak = builder.AddKeycloak("keycloak")
                      .WithDataBindMount("mydata");
```

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

## WithDataVolume(IResourceBuilder<KeycloakResource>, string?)

- Name: `WithDataVolume(IResourceBuilder<KeycloakResource>, string?)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<KeycloakResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/becb48e2d61099e35ae336d527d3875e928d6594/src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs#L164-L166)

Adds a named volume for the data folder to a Keycloak container resource.

```csharp
public static class KeycloakResourceBuilderExtensions
{
    public static IResourceBuilder<KeycloakResource> WithDataVolume(
        this IResourceBuilder<KeycloakResource> builder,
        string? name = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<KeycloakResource>`)
  The resource builder.
- `name` (`string?`) `optional`
  The name of the volume. Defaults to an auto-generated name based on the application and resource names.

## Returns

`IResourceBuilder<KeycloakResource>` -- The `ApplicationModel.IResourceBuilder`1`.

## Remarks

The volume is mounted at /opt/keycloak/data in the container. Use a data volume

```csharp
var keycloak = builder.AddKeycloak("keycloak")
                      .WithDataVolume();
```

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

## WithDisabledFeatures(IResourceBuilder<KeycloakResource>, string[])

- Name: `WithDisabledFeatures(IResourceBuilder<KeycloakResource>, string[])`
- Modifiers: `extension`
- Returns: `IResourceBuilder<KeycloakResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/becb48e2d61099e35ae336d527d3875e928d6594/src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs#L292-L299)

Additional feature names to disable for the keycloak resource

```csharp
public static class KeycloakResourceBuilderExtensions
{
    public static IResourceBuilder<KeycloakResource> WithDisabledFeatures(
        this IResourceBuilder<KeycloakResource> builder,
        params string[] features)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<KeycloakResource>`)
  The resource builder.
- `features` (`string[]`)
  Names of features to disable for the keycloak resource

## Returns

`IResourceBuilder<KeycloakResource>` -- The `ApplicationModel.IResourceBuilder`1`.

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

## WithEnabledFeatures(IResourceBuilder<KeycloakResource>, string[])

- Name: `WithEnabledFeatures(IResourceBuilder<KeycloakResource>, string[])`
- Modifiers: `extension`
- Returns: `IResourceBuilder<KeycloakResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/becb48e2d61099e35ae336d527d3875e928d6594/src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs#L270-L277)

Additional feature names to enable for the keycloak resource

```csharp
public static class KeycloakResourceBuilderExtensions
{
    public static IResourceBuilder<KeycloakResource> WithEnabledFeatures(
        this IResourceBuilder<KeycloakResource> builder,
        params string[] features)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<KeycloakResource>`)
  The resource builder.
- `features` (`string[]`)
  Names of features to enable for the keycloak resource

## Returns

`IResourceBuilder<KeycloakResource>` -- The `ApplicationModel.IResourceBuilder`1`.

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

## WithOtlpExporter(IResourceBuilder<KeycloakResource>)

- Name: `WithOtlpExporter(IResourceBuilder<KeycloakResource>)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<KeycloakResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/becb48e2d61099e35ae336d527d3875e928d6594/src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs#L316-L322)

Injects the appropriate environment variables to allow the resource to enable sending telemetry to the dashboard.

1. It ensures the "opentelemetry" Keycloak feature is enabled
2. It sets the OTLP endpoint to the value of the `ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL` environment variable.
3. It sets the service name and instance id to the resource name and UID. Values are injected by the orchestrator.
4. It sets a small batch schedule delay in development. This reduces the delay that OTLP exporter waits to sends telemetry and makes the dashboard telemetry pages responsive.

```csharp
public static class KeycloakResourceBuilderExtensions
{
    public static IResourceBuilder<KeycloakResource> WithOtlpExporter(
        this IResourceBuilder<KeycloakResource> builder)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<KeycloakResource>`)
  The keycloak resource builder.

## Returns

`IResourceBuilder<KeycloakResource>` -- The `ApplicationModel.IResourceBuilder`1`.

## ATS metadata

### Ignored by ATS

- Excluded from automatic Polyglot export.

## WithOtlpExporter(IResourceBuilder<KeycloakResource>, OtlpProtocol)

- Name: `WithOtlpExporter(IResourceBuilder<KeycloakResource>, OtlpProtocol)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<KeycloakResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/becb48e2d61099e35ae336d527d3875e928d6594/src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs#L355-L361)

Injects the appropriate environment variables to allow the resource to enable sending telemetry to the dashboard.

1. It ensures the "opentelemetry" Keycloak feature is enabled
2. It sets the OTLP endpoint to the value of the `ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL` environment variable.
3. It sets the service name and instance id to the resource name and UID. Values are injected by the orchestrator.
4. It sets a small batch schedule delay in development. This reduces the delay that OTLP exporter waits to sends telemetry and makes the dashboard telemetry pages responsive.

```csharp
public static class KeycloakResourceBuilderExtensions
{
    public static IResourceBuilder<KeycloakResource> WithOtlpExporter(
        this IResourceBuilder<KeycloakResource> builder,
        OtlpProtocol protocol)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<KeycloakResource>`)
  The keycloak resource builder.
- `protocol` (`OtlpProtocol`)
  The protocol to use for the OTLP exporter. If not set, it will try gRPC then Http.

## Returns

`IResourceBuilder<KeycloakResource>` -- The `ApplicationModel.IResourceBuilder`1`.

## ATS metadata

### Ignored by ATS

- Excluded from automatic Polyglot export.

## WithRealmImport(IResourceBuilder<KeycloakResource>, string, bool)

> **Obsolete:** Use WithRealmImport(string import) instead.

- Name: `WithRealmImport(IResourceBuilder<KeycloakResource>, string, bool)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<KeycloakResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/becb48e2d61099e35ae336d527d3875e928d6594/src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs#L218-L223)

Adds a realm import to a Keycloak container resource.

```csharp
public static class KeycloakResourceBuilderExtensions
{
    public static IResourceBuilder<KeycloakResource> WithRealmImport(
        this IResourceBuilder<KeycloakResource> builder,
        string import,
        bool isReadOnly)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<KeycloakResource>`)
  The resource builder.
- `import` (`string`)
  The directory containing the realm import files or a single import file.
- `isReadOnly` (`bool`)
  A flag that indicates if the realm import directory is read-only.

## Returns

`IResourceBuilder<KeycloakResource>` -- The `ApplicationModel.IResourceBuilder`1`.

## Remarks

The realm import files are copied to /opt/keycloak/data/import in the container. Import the realms from a directory

```csharp
var keycloak = builder.AddKeycloak("keycloak")
                      .WithRealmImport("../realms");
```

## WithRealmImport(IResourceBuilder<KeycloakResource>, string)

- Name: `WithRealmImport(IResourceBuilder<KeycloakResource>, string)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<KeycloakResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/becb48e2d61099e35ae336d527d3875e928d6594/src/Aspire.Hosting.Keycloak/KeycloakResourceBuilderExtensions.cs#L247-L255)

Adds a realm import to a Keycloak container resource.

```csharp
public static class KeycloakResourceBuilderExtensions
{
    public static IResourceBuilder<KeycloakResource> WithRealmImport(
        this IResourceBuilder<KeycloakResource> builder,
        string import)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<KeycloakResource>`)
  The resource builder.
- `import` (`string`)
  The directory containing the realm import files or a single import file.

## Returns

`IResourceBuilder<KeycloakResource>` -- The `ApplicationModel.IResourceBuilder`1`.

## Remarks

The realm import files are copied to /opt/keycloak/data/import in the container. Import the realms from a directory

```csharp
var keycloak = builder.AddKeycloak("keycloak")
                      .WithRealmImport("../realms");
```

## ATS metadata

### Ignored by ATS

- Excluded from automatic Polyglot export.
