apt hold k8s packages
[osm/devops.git] / installers / charm / mon / src / charm.py
index 98c3297..d0145d4 100755 (executable)
 import logging
 from typing import NoReturn
 
-from ops.main import main
 
+from ops.main import main
 from opslib.osm.charm import CharmedOsmBase, RelationsMissing
-
-from opslib.osm.pod import (
-    ContainerV3Builder,
-    PodSpecV3Builder,
-)
-
-from opslib.osm.validator import (
-    ModelValidator,
-    validator,
-)
-
 from opslib.osm.interfaces.kafka import KafkaClient
+from opslib.osm.interfaces.keystone import KeystoneClient
 from opslib.osm.interfaces.mongo import MongoClient
 from opslib.osm.interfaces.prometheus import PrometheusClient
+from opslib.osm.pod import ContainerV3Builder, PodSpecV3Builder
+from opslib.osm.validator import ModelValidator, validator
 
 
 logger = logging.getLogger(__name__)
@@ -51,9 +43,10 @@ PORT = 8000
 
 
 class ConfigModel(ModelValidator):
+    keystone_enabled: bool
     vca_host: str
     vca_user: str
-    vca_password: str
+    vca_secret: str
     vca_cacert: str
     database_commonkey: str
     log_level: str
@@ -92,6 +85,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 +98,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)
@@ -137,13 +137,25 @@ class MonCharm(CharmedOsmBase):
                 # VCA configuration
                 "OSMMON_VCA_HOST": config.vca_host,
                 "OSMMON_VCA_USER": config.vca_user,
-                "OSMMON_VCA_SECRET": config.vca_password,
+                "OSMMON_VCA_SECRET": config.vca_secret,
                 "OSMMON_VCA_CACERT": config.vca_cacert,
                 "OSMMON_GRAFANA_URL": config.grafana_url,
                 "OSMMON_GRAFANA_USER": config.grafana_user,
                 "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