mongo-charms-single-kernel 1.8.9__tar.gz → 1.8.10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mongo-charms-single-kernel might be problematic. Click here for more details.

Files changed (91) hide show
  1. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/PKG-INFO +1 -1
  2. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/pyproject.toml +1 -1
  3. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/config/literals.py +5 -5
  4. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/config.py +10 -6
  5. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/mongo.py +11 -11
  6. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/mongodb_operator.py +14 -12
  7. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/sharding.py +21 -12
  8. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/upgrade_v3.py +6 -6
  9. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/state/charm_state.py +15 -15
  10. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/state/config_server_state.py +6 -6
  11. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/state/models.py +2 -2
  12. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/utils/mongodb_users.py +20 -20
  13. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/LICENSE +0 -0
  14. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/README.md +0 -0
  15. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/__init__.py +0 -0
  16. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/abstract_charm.py +0 -0
  17. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/config/__init__.py +0 -0
  18. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/config/models.py +0 -0
  19. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/config/relations.py +0 -0
  20. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/config/statuses.py +0 -0
  21. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/core/__init__.py +0 -0
  22. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/core/abstract_upgrades_v3.py +0 -0
  23. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/core/k8s_workload.py +0 -0
  24. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/core/kubernetes_upgrades_v3.py +0 -0
  25. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/core/machine_upgrades_v3.py +0 -0
  26. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/core/operator.py +0 -0
  27. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/core/secrets.py +0 -0
  28. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/core/structured_config.py +0 -0
  29. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/core/version_checker.py +0 -0
  30. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/core/vm_workload.py +0 -0
  31. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/core/workload.py +0 -0
  32. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/events/__init__.py +0 -0
  33. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/events/backups.py +0 -0
  34. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/events/cluster.py +0 -0
  35. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/events/database.py +0 -0
  36. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/events/ldap.py +0 -0
  37. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/events/lifecycle.py +0 -0
  38. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/events/primary_action.py +0 -0
  39. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/events/sharding.py +0 -0
  40. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/events/tls.py +0 -0
  41. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/exceptions.py +0 -0
  42. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/lib/charms/certificate_transfer_interface/v0/certificate_transfer.py +0 -0
  43. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/lib/charms/data_platform_libs/v0/data_interfaces.py +0 -0
  44. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/lib/charms/data_platform_libs/v0/s3.py +0 -0
  45. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/lib/charms/glauth_k8s/v0/ldap.py +0 -0
  46. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/lib/charms/grafana_agent/v0/cos_agent.py +0 -0
  47. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/lib/charms/grafana_k8s/v0/grafana_dashboard.py +0 -0
  48. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/lib/charms/loki_k8s/v0/loki_push_api.py +0 -0
  49. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/lib/charms/operator_libs_linux/v0/sysctl.py +0 -0
  50. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/lib/charms/operator_libs_linux/v1/systemd.py +0 -0
  51. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/lib/charms/operator_libs_linux/v2/snap.py +0 -0
  52. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/lib/charms/prometheus_k8s/v0/prometheus_scrape.py +0 -0
  53. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/lib/charms/tls_certificates_interface/v4/tls_certificates.py +0 -0
  54. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/__init__.py +0 -0
  55. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/backups.py +0 -0
  56. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/cluster.py +0 -0
  57. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/k8s.py +0 -0
  58. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/ldap.py +0 -0
  59. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/mongos_operator.py +0 -0
  60. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/observability.py +0 -0
  61. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/tls.py +0 -0
  62. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/managers/upgrade_v3_status.py +0 -0
  63. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/observability_rules/__init__.py +0 -0
  64. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/observability_rules/grafana_dashboards/MongoDB_Cluster_Summary.json +0 -0
  65. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/observability_rules/grafana_dashboards/MongoDB_ReplSet_Summary.json +0 -0
  66. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/observability_rules/k8s_prometheus_alert_rules/percona-mongodb-exporter.rule +0 -0
  67. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/observability_rules/loki/.gitkeep +0 -0
  68. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/observability_rules/vm_prometheus_alert_rules/percona-mongodb-exporter.yml +0 -0
  69. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/state/__init__.py +0 -0
  70. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/state/abstract_state.py +0 -0
  71. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/state/app_peer_state.py +0 -0
  72. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/state/cluster_state.py +0 -0
  73. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/state/ldap_state.py +0 -0
  74. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/state/tls_state.py +0 -0
  75. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/state/unit_peer_state.py +0 -0
  76. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/templates/__init__.py +0 -0
  77. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/templates/enable-transparent-huge-pages.service.j2 +0 -0
  78. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/templates/ldap.conf.j2 +0 -0
  79. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/templates/logrotate.j2 +0 -0
  80. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/utils/__init__.py +0 -0
  81. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/utils/event_helpers.py +0 -0
  82. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/utils/helpers.py +0 -0
  83. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/utils/mongo_config.py +0 -0
  84. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/utils/mongo_connection.py +0 -0
  85. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/utils/mongo_error_codes.py +0 -0
  86. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/workload/__init__.py +0 -0
  87. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/workload/backup_workload.py +0 -0
  88. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/workload/log_rotate_workload.py +0 -0
  89. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/workload/mongodb_workload.py +0 -0
  90. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/workload/mongos_workload.py +0 -0
  91. {mongo_charms_single_kernel-1.8.9 → mongo_charms_single_kernel-1.8.10}/single_kernel_mongo/workload/monitor_workload.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mongo-charms-single-kernel
