mongo-charms-single-kernel 1.7.2__tar.gz → 1.8.19__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 (102) hide show
  1. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/PKG-INFO +5 -3
  2. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/pyproject.toml +7 -3
  3. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/abstract_charm.py +19 -3
  4. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/literals.py +17 -31
  5. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/models.py +60 -0
  6. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/relations.py +2 -2
  7. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/config/statuses.py +681 -0
  8. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/core/abstract_upgrades_v3.py +157 -0
  9. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/k8s_workload.py +2 -2
  10. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/core/kubernetes_upgrades_v3.py +17 -0
  11. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/core/machine_upgrades_v3.py +54 -0
  12. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/operator.py +106 -6
  13. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/structured_config.py +7 -3
  14. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/version_checker.py +1 -12
  15. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/vm_workload.py +30 -13
  16. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/workload.py +28 -23
  17. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/backups.py +13 -6
  18. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/cluster.py +6 -1
  19. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/database.py +5 -4
  20. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/lifecycle.py +56 -6
  21. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/sharding.py +9 -1
  22. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/events/tls.py +242 -0
  23. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/exceptions.py +12 -32
  24. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/lib/charms/operator_libs_linux/v1/systemd.py +288 -0
  25. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/lib/charms/tls_certificates_interface/v4/tls_certificates.py +1995 -0
  26. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/backups.py +21 -3
  27. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/cluster.py +80 -38
  28. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/config.py +29 -17
  29. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/ldap.py +2 -1
  30. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/mongo.py +71 -29
  31. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/mongodb_operator.py +561 -229
  32. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/mongos_operator.py +141 -70
  33. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/sharding.py +196 -170
  34. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/managers/tls.py +413 -0
  35. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/managers/upgrade_v3.py +474 -0
  36. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/managers/upgrade_v3_status.py +136 -0
  37. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/app_peer_state.py +17 -8
  38. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/charm_state.py +107 -170
  39. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/cluster_state.py +9 -1
  40. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/config_server_state.py +15 -39
  41. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/models.py +2 -2
  42. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/tls_state.py +39 -12
  43. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/unit_peer_state.py +10 -0
  44. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/templates/enable-transparent-huge-pages.service.j2 +14 -0
  45. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/helpers.py +4 -25
  46. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongo_config.py +32 -8
  47. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongo_connection.py +1 -1
  48. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongodb_users.py +54 -24
  49. mongo_charms_single_kernel-1.7.2/single_kernel_mongo/config/statuses.py +0 -430
  50. mongo_charms_single_kernel-1.7.2/single_kernel_mongo/core/abstract_upgrades.py +0 -890
  51. mongo_charms_single_kernel-1.7.2/single_kernel_mongo/core/kubernetes_upgrades.py +0 -194
  52. mongo_charms_single_kernel-1.7.2/single_kernel_mongo/core/machine_upgrades.py +0 -188
  53. mongo_charms_single_kernel-1.7.2/single_kernel_mongo/events/password_actions.py +0 -103
  54. mongo_charms_single_kernel-1.7.2/single_kernel_mongo/events/tls.py +0 -207
  55. mongo_charms_single_kernel-1.7.2/single_kernel_mongo/events/upgrades.py +0 -157
  56. mongo_charms_single_kernel-1.7.2/single_kernel_mongo/lib/charms/tls_certificates_interface/v3/tls_certificates.py +0 -2123
  57. mongo_charms_single_kernel-1.7.2/single_kernel_mongo/managers/tls.py +0 -367
  58. mongo_charms_single_kernel-1.7.2/single_kernel_mongo/managers/upgrade.py +0 -334
  59. mongo_charms_single_kernel-1.7.2/single_kernel_mongo/state/upgrade_state.py +0 -134
  60. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/LICENSE +0 -0
  61. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/README.md +0 -0
  62. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/__init__.py +0 -0
  63. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/__init__.py +0 -0
  64. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/__init__.py +0 -0
  65. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/secrets.py +0 -0
  66. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/__init__.py +0 -0
  67. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/ldap.py +0 -0
  68. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/primary_action.py +0 -0
  69. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/lib/charms/certificate_transfer_interface/v0/certificate_transfer.py +0 -0
  70. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/lib/charms/data_platform_libs/v0/data_interfaces.py +0 -0
  71. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/lib/charms/data_platform_libs/v0/s3.py +0 -0
  72. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/lib/charms/glauth_k8s/v0/ldap.py +0 -0
  73. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/lib/charms/grafana_agent/v0/cos_agent.py +0 -0
  74. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/lib/charms/grafana_k8s/v0/grafana_dashboard.py +0 -0
  75. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/lib/charms/loki_k8s/v0/loki_push_api.py +0 -0
  76. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/lib/charms/operator_libs_linux/v0/sysctl.py +0 -0
  77. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/lib/charms/operator_libs_linux/v2/snap.py +0 -0
  78. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/lib/charms/prometheus_k8s/v0/prometheus_scrape.py +0 -0
  79. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/__init__.py +0 -0
  80. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/k8s.py +0 -0
  81. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/observability.py +0 -0
  82. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/observability_rules/__init__.py +0 -0
  83. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/observability_rules/grafana_dashboards/MongoDB_Cluster_Summary.json +0 -0
  84. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/observability_rules/grafana_dashboards/MongoDB_ReplSet_Summary.json +0 -0
  85. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/observability_rules/k8s_prometheus_alert_rules/percona-mongodb-exporter.rule +0 -0
  86. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/observability_rules/loki/.gitkeep +0 -0
  87. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/observability_rules/vm_prometheus_alert_rules/percona-mongodb-exporter.yml +0 -0
  88. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/__init__.py +0 -0
  89. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/abstract_state.py +0 -0
  90. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/ldap_state.py +0 -0
  91. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/templates/__init__.py +0 -0
  92. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/templates/ldap.conf.j2 +0 -0
  93. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/templates/logrotate.j2 +0 -0
  94. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/__init__.py +0 -0
  95. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/event_helpers.py +0 -0
  96. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongo_error_codes.py +0 -0
  97. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/__init__.py +0 -0
  98. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/backup_workload.py +0 -0
  99. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/log_rotate_workload.py +0 -0
  100. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/mongodb_workload.py +0 -0
  101. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/mongos_workload.py +0 -0
  102. {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/monitor_workload.py +0 -0
@@ -1,8 +1,9 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: mongo-charms-single-kernel
3
- Version: 1.7.2
3
+ Version: 1.8.19
4
4
  Summary: Shared and reusable code for Mongo-related charms
5
- License: Apache-2.0
5
+ License-Expression: Apache-2.0
6
+ License-File: LICENSE
6
7
  Author: Neha Oudin
7
8
  Author-email: neha@oudin.red
8
9
  Requires-Python: >=3.10,<4.0
@@ -11,6 +12,7 @@ Classifier: Intended Audience :: Developers
11
12
  Classifier: Intended Audience :: System Administrators
12
13
  Classifier: Operating System :: POSIX :: Linux
13
14
  Requires-Dist: boto3 (>=1.37.12,<1.38.0)
15
+ Requires-Dist: charm-refresh (>=3.1.0.2,<4.0.0.0)
14
16
  Requires-Dist: cosl
15
17
  Requires-Dist: cryptography
16
18
  Requires-Dist: dacite (>=1.9.0,<1.10.0)
@@ -37,9 +37,10 @@ dependencies = [
37
37
  "deepmerge (>=2.0)",
38
38
  "boto3 (~=1.37.12)",
39
39
  "mypy-boto3-s3 (~=1.37.0)",
40
- "python-ldap"
40
+ "python-ldap",
41
+ "charm-refresh (>=3.1.0.2,<4.0.0.0)"
41
42
  ]
42
- version = "1.7.2"
43
+ version = "1.8.19"
43
44
 
44
45
  [project.urls]
45
46
  homepage = "https://github.com/canonical/mongo-single-kernel-library"
@@ -135,6 +136,8 @@ more_itertools = "*"
135
136
  httpx = "*"
136
137
  boto3 = "^1.37.12"
137
138
  mypy-boto3-s3 = "^1.37.0"
139
+ tomli = '*'
140
+ tomli-w = '*'
138
141
 
139
142
  [tool.ruff]
140
143
  target-version = "py310"
@@ -205,7 +208,8 @@ exclude = [
205
208
  "^single_kernel_mongo/lib/*",
206
209
  "tests/charms/*",
207
210
  "tests/integration/*",
208
- "tests/unit/*"
211
+ "tests/unit/*",
212
+ "typings[\\/].*"
209
213
  ]
210
214
  # https://mypy.readthedocs.io/en/stable/command_line.html#cmdoption-mypy-ignore-missing-imports
211
215
  ignore_missing_imports = true
@@ -26,15 +26,16 @@ a DB Engine and storage), and the main peer relation name will be
26
26
  import logging
