mongo-charms-single-kernel 1.6.11__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 (101) hide show
  1. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/PKG-INFO +3 -2
  2. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/pyproject.toml +10 -8
  3. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/abstract_charm.py +9 -1
  4. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/literals.py +20 -33
  5. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/models.py +60 -0
  6. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/relations.py +2 -2
  7. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/statuses.py +199 -89
  8. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/core/abstract_upgrades_v3.py +157 -0
  9. {mongo_charms_single_kernel-1.6.11 → 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.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/operator.py +94 -5
  13. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/structured_config.py +3 -1
  14. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/version_checker.py +1 -12
  15. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/vm_workload.py +30 -13
  16. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/workload.py +28 -23
  17. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/backups.py +3 -3
  18. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/cluster.py +14 -9
  19. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/database.py +7 -5
  20. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/lifecycle.py +43 -8
  21. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/sharding.py +13 -9
  22. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/events/tls.py +242 -0
  23. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/exceptions.py +8 -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.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/backups.py +3 -3
  27. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/cluster.py +80 -38
  28. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/config.py +29 -17
  29. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/ldap.py +30 -23
  30. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/mongo.py +66 -39
  31. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/mongodb_operator.py +479 -201
  32. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/mongos_operator.py +141 -70
  33. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/sharding.py +184 -157
  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.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/app_peer_state.py +13 -3
  38. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/charm_state.py +115 -177
  39. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/cluster_state.py +8 -0
  40. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/config_server_state.py +15 -39
  41. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/ldap_state.py +3 -3
  42. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/models.py +2 -2
  43. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/tls_state.py +39 -12
  44. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/unit_peer_state.py +10 -0
  45. mongo_charms_single_kernel-1.8.19/single_kernel_mongo/templates/enable-transparent-huge-pages.service.j2 +14 -0
  46. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/helpers.py +4 -25
  47. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongo_config.py +32 -8
  48. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongo_connection.py +3 -15
  49. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongodb_users.py +54 -24
  50. mongo_charms_single_kernel-1.6.11/single_kernel_mongo/core/abstract_upgrades.py +0 -890
  51. mongo_charms_single_kernel-1.6.11/single_kernel_mongo/core/kubernetes_upgrades.py +0 -194
  52. mongo_charms_single_kernel-1.6.11/single_kernel_mongo/core/machine_upgrades.py +0 -188
  53. mongo_charms_single_kernel-1.6.11/single_kernel_mongo/events/password_actions.py +0 -103
  54. mongo_charms_single_kernel-1.6.11/single_kernel_mongo/events/tls.py +0 -213
  55. mongo_charms_single_kernel-1.6.11/single_kernel_mongo/events/upgrades.py +0 -157
  56. mongo_charms_single_kernel-1.6.11/single_kernel_mongo/lib/charms/tls_certificates_interface/v3/tls_certificates.py +0 -2123
  57. mongo_charms_single_kernel-1.6.11/single_kernel_mongo/managers/tls.py +0 -369
  58. mongo_charms_single_kernel-1.6.11/single_kernel_mongo/managers/upgrade.py +0 -334
  59. mongo_charms_single_kernel-1.6.11/single_kernel_mongo/state/upgrade_state.py +0 -134
  60. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/LICENSE +0 -0
  61. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/README.md +0 -0
  62. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/__init__.py +0 -0
  63. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/__init__.py +0 -0
  64. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/__init__.py +0 -0
  65. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/secrets.py +0 -0
  66. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/__init__.py +0 -0
  67. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/ldap.py +0 -0
  68. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/primary_action.py +0 -0
  69. {mongo_charms_single_kernel-1.6.11 → 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.6.11 → 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.6.11 → 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.6.11 → 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.6.11 → 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.6.11 → 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.6.11 → 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.6.11 → 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.6.11 → 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.6.11 → 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.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/__init__.py +0 -0
  80. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/k8s.py +0 -0
  81. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/observability.py +0 -0
  82. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/observability_rules/__init__.py +0 -0
  83. {mongo_charms_single_kernel-1.6.11 → 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.6.11 → 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.6.11 → 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.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/observability_rules/loki/.gitkeep +0 -0
  87. {mongo_charms_single_kernel-1.6.11 → 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.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/__init__.py +0 -0
  89. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/abstract_state.py +0 -0
  90. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/templates/__init__.py +0 -0
  91. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/templates/ldap.conf.j2 +0 -0
  92. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/templates/logrotate.j2 +0 -0
  93. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/__init__.py +0 -0
  94. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/event_helpers.py +0 -0
  95. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongo_error_codes.py +0 -0
  96. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/__init__.py +0 -0
  97. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/backup_workload.py +0 -0
  98. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/log_rotate_workload.py +0 -0
  99. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/mongodb_workload.py +0 -0
  100. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/mongos_workload.py +0 -0
  101. {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/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.6.11
3
+ Version: 1.8.19
4
4
  Summary: Shared and reusable code for Mongo-related charms
5
5
  License-Expression: Apache-2.0
6
6
  License-File: LICENSE
@@ -12,6 +12,7 @@ Classifier: Intended Audience :: Developers
12
12
  Classifier: Intended Audience :: System Administrators
13
13
  Classifier: Operating System :: POSIX :: Linux
14
14
  Requires-Dist: boto3 (>=1.37.12,<1.38.0)
15
+ Requires-Dist: charm-refresh (>=3.1.0.2,<4.0.0.0)
15
16
  Requires-Dist: cosl
16
17
  Requires-Dist: cryptography
17
18
  Requires-Dist: dacite (>=1.9.0,<1.10.0)
@@ -19,7 +20,6 @@ Requires-Dist: data-platform-helpers (>=0.1.7)
19
20
  Requires-Dist: deepmerge (>=2.0)
20
21
  Requires-Dist: jinja2
21
22
  Requires-Dist: jsonschema (>=4.24.0,<4.25.0)
22
- Requires-Dist: ldap3
23
23
  Requires-Dist: lightkube
24
24
  Requires-Dist: mypy-boto3-s3 (>=1.37.0,<1.38.0)
25
25
  Requires-Dist: ops (>=2.21.1,<2.22.0)
@@ -28,6 +28,7 @@ Requires-Dist: poetry-core (>=2.0)
28
28
  Requires-Dist: pydantic (>=2.11.0,<2.12.0)
29
29
  Requires-Dist: pydantic-settings
30
30
  Requires-Dist: pymongo
31
+ Requires-Dist: python-ldap
31
32
  Requires-Dist: pyyaml (>=6.0.2,<6.1.0)
32
33
  Requires-Dist: tenacity (>=9.0.0,<9.1.0)
33
34
  Project-URL: Bug Tracker, https://github.com/canonical/mongo-single-kernel-library/issues
@@ -34,12 +34,13 @@ dependencies = [
34
34
  "dacite (~=1.9.0)",
35
35
  "data-platform-helpers (>=0.1.7)",
36
36
  "cosl", # loki_push_api
37
- "ldap3",
38
37
  "deepmerge (>=2.0)",
39
38
  "boto3 (~=1.37.12)",
40
- "mypy-boto3-s3 (~=1.37.0)"
39
+ "mypy-boto3-s3 (~=1.37.0)",
40
+ "python-ldap",
41
+ "charm-refresh (>=3.1.0.2,<4.0.0.0)"
41
42
  ]
42
- version = "1.6.11"
43
+ version = "1.8.19"
43
44
 
44
45
  [project.urls]
45
46
  homepage = "https://github.com/canonical/mongo-single-kernel-library"
@@ -135,11 +136,13 @@ 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"
141
144
  line-length = 100
142
- exclude = [".git", "__pycache__", ".tox", "build", "dist", "*.egg_info", "venv", "single_kernel_mongo/lib", "tests/integration/applications", "docs"]
145
+ exclude = [".git", "__pycache__", ".tox", "build", "dist", "*.egg_info", "venv", "single_kernel_mongo/lib", "tests/integration/applications"]
143
146
 
144
147
  [tool.ruff.lint]
145
148
  select = ["F", "E", "W", "C", "N", "R", "D", "I001", "UP"]
@@ -178,8 +181,7 @@ omit = [
178
181
  "single_kernel_mongo/lib/charms/*",
179
182
  "single_kernel_mongo/state/abstract_state.py",
180
183
  "single_kernel_mongo/core/operator.py",
181
- "*__init__*",
182
- "docs"
184
+ "*__init__*"
183
185
  ]
184
186
 
185
187
  [tool.coverage.report]
@@ -207,7 +209,7 @@ exclude = [
207
209
  "tests/charms/*",
208
210
  "tests/integration/*",
209
211
  "tests/unit/*",
210
- "docs/*"
212
+ "typings[\\/].*"
211
213
  ]
212
214
  # https://mypy.readthedocs.io/en/stable/command_line.html#cmdoption-mypy-ignore-missing-imports
213
215
  ignore_missing_imports = true
@@ -215,4 +217,4 @@ plugins = ["pydantic.mypy"]
215
217
 
216
218
  [tool.codespell]
217
219
  ignore-words=".codespellignore"
218
- skip="*single_kernel_mongo/lib/*,*single_kernel_mongo/observability_rules/*,*.lock,*tests/integration/applications/**/lib/*,*docs*"
220
+ skip="*single_kernel_mongo/lib/*,*single_kernel_mongo/observability_rules/*,*.lock,*tests/integration/applications/**/lib/*"
@@ -26,6 +26,7 @@ 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
@@ -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
@@ -118,7 +126,7 @@ class AbstractMongoCharm(ManagerStatusProtocol, Generic[T, U], CharmBase):
118
126
  return
119
127
 
120
128
  if self.operator.state.app_peer_data.role == MongoDBRoles.UNKNOWN:
121
- self.operator.state.app_peer_data.role = self.parsed_config.role
129
+ self.operator.state.app_peer_data.role = MongoDBRoles(self.parsed_config.role)
122
130
 
123
131
  def get_statuses(self, scope: Scope, recompute: bool = False) -> list[StatusObject]:
124
132
  """Returns a list of statuses."""
@@ -6,7 +6,7 @@ This module should contain the literals used in the charms (paths, enums, etc).
6
6
  """
7
7
 
8
8
  from dataclasses import dataclass
9
- from enum import Enum
9
+ from enum import Enum, IntEnum
10
10
  from pathlib import Path
11
11
  from typing import Generic, TypeVar
12
12
 
@@ -34,44 +34,32 @@ class Scope(str, Enum):
34
34
  UNIT = "unit"
35
35
 
36
36
 
37
- class MongoPorts(int, Enum):
38
- """The default Mongo ports."""
39
-
40
- MONGODB_PORT = 27017
41
- MONGOS_PORT = 27018
42
-
43
-
44
- class InternalUsers(str, Enum):
45
- """The three allowed internal users."""
37
+ class TLSType(str, Enum):
38
+ """TLS types."""
46
39
 
47
- OPERATOR = "operator"
48
- BACKUP = "backup"
49
- MONITOR = "monitor"
50
- LOGROTATE = "logrotate"
40
+ PEER = "peer"
41
+ CLIENT = "client"
51
42
 
52
43
 
53
- class UnitState(str, Enum):
54
- """Unit upgrade state."""
55
-
56
- HEALTHY = "healthy"
57
- RESTARTING = "restarting" # Kubernetes only
58
- UPGRADING = "upgrading" # Machines only
59
- OUTDATED = "outdated" # Machines only
44
+ class MongoPorts(IntEnum):
45
+ """The default Mongo ports."""
60
46
 
47
+ MONGODB_PORT = 27017
48
+ MONGOS_PORT = 27018
61
49
 
62
- SECRETS_APP = [f"{user}-password" for user in InternalUsers] + ["keyfile"]
63
50
 
51
+ class InternalUsernames(str, Enum):
52
+ """The allowed internal usernames."""
64
53
 
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 = "6/edge"
71
- revision: str = "131"
72
59
 
60
+ SECRETS_APP = [f"{username}-password" for username in InternalUsernames] + ["keyfile"]
73
61
 
74
- SNAP = Snap(channel="6/edge", revision="131")
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_6 = "6.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
 
@@ -123,3 +109,4 @@ class TrustStoreFiles(str, Enum):
123
109
  """The different files we store in the trust store."""
124
110
 
125
111
  PBM = "pbm.crt"
112
+ LDAP = "ldap.crt"
@@ -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"