3
- Version: 1.8.9
3
+ Version: 1.8.10
4
4
  Summary: Shared and reusable code for Mongo-related charms
5
5
  License-Expression: Apache-2.0
6
6
  License-File: LICENSE
@@ -40,7 +40,7 @@ dependencies = [
40
40
  "python-ldap",
41
41
  "charm-refresh (>=3.1.0.2,<4.0.0.0)"
42
42
  ]
43
- version = "1.8.9"
43
+ version = "1.8.10"
44
44
 
45
45
  [project.urls]
46
46
  homepage = "https://github.com/canonical/mongo-single-kernel-library"
@@ -51,13 +51,13 @@ class MongoPorts(IntEnum):
51
51
  class InternalUsernames(str, Enum):
52
52
  """The allowed internal usernames."""
53
53
 
54
- OPERATOR = "operator"
55
- BACKUP = "backup"
56
- MONITOR = "monitor"
57
- LOGROTATE = "logrotate"
54
+ CHARMED_OPERATOR = "charmed-operator"
55
+ CHARMED_BACKUP = "charmed-backup"
56
+ CHARMED_STATS = "charmed-stats"
57
+ CHARMED_LOGROTATE = "charmed-logrotate"
58
58
 
59
59
 
60
- SECRETS_APP = [f"{user}-password" for user in InternalUsernames] + ["keyfile"]
60
+ SECRETS_APP = [f"{username}-password" for username in InternalUsernames] + ["keyfile"]
61
61
 
62
62
  VERSIONS_FILE = Path("refresh_versions.toml")
63
63
 
@@ -28,7 +28,11 @@ from single_kernel_mongo.core.structured_config import MongoConfigModel, MongoDB
28
28
  from single_kernel_mongo.core.workload import WorkloadBase
29
29
  from single_kernel_mongo.exceptions import WorkloadServiceError
30
30
  from single_kernel_mongo.state.charm_state import CharmState