27
27
  from typing import ClassVar, Generic, TypeVar
28
28
 
29
+ import ops.log
29
30
  from data_platform_helpers.advanced_statuses.handler import StatusHandler
30
31
  from data_platform_helpers.advanced_statuses.models import StatusObject
31
32
  from data_platform_helpers.advanced_statuses.protocol import ManagerStatusProtocol
32
33
  from data_platform_helpers.advanced_statuses.types import Scope
33
34
  from ops.charm import CharmBase
34
35
 
35
- from single_kernel_mongo.config.literals import Substrates
36
+ from single_kernel_mongo.config.literals import CharmKind, Substrates
36
37
  from single_kernel_mongo.config.relations import PeerRelationNames
37
- from single_kernel_mongo.config.statuses import CharmStatuses
38
+ from single_kernel_mongo.config.statuses import CharmStatuses, MongoDBStatuses
38
39
  from single_kernel_mongo.core.operator import OperatorProtocol
39
40
  from single_kernel_mongo.core.structured_config import MongoConfigModel, MongoDBRoles
40
41
  from single_kernel_mongo.events.lifecycle import LifecycleEventsHandler
@@ -43,6 +44,8 @@ T = TypeVar("T", bound=MongoConfigModel)
43
44
  U = TypeVar("U", bound=OperatorProtocol)
