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.
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/PKG-INFO +3 -2
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/pyproject.toml +10 -8
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/abstract_charm.py +9 -1
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/literals.py +20 -33
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/models.py +60 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/relations.py +2 -2
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/statuses.py +199 -89
- mongo_charms_single_kernel-1.8.19/single_kernel_mongo/core/abstract_upgrades_v3.py +157 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/k8s_workload.py +2 -2
- mongo_charms_single_kernel-1.8.19/single_kernel_mongo/core/kubernetes_upgrades_v3.py +17 -0
- mongo_charms_single_kernel-1.8.19/single_kernel_mongo/core/machine_upgrades_v3.py +54 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/operator.py +94 -5
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/structured_config.py +3 -1
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/version_checker.py +1 -12
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/vm_workload.py +30 -13
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/workload.py +28 -23
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/backups.py +3 -3
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/cluster.py +14 -9
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/database.py +7 -5
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/lifecycle.py +43 -8
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/sharding.py +13 -9
- mongo_charms_single_kernel-1.8.19/single_kernel_mongo/events/tls.py +242 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/exceptions.py +8 -32
- mongo_charms_single_kernel-1.8.19/single_kernel_mongo/lib/charms/operator_libs_linux/v1/systemd.py +288 -0
- mongo_charms_single_kernel-1.8.19/single_kernel_mongo/lib/charms/tls_certificates_interface/v4/tls_certificates.py +1995 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/backups.py +3 -3
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/cluster.py +80 -38
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/config.py +29 -17
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/ldap.py +30 -23
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/mongo.py +66 -39
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/mongodb_operator.py +479 -201
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/mongos_operator.py +141 -70
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/sharding.py +184 -157
- mongo_charms_single_kernel-1.8.19/single_kernel_mongo/managers/tls.py +413 -0
- mongo_charms_single_kernel-1.8.19/single_kernel_mongo/managers/upgrade_v3.py +474 -0
- mongo_charms_single_kernel-1.8.19/single_kernel_mongo/managers/upgrade_v3_status.py +136 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/app_peer_state.py +13 -3
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/charm_state.py +115 -177
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/cluster_state.py +8 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/config_server_state.py +15 -39
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/ldap_state.py +3 -3
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/models.py +2 -2
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/tls_state.py +39 -12
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/unit_peer_state.py +10 -0
- mongo_charms_single_kernel-1.8.19/single_kernel_mongo/templates/enable-transparent-huge-pages.service.j2 +14 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/helpers.py +4 -25
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongo_config.py +32 -8
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongo_connection.py +3 -15
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongodb_users.py +54 -24
- mongo_charms_single_kernel-1.6.11/single_kernel_mongo/core/abstract_upgrades.py +0 -890
- mongo_charms_single_kernel-1.6.11/single_kernel_mongo/core/kubernetes_upgrades.py +0 -194
- mongo_charms_single_kernel-1.6.11/single_kernel_mongo/core/machine_upgrades.py +0 -188
- mongo_charms_single_kernel-1.6.11/single_kernel_mongo/events/password_actions.py +0 -103
- mongo_charms_single_kernel-1.6.11/single_kernel_mongo/events/tls.py +0 -213
- mongo_charms_single_kernel-1.6.11/single_kernel_mongo/events/upgrades.py +0 -157
- mongo_charms_single_kernel-1.6.11/single_kernel_mongo/lib/charms/tls_certificates_interface/v3/tls_certificates.py +0 -2123
- mongo_charms_single_kernel-1.6.11/single_kernel_mongo/managers/tls.py +0 -369
- mongo_charms_single_kernel-1.6.11/single_kernel_mongo/managers/upgrade.py +0 -334
- mongo_charms_single_kernel-1.6.11/single_kernel_mongo/state/upgrade_state.py +0 -134
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/LICENSE +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/README.md +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/__init__.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/__init__.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/__init__.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/secrets.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/__init__.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/ldap.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/primary_action.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/__init__.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/k8s.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/observability.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/observability_rules/__init__.py +0 -0
- {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
- {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
- {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
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/observability_rules/loki/.gitkeep +0 -0
- {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
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/__init__.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/abstract_state.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/templates/__init__.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/templates/ldap.conf.j2 +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/templates/logrotate.j2 +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/__init__.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/event_helpers.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongo_error_codes.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/__init__.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/backup_workload.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/log_rotate_workload.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/mongodb_workload.py +0 -0
- {mongo_charms_single_kernel-1.6.11 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/mongos_workload.py +0 -0
- {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.
|
|
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.
|
|
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"
|
|
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
|
-
"
|
|
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
|
|
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
|
|
38
|
-
"""
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
MONITOR = "monitor"
|
|
50
|
-
LOGROTATE = "logrotate"
|
|
40
|
+
PEER = "peer"
|
|
41
|
+
CLIENT = "client"
|
|
51
42
|
|
|
52
43
|
|
|
53
|
-
class
|
|
54
|
-
"""
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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"
|