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.
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/PKG-INFO +5 -3
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/pyproject.toml +7 -3
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/abstract_charm.py +19 -3
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/literals.py +17 -31
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/models.py +60 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/relations.py +2 -2
- mongo_charms_single_kernel-1.8.19/single_kernel_mongo/config/statuses.py +681 -0
- mongo_charms_single_kernel-1.8.19/single_kernel_mongo/core/abstract_upgrades_v3.py +157 -0
- {mongo_charms_single_kernel-1.7.2 → 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.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/operator.py +106 -6
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/structured_config.py +7 -3
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/version_checker.py +1 -12
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/vm_workload.py +30 -13
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/workload.py +28 -23
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/backups.py +13 -6
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/cluster.py +6 -1
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/database.py +5 -4
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/lifecycle.py +56 -6
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/sharding.py +9 -1
- mongo_charms_single_kernel-1.8.19/single_kernel_mongo/events/tls.py +242 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/exceptions.py +12 -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.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/backups.py +21 -3
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/cluster.py +80 -38
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/config.py +29 -17
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/ldap.py +2 -1
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/mongo.py +71 -29
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/mongodb_operator.py +561 -229
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/mongos_operator.py +141 -70
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/sharding.py +196 -170
- 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.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/app_peer_state.py +17 -8
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/charm_state.py +107 -170
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/cluster_state.py +9 -1
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/config_server_state.py +15 -39
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/models.py +2 -2
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/tls_state.py +39 -12
- {mongo_charms_single_kernel-1.7.2 → 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.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/helpers.py +4 -25
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongo_config.py +32 -8
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongo_connection.py +1 -1
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongodb_users.py +54 -24
- mongo_charms_single_kernel-1.7.2/single_kernel_mongo/config/statuses.py +0 -430
- mongo_charms_single_kernel-1.7.2/single_kernel_mongo/core/abstract_upgrades.py +0 -890
- mongo_charms_single_kernel-1.7.2/single_kernel_mongo/core/kubernetes_upgrades.py +0 -194
- mongo_charms_single_kernel-1.7.2/single_kernel_mongo/core/machine_upgrades.py +0 -188
- mongo_charms_single_kernel-1.7.2/single_kernel_mongo/events/password_actions.py +0 -103
- mongo_charms_single_kernel-1.7.2/single_kernel_mongo/events/tls.py +0 -207
- mongo_charms_single_kernel-1.7.2/single_kernel_mongo/events/upgrades.py +0 -157
- mongo_charms_single_kernel-1.7.2/single_kernel_mongo/lib/charms/tls_certificates_interface/v3/tls_certificates.py +0 -2123
- mongo_charms_single_kernel-1.7.2/single_kernel_mongo/managers/tls.py +0 -367
- mongo_charms_single_kernel-1.7.2/single_kernel_mongo/managers/upgrade.py +0 -334
- mongo_charms_single_kernel-1.7.2/single_kernel_mongo/state/upgrade_state.py +0 -134
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/LICENSE +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/README.md +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/__init__.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/config/__init__.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/__init__.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/core/secrets.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/__init__.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/ldap.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/events/primary_action.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/__init__.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/k8s.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/managers/observability.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/observability_rules/__init__.py +0 -0
- {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
- {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
- {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
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/observability_rules/loki/.gitkeep +0 -0
- {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
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/__init__.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/abstract_state.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/state/ldap_state.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/templates/__init__.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/templates/ldap.conf.j2 +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/templates/logrotate.j2 +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/__init__.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/event_helpers.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/utils/mongo_error_codes.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/__init__.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/backup_workload.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/log_rotate_workload.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/mongodb_workload.py +0 -0
- {mongo_charms_single_kernel-1.7.2 → mongo_charms_single_kernel-1.8.19}/single_kernel_mongo/workload/mongos_workload.py +0 -0
- {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.
|
|
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
|
-
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.
|
|
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
|
|
45
|
-
"""The
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
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 = "
|
|
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
|
-
|
|
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"
|