44
45
 
45
46
  logger = logging.getLogger(__name__)
47
+ logging.getLogger("httpx").setLevel(logging.WARNING)
48
+ logging.getLogger("httpcore").setLevel(logging.WARNING)
46
49
 
47
50
 
48
51
  class AbstractMongoCharm(ManagerStatusProtocol, Generic[T, U], CharmBase):
@@ -69,6 +72,11 @@ class AbstractMongoCharm(ManagerStatusProtocol, Generic[T, U], CharmBase):
69
72
  # Init the Juju object Object
70
73
  super(Generic, self).__init__(*args)
71
74
 
75
+ root_logger = logging.getLogger()
76
+ for handler in root_logger.handlers:
77
+ if isinstance(handler, ops.log.JujuLogHandler):
78
+ handler.setFormatter(logging.Formatter("{name}:{message}", style="{"))
79
+
72
80
  # Create the operator instance (one of MongoDBOperator or MongosOperator)
73
81
  self.operator = self.operator_type(self)
74
82
  self.state = self.operator.state
@@ -104,11 +112,19 @@ class AbstractMongoCharm(ManagerStatusProtocol, Generic[T, U], CharmBase):
104
112
  )
105
113
  self.workload.install()
106
114
 
107
- def on_leader_elected(self, _):
115
+ def on_leader_elected(self, event):
108
116
  """First leader elected handler."""
109
117
  # Sets the role in the databag: when the charm is first created, its
110
118
  # role won't exist in the databag. We save it in the databag because we
111
119
  # don't allow role changing yet.
120
+ if (
121
+ self.operator.name == CharmKind.MONGOD
122
+ and self.parsed_config.role == MongoDBRoles.INVALID
123
+ ):
124
+ self.status_handler.set_running_status(MongoDBStatuses.INVALID_ROLE.value, scope="app")
125
+ event.defer()
126
+ return
127
+
112
128
  if self.operator.state.app_peer_data.role == MongoDBRoles.UNKNOWN:
113
129
  self.operator.state.app_peer_data.role = MongoDBRoles(self.parsed_config.role)
