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__)
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
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 = []
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)
# 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