Adding MON relation to Keystone for charmed OSM
[osm/devops.git] / installers / charm / mon / src / charm.py
index 98c3297..26dee3f 100755 (executable)
@@ -43,6 +43,7 @@ from opslib.osm.validator import (
 from opslib.osm.interfaces.kafka import KafkaClient
 from opslib.osm.interfaces.mongo import MongoClient
 from opslib.osm.interfaces.prometheus import PrometheusClient
+from opslib.osm.interfaces.keystone import KeystoneClient
 
 
 logger = logging.getLogger(__name__)
@@ -51,6 +52,7 @@ PORT = 8000
 
 
 class ConfigModel(ModelValidator):
+    keystone_enabled: bool
     vca_host: str
     vca_user: str
     vca_password: str
@@ -92,6 +94,10 @@ class MonCharm(CharmedOsmBase):
             self.on["prometheus"].relation_broken, self.configure_pod
         )
 
+        self.keystone_client = KeystoneClient(self, "keystone")
+        self.framework.observe(self.on["keystone"].relation_changed, self.configure_pod)
+        self.framework.observe(self.on["keystone"].relation_broken, self.configure_pod)
+
     def _check_missing_dependencies(self, config: ConfigModel):
         missing_relations = []
 
@@ -101,6 +107,9 @@ class MonCharm(CharmedOsmBase):
             missing_relations.append("mongodb")
         if self.prometheus_client.is_missing_data_in_app():
             missing_relations.append("prometheus")
+        if config.keystone_enabled:
+            if self.keystone_client.is_missing_data_in_app():
+                missing_relations.append("keystone")
 
         if missing_relations:
             raise RelationsMissing(missing_relations)
@@ -144,6 +153,18 @@ class MonCharm(CharmedOsmBase):
                 "OSMMON_GRAFANA_PASSWORD": config.grafana_password,
             }
         )
+        if config.keystone_enabled:
+            container_builder.add_envs(
+                {
+                    "OSMMON_KEYSTONE_ENABLED": True,
+                    "OSMMON_KEYSTONE_URL": self.keystone_client.host,
+                    "OSMMON_KEYSTONE_DOMAIN_NAME": self.keystone_client.user_domain_name,
+                    "OSMMON_KEYSTONE_PROJECT_DOMAIN_NAME": self.keystone_client.project_domain_name,
+                    "OSMMON_KEYSTONE_SERVICE_USER": self.keystone_client.username,
+                    "OSMMON_KEYSTONE_SERVICE_PASSWORD": self.keystone_client.password,
+                    "OSMMON_KEYSTONE_SERVICE_PROJECT": self.keystone_client.service,
+                }
+            )
 
         container = container_builder.build()
         # Add container to pod spec