---
title: Charmhub | Deploy GLAuth Utils using Charmhub - The Open Operator Collection
description: Deploy the latest version of GLAuth Utils on any cloud.
url: https://charmhub.io/glauth-utils/libraries/glauth_auxiliary
---

# GLAuth Utils

[Identity Charmers](https://charmhub.io/publisher/identity-charmers "View all packages from Identity Charmers")

* [Identity Charmers](https://charmhub.io/publisher/identity-charmers "View all packages from Identity Charmers")

Platform:

26.04

22.04

stable 50

```
juju deploy glauth-utils
```

[Learn to deploy on juju >](https://juju.is/docs/juju/manage-applications)

[Toggle side navigation](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#drawer)

## charms.glauth\_utils.v0.glauth\_auxiliary

* [*Docstrings*Docstrings](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary)
  [*Code*Source code](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary/source-code)
* + Download

    Fetch library

    ```
    charmcraft fetch-lib charms.glauth_utils.v0.glauth_auxiliary
    ```

    [Download glauth\_auxiliary.py](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary/download)
  + *Last updated* 12 Jan 2024
  + *Revision* Library version 0.1

#### Juju Charm Library for the `glauth_auxiliary` Juju Interface.

This juju charm library contains the Provider and Requirer classes for handling
the `glauth_auxiliary` interface.

##### Requirer Charm

The requirer charm is expected to:

* Listen to the custom juju event `AuxiliaryReadyEvent` to consume the
  auxiliary data from the integration
* Listen to the custom juju event `AuxiliaryUnavailableEvent` to handle the
  situation when the auxiliary integration is broken

```
from charms.glauth_utils.v0.glauth_auxiliary import (
    AuxiliaryRequirer,
    AuxiliaryReadyEvent,
)

class RequirerCharm(CharmBase):
    # Auxiliary requirer charm that integrates with an auxiliary provider charm.

    def __init__(self, *args):
        super().__init__(*args)

        self.auxiliary_requirer = AuxiliaryRequirer(self)
        self.framework.observe(
            self.auxiliary_requirer.on.auxiliary_ready,
            self._on_auxiliary_ready,
        )
        self.framework.observe(
            self.auxiliary_requirer.on.auxiliary_unavailable,
            self._on_auxiliary_unavailable,
        )

    def _on_auxiliary_ready(self, event: AuxiliaryReadyEvent) -> None:
        # Consume the auxiliary data
        auxiliary_data = self.auxiliary_requirer.consume_auxiliary_relation_data(
            event.relation.id,
        )

    def _on_auxiliary_unavailable(self, event: AuxiliaryUnavailableEvent) -> None:
    # Handle the situation where the auxiliary integration is broken
    ...
```

As shown above, the library offers custom juju event to handle the specific
situation, which are listed below:

* auxiliary\_ready: event emitted when the auxiliary data is ready for
  requirer charm to use.
* auxiliary\_unavailable: event emitted when the auxiliary integration is broken.

Additionally, the requirer charmed operator needs to declare the `auxiliary`
interface in the `metadata.yaml`:

```
requires:
  glauth-auxiliary:
    interface: glauth_auxiliary
    limit: 1
```

##### Provider Charm

The provider charm is expected to:

* Listen to the custom juju event `AuxiliaryRequestedEvent` to provide the
  auxiliary data in the integration

```
from charms.glauth_utils.v0.glauth_auxiliary import (
    AuxiliaryProvider,
    AuxiliaryRequestedEvent,
)

class ProviderCharm(CharmBase):
    # Auxiliary provider charm.

    def __init__(self, *args):
        super().__init__(*args)

        self.auxiliary_provider = AuxiliaryProvider(self)
        self.framework.observe(
            self.auxiliary_provider.on.auxiliary_requested,
            self._on_auxiliary_requested,
        )

    def _on_auxiliary_requested(self, event: AuxiliaryRequestedEvent) -> None:
        # Prepare the auxiliary data
        auxiliary_data = ...

        # Update the integration data
        self.auxiliary_provider.update_relation_app_data(
            relation.id,
            auxiliary_data,
        )
```

As shown above, the library offers custom juju event to handle the specific
situation, which are listed below:

* auxiliary\_requested: event emitted when the requirer charm integrates with
  the provider charm

---

Index

* [def leader\_unit(
  func
  )](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#leader_unit)
* + [def wrapper(
    obj)](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#leader_unit-wrapper)
* [class AuxiliaryData](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#auxiliarydata)
* [class AuxiliaryRequestedEvent](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#auxiliaryrequestedevent)
* [class AuxiliaryReadyEvent](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#auxiliaryreadyevent)
* [class AuxiliaryUnavailableEvent](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#auxiliaryunavailableevent)
* [class AuxiliaryProviderEvents](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#auxiliaryproviderevents)
* [class AuxiliaryRequirerEvents](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#auxiliaryrequirerevents)
* [class AuxiliaryProvider](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#auxiliaryprovider)
* + [def \_\_init\_\_(
    self,
    charm,
    relation\_name)](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#auxiliaryprovider-__init__)
* + [def update\_relation\_app\_data(
    data,
    relation\_id)](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#auxiliaryprovider-update_relation_app_data)
* [class AuxiliaryRequirer](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#auxiliaryrequirer)
* + [def \_\_init\_\_(
    self,
    charm,
    relation\_name)](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#auxiliaryrequirer-__init__)
* + [def consume\_auxiliary\_relation\_data(
    relation\_id)](https://charmhub.io/glauth-utils/libraries/glauth_auxiliary#auxiliaryrequirer-consume_auxiliary_relation_data)

#### def leader\_unit(func: Callable)

Methods

leader\_unit.
wrapper(

obj
)

#### class AuxiliaryData

#### class AuxiliaryRequestedEvent

Description

An event emitted when the auxiliary integration is built. None

#### class AuxiliaryReadyEvent

Description

An event emitted when the auxiliary data is ready. None

#### class AuxiliaryUnavailableEvent

Description

An event emitted when the auxiliary integration is unavailable. None

#### class AuxiliaryProviderEvents

#### class AuxiliaryRequirerEvents

#### class AuxiliaryProvider

Methods

AuxiliaryProvider.
\_\_init\_\_(

*self*

,
charm: CharmBase

,
relation\_name: str
)

AuxiliaryProvider.
update\_relation\_app\_data(

data: AuxiliaryData

,
relation\_id
)

Description

An API for the provider charm to provide the auxiliary data. None

#### class AuxiliaryRequirer

Methods

AuxiliaryRequirer.
\_\_init\_\_(

*self*

,
charm: CharmBase

,
relation\_name: str
)

AuxiliaryRequirer.
consume\_auxiliary\_relation\_data(

relation\_id
)

Description

An API for the requirer charm to consume the auxiliary data. None