31
- from single_kernel_mongo.utils.mongodb_users import BackupUser, LogRotateUser, MonitorUser
31
+ from single_kernel_mongo.utils.mongodb_users import (
32
+ CharmedBackupUser,
33
+ CharmedLogRotateUser,
34
+ CharmedStatsUser,
35
+ )
32
36
  from single_kernel_mongo.workload import (
33
37
  get_logrotate_workload_for_substrate,
34
38
  get_mongodb_exporter_workload_for_substrate,
@@ -135,7 +139,7 @@ class BackupConfigManager(CommonConfigManager):
135
139
  logger.info("Not starting PBM yet. Shard not added to config-server")
136
140
  return
137
141
 
138
- if not self.state.get_user_password(BackupUser):
142
+ if not self.state.get_user_password(CharmedBackupUser):
139
143
  logger.info("No password found.")
140
144
  return
141
145
 
@@ -184,7 +188,7 @@ class LogRotateConfigManager(CommonConfigManager):
184
188
  logger.info("DB is not initialised.")
185
189
  return
186
190
 
187
- if not self.state.get_user_password(LogRotateUser):
191
+ if not self.state.get_user_password(CharmedLogRotateUser):
188
192
  logger.info("No password found.")
189
193
  return
190
194
 
@@ -224,17 +228,17 @@ class MongoDBExporterConfigManager(CommonConfigManager):
224
228
 
225
229
  @override
226
230
  def build_parameters(self) -> list[list[str]]:
227
- return [[self.state.monitor_config.uri]]
231
+ return [[self.state.stats_config.uri]]
228
232
 
229
233
  def configure_and_restart(self):
230
234
  """Exposes the endpoint to mongodb_exporter."""
231
235
  if not self.state.db_initialised:
232
236
  return
233
237
 
234
- if not self.state.get_user_password(MonitorUser):
238
+ if not self.state.get_user_password(CharmedStatsUser):
235
239
  return
236
240
 
237
- if not self.workload.active() or self.get_environment() != self.state.monitor_config.uri:
241
+ if not self.workload.active() or self.get_environment() != self.state.stats_config.uri:
238
242
  try:
239
243
  # Always enable the service
240
244
  self.workload.stop()
@@ -52,11 +52,11 @@ from single_kernel_mongo.utils.mongo_config import (
52
52
  from single_kernel_mongo.utils.mongo_connection import MongoConnection, NotReadyError
53
53
  from single_kernel_mongo.utils.mongodb_users import (
54
54
  OPERATOR_ROLE,
55
- BackupUser,
56
- LogRotateUser,
55
+ CharmedBackupUser,
56
+ CharmedLogRotateUser,
57
+ CharmedOperatorUser,
58
+ CharmedStatsUser,
57
59
  MongoDBUser,
58
- MonitorUser,
59
- OperatorUser,
60
60
  )
61
61
 
62
62
  if TYPE_CHECKING:
@@ -138,12 +138,12 @@ class MongoManager(Object, ManagerStatusProtocol):
138
138
 
139
139
  def initialise_charm_admin_users(self) -> None:
140
140
  """First initialisation of each user."""
141
- self.initialise_operator_user()
142
- self.initialise_user(MonitorUser)
143
- self.initialise_user(BackupUser)
144
- self.initialise_user(LogRotateUser)
141
+ self.initialise_charmed_operator_user()
142
+ self.initialise_user(CharmedStatsUser)
143
+ self.initialise_user(CharmedBackupUser)
144
+ self.initialise_user(CharmedLogRotateUser)
145
145
 
146
- def initialise_operator_user(self):
146
+ def initialise_charmed_operator_user(self):
147
147
  """Creates initial admin user for MongoDB.
148
148
 
149
149
  Initial admin user can be created only through localhost connection.
@@ -154,7 +154,7 @@ class MongoManager(Object, ManagerStatusProtocol):
154
154
  It is needed to install mongodb-clients inside charm container to make
155
155
  this function work correctly.
156
156
  """
157
- if self.state.app_peer_data.is_user_created(OperatorUser.username):
157
+ if self.state.app_peer_data.is_user_created(CharmedOperatorUser.username):
158
158
  return
159
159
  config = self.state.mongo_config
160
160
  cmd = [
@@ -169,7 +169,7 @@ class MongoManager(Object, ManagerStatusProtocol):
169
169
  '})"',
170
170
  ]
171
171
  self.workload.run_bin_command("mongodb://localhost/admin", cmd, input=config.password)
172
- self.state.app_peer_data.set_user_created(OperatorUser.username)
172
+ self.state.app_peer_data.set_user_created(CharmedOperatorUser.username)
173
173
 
174
174
  def initialise_user(self, user: MongoDBUser):
175
175
  """Creates a user and sets its role on the MongoDB database."""
@@ -100,12 +100,12 @@ from single_kernel_mongo.state.charm_state import CharmState
100
100
  from single_kernel_mongo.utils.helpers import is_valid_ldap_options, is_valid_ldapusertodnmapping
101
101
  from single_kernel_mongo.utils.mongo_connection import MongoConnection, NotReadyError
102
102
  from single_kernel_mongo.utils.mongodb_users import (
103
- BackupUser,
103
+ CharmedBackupUser,
104
+ CharmedLogRotateUser,
105
+ CharmedOperatorUser,
106
+ CharmedStatsUser,
104
107
  InternalUsers,
105
- LogRotateUser,
106
108
  MongoDBUser,
107
- MonitorUser,
108
- OperatorUser,
109
109
  get_user_from_username,
110
110
  validate_charm_user_password_config,
111
111
  )
@@ -719,10 +719,10 @@ class MongoDBOperator(OperatorProtocol, Object):
719
719
 
720
720
  Adds the unit as a replica to the MongoDB replica set.
721
721
  """
722
- # Changing the monitor or the backup password will lead to non-leader
723
- # units receiving a relation changed event. We must update the monitor
724
- # and pbm URI if the password changes so that COS/pbm can continue to
725
- # work.
722
+ # Changing the charmed-stats or the charmed-backup password will lead
723
+ # to non-leader units receiving a relation changed event. We must update
724
+ # the monitor and pbm URI if the password changes so that COS/pbm can
725
+ # continue to work.
726
726
  if self.state.db_initialised and self.workload.active():
727
727
  self.mongodb_exporter_config_manager.configure_and_restart()
728
728
  self.backup_manager.configure_and_restart()
@@ -912,16 +912,18 @@ class MongoDBOperator(OperatorProtocol, Object):
912
912
  def update_single_user_password(self, user: MongoDBUser, new_password: str) -> None:
913
913
  """Set password in Mongod and restart the appropriate services."""
914
914
  self.mongo_manager.set_user_password(user, new_password)
915
- if user == BackupUser:
915
+ if user == CharmedBackupUser:
916
916
  # Update and restart PBM Agent.
917
917
  self.backup_manager.configure_and_restart()
918
- if user == MonitorUser:
918
+ if user == CharmedStatsUser:
919
919
  # Update and restart mongodb exporter.
920
920
  self.mongodb_exporter_config_manager.configure_and_restart()
921
- if user == LogRotateUser:
921
+ if user == CharmedLogRotateUser:
922
922
  # Update and restart logrotate.
923
923
  self.logrotate_config_manager.configure_and_restart()
924
- if user in (OperatorUser, BackupUser) and self.state.is_role(MongoDBRoles.CONFIG_SERVER):
924
+ if user in (CharmedOperatorUser, CharmedBackupUser) and self.state.is_role(
925
+ MongoDBRoles.CONFIG_SERVER
926
+ ):
925
927
  self.config_server_manager.update_credentials(
926
928
  user.password_key_name,
927
929
  new_password,
@@ -62,9 +62,9 @@ from single_kernel_mongo.state.tls_state import SECRET_CA_LABEL
62
62
  from single_kernel_mongo.utils.mongo_connection import MongoConnection, NotReadyError
63
63
  from single_kernel_mongo.utils.mongo_error_codes import MongoErrorCodes
64
64
  from single_kernel_mongo.utils.mongodb_users import (
65
- BackupUser,
65
+ CharmedBackupUser,
66
+ CharmedOperatorUser,
66
67
  MongoDBUser,
67
- OperatorUser,
68
68
  )
69
69
  from single_kernel_mongo.workload.mongodb_workload import MongoDBWorkload
70
70
 
@@ -108,10 +108,10 @@ class ConfigServerManager(Object, ManagerStatusProtocol):
108
108
  )
109
109
  relation_data = {
110
110
  AppShardingComponentKeys.OPERATOR_PASSWORD.value: self.state.get_user_password(
111
- OperatorUser
111
+ CharmedOperatorUser
112
112
  ),
113
113
  AppShardingComponentKeys.BACKUP_PASSWORD.value: self.state.get_user_password(
114
- BackupUser
114
+ CharmedBackupUser
115
115
  ),
116
116
  AppShardingComponentKeys.KEY_FILE.value: self.state.get_keyfile(),
117
117
  AppShardingComponentKeys.HOST.value: json.dumps(sorted(self.state.internal_hosts)),
@@ -476,8 +476,8 @@ class ConfigServerManager(Object, ManagerStatusProtocol):
476
476
  if not hosts:
477
477
  return unreachable_hosts
478
478
 
479
- # use a URI that is not dependent on the operator password, as we are not guaranteed
480
- # that the shard has received the password yet.
479
+ # use a URI that is not dependent on the charmed-operator password, as we are
480
+ # not guaranteed that the shard has received the password yet.
481
481
  # To check if the shard is ready, we check the entire replica set for readiness
482
482
  uri = f"mongodb://{','.join(hosts)}"
483
483
  if not self.dependent.mongo_manager.mongod_ready(uri, direct=False):
@@ -637,7 +637,7 @@ class ShardManager(Object, ManagerStatusProtocol):
637
637
  self.state.app_peer_data.mongos_hosts = self.state.shard_state.mongos_hosts
638
638
 
639
639
  def handle_secret_changed(self, secret_label: str | None) -> None:
640
- """Update operator and backup user passwords when rotation occurs.
640
+ """Update charmed-operator and charmed-backup user passwords when rotation occurs.
641
641
 
642
642
  Changes in secrets do not re-trigger a relation changed event, so it is necessary to listen
643
643
  to secret changes events.
@@ -665,7 +665,9 @@ class ShardManager(Object, ManagerStatusProtocol):
665
665
  backup_password = self.state.shard_state.backup_password
666
666
 
667
667
  if not operator_password or not backup_password:
668
- raise WaitingForSecretsError("Missing operator password or backup password")
668
+ raise WaitingForSecretsError(
669
+ "Missing charmed-operator password or charmed-backup password"
670
+ )
669
671
  self.sync_cluster_passwords(operator_password, backup_password)
670
672
 
671
673
  # Add the certificate if it is present
@@ -764,7 +766,10 @@ class ShardManager(Object, ManagerStatusProtocol):
764
766
  )
765
767
  raise NotReadyError
766
768
 
767
- for user, password in ((OperatorUser, operator_password), (BackupUser, backup_password)):
769
+ for user, password in (
770
+ (CharmedOperatorUser, operator_password),
771
+ (CharmedBackupUser, backup_password),
772
+ ):
768
773
  try:
769
774
  self.update_password(user=user, new_password=password)
770
775
  except SetPasswordError:
@@ -888,7 +893,7 @@ class ShardManager(Object, ManagerStatusProtocol):
888
893
  )
889
894
  return False
890
895
 
891
- config = self.state.mongos_config_for_user(OperatorUser, set(mongos_hosts))
896
+ config = self.state.mongos_config_for_user(CharmedOperatorUser, set(mongos_hosts))
892
897
 
893
898
  drained = shard_name not in self.dependent.mongo_manager.get_draining_shards(
894
899
  config=config, shard_name=shard_name
@@ -927,9 +932,13 @@ class ShardManager(Object, ManagerStatusProtocol):
927
932
 
928
933
  def should_synchronise_cluster_passwords(self) -> bool:
929
934
  """Decides if we should synchronise cluster passwords or not."""
930
- if self.state.shard_state.operator_password != self.state.get_user_password(OperatorUser):
935
+ if self.state.shard_state.operator_password != self.state.get_user_password(
936
+ CharmedOperatorUser
937
+ ):
931
938
  return True
932
- if self.state.shard_state.backup_password != self.state.get_user_password(BackupUser):
939
+ if self.state.shard_state.backup_password != self.state.get_user_password(
940
+ CharmedBackupUser
941
+ ):
933
942
  return True
934
943
  return False
935
944
 
@@ -18,7 +18,7 @@ from single_kernel_mongo.exceptions import (
18
18
  from single_kernel_mongo.state.charm_state import CharmState
19
19
  from single_kernel_mongo.utils.mongo_config import MongoConfiguration
20
20
  from single_kernel_mongo.utils.mongo_connection import MongoConnection
21
- from single_kernel_mongo.utils.mongodb_users import OperatorUser
21
+ from single_kernel_mongo.utils.mongodb_users import CharmedOperatorUser
22
22
 
23
23
  logger = logging.getLogger()
24
24
 
@@ -93,7 +93,7 @@ class MongoDBUpgradesManager:
93
93
  self.state.mongos_config
94
94
  if self.state.is_role(MongoDBRoles.CONFIG_SERVER)
95
95
  else self.state.mongos_config_for_user(
96
- OperatorUser, hosts=set(self.state.shard_state.mongos_hosts)
96
+ CharmedOperatorUser, hosts=set(self.state.shard_state.mongos_hosts)
97
97
  )
98
98
  )
99
99
 
@@ -142,7 +142,7 @@ class MongoDBUpgradesManager:
142
142
  config_server_hosts = self.state.app_peer_data.mongos_hosts
143
143
  mongodb_configurations = [
144
144
  self.state.mongodb_config_for_user(
145
- OperatorUser,
145
+ CharmedOperatorUser,
146
146
  hosts=set(config_server_hosts),
147
147
  replset=self.state.config_server_name,
148
148
  )
@@ -163,7 +163,7 @@ class MongoDBUpgradesManager:
163
163
  shard_hosts = shard_entry["host"].split("/")[1]
164
164
  parsed_ips = {host.split(":")[0] for host in shard_hosts.split(",")}
165
165
  return self.state.mongodb_config_for_user(
166
- OperatorUser, parsed_ips, replset=shard_entry[SHARD_NAME_INDEX]
166
+ CharmedOperatorUser, parsed_ips, replset=shard_entry[SHARD_NAME_INDEX]
167
167
  )
168
168
 
169
169
  def get_random_write_and_collection(self) -> tuple[str, str, str]:
@@ -400,7 +400,7 @@ class MongoDBUpgradesManager:
400
400
  for replica_set_config in self.get_all_replica_set_configs_in_cluster(mongos_config):
401
401
  for single_host in replica_set_config.hosts:
402
402
  single_replica_config = self.state.mongodb_config_for_user(
403
- OperatorUser,
403
+ CharmedOperatorUser,
404
404
  hosts={single_host},
405
405
  replset=replica_set_config.replset,
406
406
  standalone=True,
@@ -426,7 +426,7 @@ class MongoDBUpgradesManager:
426
426
  config = self.state.mongo_config
427
427
  for host in config.hosts:
428
428
  single_unit_config = self.state.mongodb_config_for_user(
429
- OperatorUser, hosts={host}, replset=config.replset, standalone=True
429
+ CharmedOperatorUser, hosts={host}, replset=config.replset, standalone=True
430
430
  )
431
431
  with MongoConnection(single_unit_config) as mongod:
432
432
  version = mongod.client.admin.command(
@@ -73,12 +73,12 @@ from single_kernel_mongo.utils.mongo_config import MongoConfiguration
73
73
  from single_kernel_mongo.utils.mongo_connection import MongoConnection
74
74
  from single_kernel_mongo.utils.mongo_error_codes import MongoErrorCodes
75
75
  from single_kernel_mongo.utils.mongodb_users import (
76
- BackupUser,
76
+ CharmedBackupUser,
77
+ CharmedLogRotateUser,
78
+ CharmedOperatorUser,
79
+ CharmedStatsUser,
77
80
  InternalUsers,
78
- LogRotateUser,
79
81
  MongoDBUser,
80
- MonitorUser,
81
- OperatorUser,
82
82
  RoleNames,
83
83
  )
84
84
 
@@ -725,35 +725,35 @@ class CharmState(Object, StatusesStateProtocol):
725
725
 
726
726
  @property
727
727
  def backup_config(self) -> MongoConfiguration:
728
- """Mongo Configuration for the backup user."""
729
- return self.mongodb_config_for_user(BackupUser, standalone=True)
728
+ """Mongo Configuration for the charmed-backup user."""
729
+ return self.mongodb_config_for_user(CharmedBackupUser, standalone=True)
730
730
 
731
731
  @property
732
- def monitor_config(self) -> MongoConfiguration:
733
- """Mongo Configuration for the monitoring user."""
734
- return self.mongodb_config_for_user(MonitorUser, hosts=self.internal_hosts)
732
+ def stats_config(self) -> MongoConfiguration:
733
+ """Mongo Configuration for the charmed-stats user."""
734
+ return self.mongodb_config_for_user(CharmedStatsUser, hosts=self.internal_hosts)
735
735
 
736
736
  @property
737
737
  def logrotate_config(self) -> MongoConfiguration:
738
- """Mongo Configuration for the logrotate user."""
739
- return self.mongodb_config_for_user(LogRotateUser, standalone=True)
738
+ """Mongo Configuration for the charmed-logrotate user."""
739
+ return self.mongodb_config_for_user(CharmedLogRotateUser, standalone=True)
740
740
 
741
741
  @property
742
742
  def operator_config(self) -> MongoConfiguration:
743
- """Mongo Configuration for the operator user."""
744
- return self.mongodb_config_for_user(OperatorUser, hosts=self.internal_hosts)
743
+ """Mongo Configuration for the charmed-operator user."""
744
+ return self.mongodb_config_for_user(CharmedOperatorUser, hosts=self.internal_hosts)
745
745
 
746
746
  @property
747
747
  def remote_mongos_config(self) -> MongoConfiguration:
748
748
  """Mongos Configuration for the remote mongos server."""
749
749
  mongos_hosts = self.app_peer_data.mongos_hosts
750
- return self.mongos_config_for_user(OperatorUser, set(mongos_hosts))
750
+ return self.mongos_config_for_user(CharmedOperatorUser, set(mongos_hosts))
751
751
 
752
752
  @property
753
753
  def mongos_config(self) -> MongoConfiguration:
754
754
  """Mongos Configuration for the admin mongos user."""
755
755
  if self.charm_role.name == CharmKind.MONGOD:
756
- return self.mongos_config_for_user(OperatorUser, self.internal_hosts)
756
+ return self.mongos_config_for_user(CharmedOperatorUser, self.internal_hosts)
757
757
  username, password = self.get_user_credentials()
758
758
  database = self.app_peer_data.database
759
759
  port: int | None = MongoPorts.MONGOS_PORT.value
@@ -18,8 +18,8 @@ class AppShardingComponentKeys(str, Enum):
18
18
  """Config Server State Model for the application."""
19
19
 
20
20
  DATABASE = "database"
21
- OPERATOR_PASSWORD = "operator-password"
22
- BACKUP_PASSWORD = "backup-password"
21
+ OPERATOR_PASSWORD = "charmed-operator-password"
22
+ BACKUP_PASSWORD = "charmed-backup-password"
23
23
  HOST = "host"
24
24
  KEY_FILE = "key-file"
25
25
  INT_CA_SECRET = "int-ca-secret"
@@ -32,8 +32,8 @@ class AppShardingComponentKeys(str, Enum):
32
32
 
33
33
 
34
34
  SECRETS_FIELDS = [
35
- "operator-password",
36
- "backup-password",
35
+ "charmed-operator-password",
36
+ "charmed-backup-password",
37
37
  "key-file",
38
38
  "int-ca-secret",
39
39
  "ext-ca-secret",
@@ -93,14 +93,14 @@ class AppShardingComponentState(AbstractRelationState[Data]):
93
93
 
94
94
  @property
95
95
  def operator_password(self) -> str | None:
96
- """Returns the operator password."""
96
+ """Returns the charmed-operator password."""
97
97
  if not self.relation:
98
98
  return None
99
99
  return self.relation_data.get(AppShardingComponentKeys.OPERATOR_PASSWORD.value, None)
100
100
 
101
101
  @property
102
102
  def backup_password(self) -> str | None:
103
- """Returns the operator password."""
103
+ """Returns the charmed-backup password."""
104
104
  if not self.relation:
105
105
  return None
106
106
  return self.relation_data.get(AppShardingComponentKeys.BACKUP_PASSWORD.value, None)
@@ -20,7 +20,7 @@ class ConfigServerData(ProviderData, RequirerData): # type: ignore[misc]
20
20
  "tls-ca",
21
21
  "uris",
22
22
  "key-file",
23
- "operator-password",
24
- "backup-password",
23
+ "charmed-operator-password",
24
+ "charmed-backup-password",
25
25
  "int-ca-secret",
26
26
  ]
@@ -129,14 +129,14 @@ class MongoDBUser(BaseModel):
129
129
  return self.hosts
130
130
 
131
131
 
132
- OperatorUser = MongoDBUser(
133
- username=InternalUsernames.OPERATOR,
132
+ CharmedOperatorUser = MongoDBUser(
133
+ username=InternalUsernames.CHARMED_OPERATOR,
134
134
  database_name=SystemDBS.ADMIN,
135
135
  roles={RoleNames.DEFAULT},
136
136
  )
137
137
 
138
- MonitorUser = MongoDBUser(
139
- username=InternalUsernames.MONITOR,
138
+ CharmedStatsUser = MongoDBUser(
139
+ username=InternalUsernames.CHARMED_STATS,
140
140
  database_name=SystemDBS.ADMIN,
141
141
  roles={RoleNames.MONITOR},
142
142
  privileges={
@@ -154,16 +154,16 @@ MonitorUser = MongoDBUser(
154
154
  hosts={LOCALHOST}, # MongoDB Exporter can only connect to one replica.
155
155
  )
156
156
 
157
- BackupUser = MongoDBUser(
158
- username=InternalUsernames.BACKUP,
157
+ CharmedBackupUser = MongoDBUser(
158
+ username=InternalUsernames.CHARMED_BACKUP,
159
159
  roles={RoleNames.BACKUP},
160
160
  privileges={"resource": {"anyResource": True}, "actions": ["anyAction"]},
161
161
  mongodb_role="pbmAnyAction",
162
162
  hosts={LOCALHOST}, # pbm cannot make a direct connection if multiple hosts are used
163
163
  )
164
164
 
165
- LogRotateUser = MongoDBUser(
166
- username=InternalUsernames.LOGROTATE,
165
+ CharmedLogRotateUser = MongoDBUser(
166
+ username=InternalUsernames.CHARMED_LOGROTATE,
167
167
  database_name=SystemDBS.ADMIN,
168
168
  roles={RoleNames.LOGROTATE},
169
169
  privileges={"resource": {"cluster": True}, "actions": ["logRotate"]},
@@ -172,10 +172,10 @@ LogRotateUser = MongoDBUser(
172
172
  )
173
173
 
174
174
  InternalUsers = (
175
- OperatorUser,
176
- BackupUser,
177
- MonitorUser,
178
- LogRotateUser,
175
+ CharmedOperatorUser,
176
+ CharmedBackupUser,
177
+ CharmedStatsUser,
178
+ CharmedLogRotateUser,
179
179
  )
180
180
 
181
181
 
@@ -185,14 +185,14 @@ def get_user_from_username(username: str) -> MongoDBUser:
185
185
  Raises:
186
186
  ValueError: If the username is not one of the known users.
187
187
  """
188
- if username == OperatorUser.username:
189
- return OperatorUser
190
- if username == MonitorUser.username:
191
- return MonitorUser
192
- if username == BackupUser.username:
193
- return BackupUser
194
- if username == LogRotateUser.username:
195
- return LogRotateUser
188
+ if username == CharmedOperatorUser.username:
189
+ return CharmedOperatorUser
190
+ if username == CharmedStatsUser.username:
191
+ return CharmedStatsUser
192
+ if username == CharmedBackupUser.username:
193
+ return CharmedBackupUser
194
+ if username == CharmedLogRotateUser.username:
195
+ return CharmedLogRotateUser
196
196
  raise ValueError(f"Unknown user: {username}")
197
197
 
198
198