114
130
 
@@ -34,6 +34,13 @@ class Scope(str, Enum):
34
34
  UNIT = "unit"
35
35
 
36
36
 
37
+ class TLSType(str, Enum):
38
+ """TLS types."""
39
+
40
+ PEER = "peer"
41
+ CLIENT = "client"
42
+
43
+
37
44
  class MongoPorts(IntEnum):
38
45
  """The default Mongo ports."""
39
46
 
@@ -41,37 +48,18 @@ class MongoPorts(IntEnum):
41
48
  MONGOS_PORT = 27018
42
49
 
43
50
 
44
- class InternalUsers(str, Enum):
45
- """The three allowed internal users."""
46
-
47
- OPERATOR = "operator"
48
- BACKUP = "backup"
49
- MONITOR = "monitor"
50
- LOGROTATE = "logrotate"
51
-
52
-
53
- class UnitState(str, Enum):
54
- """Unit upgrade state."""
51
+ class InternalUsernames(str, Enum):
52
+ """The allowed internal usernames."""
55
53
 
56
- HEALTHY = "healthy"
57
- RESTARTING = "restarting" # Kubernetes only
58
- UPGRADING = "upgrading" # Machines only
59
- OUTDATED = "outdated" # Machines only
60
-
61
-
62
- SECRETS_APP = [f"{user}-password" for user in InternalUsers] + ["keyfile"]
63
-
64
-
65
- @dataclass(frozen=True)
66
- class Snap:
67
- """The Snap related information."""
54
+ CHARMED_OPERATOR = "charmed-operator"
55
+ CHARMED_BACKUP = "charmed-backup"
56
+ CHARMED_STATS = "charmed-stats"
57
+ CHARMED_LOGROTATE = "charmed-logrotate"
68
58
 
69
- name: str = "charmed-mongodb"
70
- channel: str = "8-transition/edge"
71
- revision: str = "132"
72
59
 
60
+ SECRETS_APP = [f"{username}-password" for username in InternalUsernames] + ["keyfile"]
73
61
 
74
- SNAP = Snap(channel="8-transition/edge", revision="132")
62
+ VERSIONS_FILE = Path("refresh_versions.toml")
75
63
 
76
64
  T = TypeVar("T", bound=str | int)
77
65
 
@@ -109,12 +97,10 @@ MAX_PASSWORD_LENGTH = 4096
109
97
 
110
98
  PBM_RESTART_DELAY = 5
111
99
 
112
- FEATURE_VERSION = "7.0"
100
+ FEATURE_VERSION = "8.0"
113
101
 
114
102
 
115
- OS_REQUIREMENTS = {
116
- "vm.max_map_count": "262144",
117
- }
103
+ OS_REQUIREMENTS = {"vm.max_map_count": "262144", "vm.overcommit_memory": "1"}
118
104
 
119
105
  TRUST_STORE_PATH = Path("/usr/local/share/ca-certificates")
120
106
 
@@ -13,8 +13,11 @@ from importlib import resources as impresources
13
13
  from importlib.abc import Traversable
14
14
  from pathlib import Path
15
15
 
16
+ from data_platform_helpers.advanced_statuses.models import StatusObject
17
+
16
18
  from single_kernel_mongo import observability_rules, templates
17
19
  from single_kernel_mongo.config.literals import CharmKind, Substrates
20
+ from single_kernel_mongo.config.statuses import PasswordManagementStatuses
18
21
 
19
22
  TEMPLATE_DIRECTORY = impresources.files(templates)
20
23
  OBSERVABILITY_DIRECTORY = impresources.files(observability_rules)
@@ -59,6 +62,18 @@ class LdapConfig:
59
62
  LDAP_CONFIG = LdapConfig()
60
63
 
61
64
 
65
+ @dataclass(frozen=True)
66
+ class THPConfig:
67
+ """Configuration for transparent huge tables."""
68
+
69
+ service_template: Traversable = TEMPLATE_DIRECTORY / "enable-transparent-huge-pages.service.j2"
70
+ service_file_path: Path = Path("/etc/systemd/system/enable-transparent-huge-pages.service")
71
+ service_name = "enable-transparent-huge-pages"
72
+
73
+
74
+ THP_CONFIG = THPConfig()
75
+
76
+
62
77
  @dataclass(frozen=True)
