- if self.unit.is_leader():
- rel_data = {
- "host": f"http://{self.app.name}:{KEYSTONE_PORT}/v3",
- "port": str(KEYSTONE_PORT),
- "keystone_db_password": config["keystone_db_password"],
- "region_id": config["region_id"],
- "user_domain_name": config["user_domain_name"],
- "project_domain_name": config["project_domain_name"],
- "admin_username": config["admin_username"],
- "admin_password": config["admin_password"],
- "admin_project_name": config["admin_project"],
- "username": config["service_username"],
- "password": config["service_password"],
- "service": config["service_project"],
- }
- for k, v in rel_data.items():
- event.relation.data[self.model.unit][k] = v
-
- def _on_db_relation_changed(self, event):
- self.state.db_host = event.relation.data[event.unit].get("host")
- self.state.db_port = event.relation.data[event.unit].get("port", 3306)
- self.state.db_user = "root" # event.relation.data[event.unit].get("user")
- self.state.db_password = event.relation.data[event.unit].get("root_password")
- if self.state.db_host:
- self.configure_pod(event)
-
- def _check_settings(self):
+ rel_data = {
+ "host": f"http://{self.app.name}:{KEYSTONE_PORT}/v3",
+ "port": str(KEYSTONE_PORT),
+ "keystone_db_password": config["keystone_db_password"],
+ "region_id": config["region_id"],
+ "user_domain_name": config["user_domain_name"],
+ "project_domain_name": config["project_domain_name"],
+ "admin_username": config["admin_username"],
+ "admin_password": config["admin_password"],
+ "admin_project_name": config["admin_project"],
+ "username": config["service_username"],
+ "password": config["service_password"],
+ "service": config["service_project"],
+ }
+ for k, v in rel_data.items():
+ event.relation.data[self.model.unit][k] = v
+
+ def _on_db_relation_changed(self, event: EventBase) -> NoReturn:
+ """Reads information about the DB relation, in order for keystone to
+ access it.
+
+ Args:
+ event (EventBase): DB relation event to access database
+ information.
+ """
+ if not event.unit in event.relation.data:
+ return
+ relation_data = event.relation.data[event.unit]
+ db_host = relation_data.get("host")
+ db_port = int(relation_data.get("port", 3306))
+ db_user = "root"
+ db_password = relation_data.get("root_password")
+
+ if (
+ db_host
+ and db_port
+ and db_user
+ and db_password
+ and (
+ self.state.db_host != db_host
+ or self.state.db_port != db_port
+ or self.state.db_user != db_user
+ or self.state.db_password != db_password
+ )
+ ):
+ self.state.db_host = db_host
+ self.state.db_port = db_port
+ self.state.db_user = db_user
+ self.state.db_password = db_password
+ self.on.configure_pod.emit()
+
+
+ def _on_db_relation_departed(self, event: EventBase) -> NoReturn:
+ """Clears data from db relation.
+
+ Args:
+ event (EventBase): DB relation event.
+
+ """
+ self.state.db_host = None
+ self.state.db_port = None
+ self.state.db_user = None
+ self.state.db_password = None
+ self.on.configure_pod.emit()
+
+ def _check_settings(self) -> str:
+ """Check if there any settings missing from Keystone configuration.
+
+ Returns:
+ str: Information about the problems found (if any).
+ """