Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ classifiers = [

dependencies = [
"alembic",
"kubernetes",
"psycopg2",
"pydantic>=2.0.0",
"PyYAML",
"wiremind-kubernetes~=7.0",
]

[build-system]
Expand Down
6 changes: 1 addition & 5 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,10 @@ durationpy==0.10
# via kubernetes
google-auth==2.41.1
# via kubernetes
greenlet==3.2.4
# via sqlalchemy
idna==3.10
# via requests
kubernetes==34.1.0
# via wiremind-kubernetes
# via chartreuse (pyproject.toml)
mako==1.3.10
# via alembic
markupsafe==3.0.3
Expand Down Expand Up @@ -75,5 +73,3 @@ urllib3==2.3.0
# requests
websocket-client==1.9.0
# via kubernetes
wiremind-kubernetes==7.5.0
# via chartreuse (pyproject.toml)
9 changes: 3 additions & 6 deletions src/chartreuse/chartreuse.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import logging

import wiremind_kubernetes.kubernetes_helper

from .config_loader import DatabaseConfig
from .utils import AlembicMigrationHelper
from .utils.kubernetes_helper import KubernetesDeploymentManager

logger = logging.getLogger(__name__)

Expand All @@ -23,7 +22,7 @@ def __init__(
self,
databases_config: dict[str, DatabaseConfig],
release_name: str,
kubernetes_helper: wiremind_kubernetes.kubernetes_helper.KubernetesDeploymentManager | None = None,
kubernetes_helper: KubernetesDeploymentManager | None = None,
):
configure_logging()

Expand Down Expand Up @@ -56,9 +55,7 @@ def __init__(
if kubernetes_helper:
self.kubernetes_helper = kubernetes_helper
else:
self.kubernetes_helper = wiremind_kubernetes.kubernetes_helper.KubernetesDeploymentManager(
use_kubeconfig=None, release_name=release_name
)
self.kubernetes_helper = KubernetesDeploymentManager(use_kubeconfig=None, release_name=release_name)

@property
def is_migration_needed(self) -> bool:
Expand Down
3 changes: 1 addition & 2 deletions src/chartreuse/chartreuse_upgrade.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import logging
import os

from wiremind_kubernetes import KubernetesDeploymentManager

from chartreuse import get_version

from .chartreuse import Chartreuse
from .config_loader import load_multi_database_config
from .utils.kubernetes_helper import KubernetesDeploymentManager

logger = logging.getLogger(__name__)

Expand Down
3 changes: 1 addition & 2 deletions src/chartreuse/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,8 @@ def configure_chartreuse_mock(

# Mock KubernetesDeploymentManager in all the right places
mock_kdm = mocker.MagicMock()
mocker.patch("wiremind_kubernetes.KubernetesDeploymentManager", return_value=mock_kdm)
mocker.patch("chartreuse.chartreuse_upgrade.KubernetesDeploymentManager", return_value=mock_kdm)

# Also mock the kubernetes config loading to prevent the config errors
mocker.patch("kubernetes.config.load_incluster_config")
mocker.patch("wiremind_kubernetes.kube_config.load_kubernetes_config")
mocker.patch("chartreuse.utils.kubernetes_helper.load_kubernetes_config")
16 changes: 12 additions & 4 deletions src/chartreuse/tests/e2e_tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,10 @@
import pytest
import sqlalchemy
from sqlalchemy import inspect
from wiremind_kubernetes.kube_config import load_kubernetes_config
from wiremind_kubernetes.kubernetes_helper import KubernetesDeploymentManager
from wiremind_kubernetes.tests.e2e_tests.conftest import create_namespace, setUpE2E # noqa: F401
from wiremind_kubernetes.utils import run_command

import chartreuse
from chartreuse.utils.command import run_command
from chartreuse.utils.kubernetes_helper import KubernetesDeploymentManager, load_kubernetes_config

TEST_NAMESPACE = "chartreuse-e2e-test"
TEST_RELEASE = "e2e-test-release"
Expand All @@ -26,6 +24,16 @@
POSTGRESQL_URL = "postgresql://foo:foo@localhost/foo?sslmode=prefer"


@pytest.fixture(scope="session")
def create_namespace() -> Generator:
yield


@pytest.fixture(scope="session")
def setUpE2E() -> Generator:
yield


def _cluster_init(include_chartreuse: bool, pre_upgrade: bool = False) -> Generator:
# In order to configure kubernetes
load_kubernetes_config(use_kubeconfig=None)
Expand Down
2 changes: 1 addition & 1 deletion src/chartreuse/tests/unit_tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ def configure_chartreuse_mock(mocker: MockerFixture, is_migration_needed: bool =
)
mocker.patch("chartreuse.chartreuse_upgrade.Chartreuse.upgrade")
mocker.patch(
"wiremind_kubernetes.kubernetes_helper._get_namespace_from_kube",
"chartreuse.utils.kubernetes_helper._get_namespace_from_kube",
return_value="foo",
)
4 changes: 2 additions & 2 deletions src/chartreuse/tests/unit_tests/test_chartreuse.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ def test_chartreuse_init_without_kubernetes_helper(self, mocker: MockerFixture)
mock_alembic_helper.return_value = mock_alembic_instance

# Mock KubernetesDeploymentManager
mock_k8s_manager = mocker.patch("wiremind_kubernetes.kubernetes_helper.KubernetesDeploymentManager")
mock_k8s_manager = mocker.patch("chartreuse.chartreuse.KubernetesDeploymentManager")
mock_k8s_instance = MagicMock()
mock_k8s_manager.return_value = mock_k8s_instance

Expand Down Expand Up @@ -315,7 +315,7 @@ def test_multi_chartreuse_init_without_kubernetes_helper(self, mocker: MockerFix
mock_alembic_helper.return_value = mock_alembic_instance

# Mock KubernetesDeploymentManager
mock_k8s_manager = mocker.patch("wiremind_kubernetes.kubernetes_helper.KubernetesDeploymentManager")
mock_k8s_manager = mocker.patch("chartreuse.chartreuse.KubernetesDeploymentManager")
mock_k8s_instance = MagicMock()
mock_k8s_manager.return_value = mock_k8s_instance

Expand Down
12 changes: 6 additions & 6 deletions src/chartreuse/tests/unit_tests/test_chartreuse_upgrade.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ def test_chartreuse_upgrade_detected_migration_enabled_stop_pods(
Test that chartreuse_upgrades stop pods in case of detected migration.
"""
configure_chartreuse_mock(mocker=mocker, is_migration_needed=True)
mocked_stop_pods = mocker.patch("wiremind_kubernetes.KubernetesDeploymentManager.stop_pods")
mocker.patch("wiremind_kubernetes.KubernetesDeploymentManager.start_pods")
mocked_stop_pods = mocker.patch("chartreuse.chartreuse_upgrade.KubernetesDeploymentManager.stop_pods")
mocker.patch("chartreuse.chartreuse_upgrade.KubernetesDeploymentManager.start_pods")
mocker.patch("chartreuse.chartreuse_upgrade.get_version", return_value="5.0.0")
configure_os_environ_mock(mocker=mocker, additional_environment={"HELM_CHART_VERSION": "5.0.0"})

Expand All @@ -30,8 +30,8 @@ def test_chartreuse_upgrade_detected_migration_disabled_stop_pods(
Test that chartreuse_upgrades does not stop pods in case of detected migration but we disallow stop-pods.
"""
configure_chartreuse_mock(mocker=mocker, is_migration_needed=True)
mocked_stop_pods = mocker.patch("wiremind_kubernetes.KubernetesDeploymentManager.stop_pods")
mocker.patch("wiremind_kubernetes.KubernetesDeploymentManager.start_pods")
mocked_stop_pods = mocker.patch("chartreuse.chartreuse_upgrade.KubernetesDeploymentManager.stop_pods")
mocker.patch("chartreuse.chartreuse_upgrade.KubernetesDeploymentManager.start_pods")
mocker.patch("chartreuse.chartreuse_upgrade.get_version", return_value="5.0.0")
configure_os_environ_mock(
mocker=mocker,
Expand All @@ -49,8 +49,8 @@ def test_chartreuse_upgrade_no_migration_disabled_stop_pods(
Test that chartreuse_upgrades does NOT stop pods in case of migration not needed.
"""
configure_chartreuse_mock(mocker=mocker, is_migration_needed=False)
mocked_stop_pods = mocker.patch("wiremind_kubernetes.KubernetesDeploymentManager.stop_pods")
mocker.patch("wiremind_kubernetes.KubernetesDeploymentManager.start_pods")
mocked_stop_pods = mocker.patch("chartreuse.chartreuse_upgrade.KubernetesDeploymentManager.stop_pods")
mocker.patch("chartreuse.chartreuse_upgrade.KubernetesDeploymentManager.start_pods")
mocker.patch("chartreuse.chartreuse_upgrade.get_version", return_value="5.0.0")
configure_os_environ_mock(mocker=mocker, additional_environment={"HELM_CHART_VERSION": "5.0.0"})

Expand Down
2 changes: 2 additions & 0 deletions src/chartreuse/utils/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
from .alembic_migration_helper import AlembicMigrationHelper # noqa: F401
from .command import run_command # noqa: F401
from .kubernetes_helper import KubernetesDeploymentManager, load_kubernetes_config # noqa: F401
3 changes: 2 additions & 1 deletion src/chartreuse/utils/alembic_migration_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@

import sqlalchemy
from sqlalchemy import inspect
from wiremind_kubernetes.utils import run_command

from .command import run_command

logger = logging.getLogger(__name__)

Expand Down
22 changes: 22 additions & 0 deletions src/chartreuse/utils/command.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import subprocess


def run_command(
command: str,
*,
cwd: str | None = None,
return_result: bool = False,
) -> tuple[str, str | None, int] | None:
result = subprocess.run(
command,
cwd=cwd,
shell=True,
check=not return_result,
capture_output=return_result,
text=True,
)

if return_result:
return result.stdout, result.stderr, result.returncode

return None
Loading
Loading