How to integrate OpenSearch with an application
Integrations (formerly “relations”) are connections between two applications with compatible endpoints. These connections simplify creating and managing users, passwords, and other shared data.
This guide will walk you through integrating your charm with OpenSearch via the opensearch_client interface or the data-integrator charm.
Summary
- Integrate a different charm with OpenSearch
- Integrate an application outside of juju with OpenSearch
- Rotate the client password
Integrate a different charm with OpenSearch
The Charmed OpenSearch provides the opensearch_client interface to allow other charms to connect to it. This interface manages users, passwords, and other shared data.
Add the opensearch_client interface to your charm
To integrate your client application you must define the opensearch_client interface in your charm’s metadata.yaml file.
requires:
opensearch:
interface: opensearch_client
Import the database interface libraries and define database event handlers
To integrate with the opensearch_client interface, import the database interface libraries and define the database event handlers in your charm’s charm.py file.
First, navigate to your charm directory and fetch the data_interfaces charm library from Charmhub:
charmcraft fetch-lib charms.data_platform_libs.v0.data_interfaces
Next, import the OpenSearchRequires class from the data_interfaces library in your charm.py file:
from charms.data_platform.libs.interfaces.opensearch_client import OpenSearchRequires
Then, instantiate the OpenSearchRequires class in your charm. The class takes the following parameters:
charm: The charm instancerelation_name: The name of the relation to which to connect. This should match the name of the relation defined in themetadata.yamlfile (opensearchin the example above).index: The name of the index the client application will connect to.extra_user_roles: A string containing the additional roles to assign to the user. This is optional and defualts toNone.addional_secret_fields: A list of additional secret fields to be shared with the client application. This is optional and defaults to an empty list.
class MyCharm(CharmBase):
def __init__(self, *args):
super().__init__(*args)
self.opensearch = OpenSearchRequires(self, "opensearch", "my_index")
Finally, define a callback function to handle the index_created event. This function will be called when the index is created in the OpenSearch cluster.
class MyCharm(CharmBase):
def __init__(self, *args):
super().__init__(*args)
self.opensearch = OpenSearchRequires(self, "opensearch", "my_index")
self.framework.observe(self.opensearch.on.index_created, self._on_index_created)
def _on_index_created(self, event):
# Handle the index_created event
pass
Integrate the client application with OpenSearch
To integrate opensearch with your client applicationm run:
juju integrate opensearch <application>
To remove the integration, run:
juju remove-relation opensearch <application>
Integrate an application outside of juju with OpenSearch
The data-integrator charm is a bare-bones charm that allows for central management of database users, providing support for different kinds of data platform products (e.g. MongoDB, MySQL, PostgreSQL, Kafka, etc) with a consistent, opinionated and robust user experience.
Deploy the data-integrator charm
To deploy the data-integrator charm, run:
juju deploy data-integrator --config index-name=<index-name>
Relate the data-integrator charm to an OpenSearch cluster
Once the data-integrator charm is deployed it will blocked until it is related to an OpenSearch cluster. To relate the data-integrator charm to an OpenSearch cluster, run:
juju integrate data-integrator opensearch
Remove the client integration
To remove the integration (also known as “relation”) between the data-integrator charm and the OpenSearch cluster, run:
juju remove-relation data-integrator opensearch
Rotate the client password
To rotate the client password, remove the relation between the client application and the OpenSearch cluster and then re-add the relation. This will generate a user with a new password.
juju remove-relation opensearch <application>
juju integrate opensearch <application>
Rotate the admin password in the OpenSearch cluster
To rotate the admin password in the OpenSearch cluster, run the following:
juju run opensearch/leader set-password password=<new-password>
A random password will be generated if you do not specify a password.
juju run opensearch/leader set-password
To get the password, run:
juju run opensearch/leader get-password