Skip to content

Commit f314726

Browse files
committed
Prefixes WIP
1 parent c699e1f commit f314726

File tree

12 files changed

+1016
-2124
lines changed

12 files changed

+1016
-2124
lines changed

lib/charms/data_platform_libs/v0/data_interfaces.py

Lines changed: 372 additions & 58 deletions
Large diffs are not rendered by default.

lib/charms/tls_certificates_interface/v4/tls_certificates.py

Lines changed: 0 additions & 1995 deletions
This file was deleted.

poetry.lock

Lines changed: 30 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ jinja2 = "^3.1.6"
1717
lightkube = "^0.17.2"
1818
lightkube-models = "^1.28.1.4"
1919
psycopg2 = "^2.9.10"
20-
postgresql-charms-single-kernel = "16.1.0"
20+
charmlibs-interfaces-tls-certificates = "^1.0.0.post1"
21+
postgresql-charms-single-kernel = {url = "https://github.com/canonical/postgresql-single-kernel-library/archive/63673568ebe99c3ce4030fb5769b4d88085bc0c5.zip"}
2122

2223
[tool.poetry.group.charm-libs.dependencies]
2324
# data_platform_libs/v0/data_interfaces.py

src/charm.py

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2406,7 +2406,8 @@ def relations_user_databases_map(self) -> dict:
24062406
except PostgreSQLListGroupsError as e:
24072407
logger.warning(f"Failed to list access groups: {e}")
24082408
return {USER: "all", REPLICATION_USER: "all", REWIND_USER: "all"}
2409-
user_database_map = {}
2409+
2410+
user_database_map = self._collect_user_relations()
24102411
for user in self.postgresql.list_users(current_host=self.is_connectivity_enabled):
24112412
if user in (
24122413
"backup",
@@ -2426,30 +2427,26 @@ def relations_user_databases_map(self) -> dict:
24262427
else:
24272428
logger.debug(f"User {user} has no databases to connect to")
24282429

2429-
# Copy relations users directly instead of waiting for them to be created
2430-
custom_username_mapping = self.postgresql_client_relation.get_username_mapping()
2431-
for relation in self.model.relations[self.postgresql_client_relation.relation_name]:
2432-
user = custom_username_mapping.get(str(relation.id), f"relation_id_{relation.id}")
2433-
if user not in user_database_map and (
2434-
database := self.postgresql_client_relation.database_provides.fetch_relation_field(
2435-
relation.id, "database"
2436-
)
2437-
):
2438-
user_database_map[user] = database
24392430
return user_database_map
24402431

2441-
@cached_property
2442-
def generate_user_hash(self) -> str:
2443-
"""Generate expected user and database hash."""
2432+
def _collect_user_relations(self) -> dict[str, str]:
24442433
user_db_pairs = {}
24452434
custom_username_mapping = self.postgresql_client_relation.get_username_mapping()
2435+
prefix_database_mapping = self.postgresql_client_relation.get_databases_prefix_mapping()
2436+
24462437
for relation in self.model.relations[self.postgresql_client_relation.relation_name]:
24472438
if database := self.postgresql_client_relation.database_provides.fetch_relation_field(
24482439
relation.id, "database"
24492440
):
24502441
user = custom_username_mapping.get(str(relation.id), f"relation_id_{relation.id}")
2442+
database = ",".join(prefix_database_mapping.get(str(relation.id), [database]))
24512443
user_db_pairs[user] = database
2452-
return shake_128(str(user_db_pairs).encode()).hexdigest(16)
2444+
return user_db_pairs
2445+
2446+
@cached_property
2447+
def generate_user_hash(self) -> str:
2448+
"""Generate expected user and database hash."""
2449+
return shake_128(str(self._collect_user_relations()).encode()).hexdigest(16)
24532450

24542451
def override_patroni_on_failure_condition(
24552452
self, new_condition: str, repeat_cause: str | None

src/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
SYSTEM_USERS_PASSWORD_CONFIG = "system-users" # noqa: S105
4343

4444
USERNAME_MAPPING_LABEL = "custom-usernames"
45+
DATABASE_MAPPING_LABEL = "prefix-databases"
4546

4647
APP_SCOPE = "app"
4748
UNIT_SCOPE = "unit"

0 commit comments

Comments
 (0)