63
78
  class AuditLogConfig:
64
79
  """Audit log related configuration."""
@@ -89,6 +104,7 @@ VM_PATH = {
89
104
  "BIN": "/snap/bin",
90
105
  "SHELL": "/snap/bin/charmed-mongodb.mongosh",
91
106
  "LICENSES": f"/snap/{SNAP_NAME}/current/licenses",
107
+ "TEMP": "/tmp",
92
108
  }
93
109
  }
94
110
  K8S_PATH = {
@@ -102,6 +118,7 @@ K8S_PATH = {
102
118
  "BIN": "/usr/bin/",
103
119
  "SHELL": "/usr/bin/mongosh",
104
120
  "LICENSES": "/licenses",
121
+ "TEMP": "/tmp",
105
122
  }
106
123
  }
107
124
 
@@ -148,3 +165,46 @@ class BackupState(Enum):
148
165
  WAITING_TO_SYNC = auto()
149
166
  FAILED_TO_CREATE_BUCKET = auto()
150
167
  ACTIVE = auto()
168
+
169
+
170
+ class PasswordManagementState(Enum):
171
+ """Password management state that can be mapped to a status."""
172
+
173
+ EMPTY = auto()
174
+ NOT_LEADER = auto()
175
+ PASSWORD_ON_SHARD = auto()
176
+ UPGRADE_RUNNING = auto()
177
+ BACKUP_RUNNING = auto()
178
+ SECRET_NOT_FOUND = auto()
179
+ SECRET_NOT_GRANTED = auto()
180
+ INVALID_CONTENT = auto()
181
+ NEED_PASSWORD_UPDATE = auto()
182
+
183
+
184
+ @dataclass
185
+ class PasswordManagementContext:
186
+ """Represents the current context of password management for internal users.
187
+
188
+ Attributes:
189
+ state (PasswordManagementState): The state of password management,
190
+ message (str): Optional human-readable message providing context about the state,
191
+ system_users (dict[str, str]): A mapping of usernames to passwords if the
192
+ system-users secret is valid. Empty otherwise.
193
+ """
194
+
195
+ state: PasswordManagementState
196
+ message: str = ""
197
+ system_users: dict[str, str] = field(default_factory=dict)
198
+
199
+ def map_state_to_status(self) -> list[StatusObject]:
200
+ """Map from password management state to password management status."""
201
+ match self.state:
202
+ case PasswordManagementState.PASSWORD_ON_SHARD:
203
+ return [PasswordManagementStatuses.PASSWORD_ON_SHARD.value]
204
+ case PasswordManagementState.SECRET_NOT_GRANTED:
205
+ return [PasswordManagementStatuses.SECRET_NOT_GRANTED.value]
206
+ case PasswordManagementState.SECRET_NOT_FOUND:
207
+ return [PasswordManagementStatuses.SECRET_NOT_FOUND.value]
208
+ case PasswordManagementState.INVALID_CONTENT:
209
+ return [PasswordManagementStatuses.INVALID_SYSTEM_USERS.value]
210
+ return []
@@ -23,7 +23,6 @@ class RelationNames(str, Enum):
23
23
  CONFIG_SERVER = "config-server"
24
24
  CLUSTER = "cluster"
25
25
  MONGOS_PROXY = "mongos_proxy"
26
- UPGRADE_VERSION = "upgrade-version-a"
27
26
 
28
27
 
29
28
  class Scopes(str, Enum):
@@ -36,7 +35,8 @@ class Scopes(str, Enum):
36
35
  class ExternalRequirerRelations(str, Enum):
37
36
  """The relations we require externally."""
38
37
 
39
- TLS = "certificates"
38
+ CLIENT_TLS = "client-certificates"
39
+ PEER_TLS = "peer-certificates"
40
40
  S3_CREDENTIALS = "s3-credentials"
41
41
  LDAP = "ldap"
42
42
  LDAP_CERT = "ldap-certificate-transfer"