From 8a2d1d6b937a5aee4790535a5d16f0fbfcc9cc45 Mon Sep 17 00:00:00 2001 From: Ramin Gharib Date: Fri, 3 Feb 2023 17:17:22 +0100 Subject: [PATCH] Add --create-namespace option to helm (#91) FIxes #90 --- .github/workflows/ci.yaml | 2 +- kpops/cli/pipeline_config.py | 1 + kpops/component_handlers/helm_wrapper/helm.py | 2 ++ kpops/component_handlers/helm_wrapper/model.py | 1 + kpops/components/base_components/kafka_app.py | 1 + kpops/components/base_components/kafka_connect.py | 5 ++++- kpops/components/base_components/kubernetes_app.py | 4 +++- tests/component_handlers/helm_wrapper/test_helm_wrapper.py | 2 ++ 8 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ed553d733..e271bb8aa 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -50,6 +50,6 @@ jobs: publish: name: Publish needs: [test] - uses: ./.github/workflows/publish-dev.yaml + uses: ./.github/workflows/publish-test-pypi.yaml secrets: test-pypi-token: ${{ secrets.TEST_PYPI_TOKEN }} diff --git a/kpops/cli/pipeline_config.py b/kpops/cli/pipeline_config.py index 71b0bfa6f..393aa9085 100644 --- a/kpops/cli/pipeline_config.py +++ b/kpops/cli/pipeline_config.py @@ -68,6 +68,7 @@ class PipelineConfig(BaseSettings): description="Pipeline prefix that will prefix every component name. If you wish to not have any prefix you can specify an empty string.", ) + create_namespace: bool = Field(default=False) helm_config: HelmConfig = Field(default=HelmConfig()) helm_diff_config: HelmDiffConfig = Field(default=HelmDiffConfig()) diff --git a/kpops/component_handlers/helm_wrapper/helm.py b/kpops/component_handlers/helm_wrapper/helm.py index fddd729e5..030792684 100644 --- a/kpops/component_handlers/helm_wrapper/helm.py +++ b/kpops/component_handlers/helm_wrapper/helm.py @@ -178,6 +178,8 @@ def __enrich_upgrade_install_command( dry_run: bool, helm_command_config: HelmUpgradeInstallFlags, ) -> list[str]: + if helm_command_config.create_namespace: + command.append("--create-namespace") if dry_run: command.append("--dry-run") if helm_command_config.force: diff --git a/kpops/component_handlers/helm_wrapper/model.py b/kpops/component_handlers/helm_wrapper/model.py index d0197a66a..b29faba66 100644 --- a/kpops/component_handlers/helm_wrapper/model.py +++ b/kpops/component_handlers/helm_wrapper/model.py @@ -40,6 +40,7 @@ class HelmConfig: @dataclass class HelmUpgradeInstallFlags: + create_namespace: bool = False force: bool = False repo_auth_flags: RepoAuthFlags = field(default_factory=RepoAuthFlags) timeout: str = "5m0s" diff --git a/kpops/components/base_components/kafka_app.py b/kpops/components/base_components/kafka_app.py index bf3202bc7..062dee16d 100644 --- a/kpops/components/base_components/kafka_app.py +++ b/kpops/components/base_components/kafka_app.py @@ -136,6 +136,7 @@ def __install_clean_up_job( self.namespace, values, HelmUpgradeInstallFlags( + create_namespace=self.config.create_namespace, version=self.version, wait=True, wait_for_jobs=True, diff --git a/kpops/components/base_components/kafka_connect.py b/kpops/components/base_components/kafka_connect.py index 4929b9c58..795ac989a 100644 --- a/kpops/components/base_components/kafka_connect.py +++ b/kpops/components/base_components/kafka_connect.py @@ -176,7 +176,10 @@ def __install_connect_resetter( chart=self.kafka_connect_resetter_chart, dry_run=dry_run, flags=HelmUpgradeInstallFlags( - version=self.version, wait_for_jobs=True, wait=True + create_namespace=self.config.create_namespace, + version=self.version, + wait_for_jobs=True, + wait=True, ), values={ **KafkaConnectResetterValues( diff --git a/kpops/components/base_components/kubernetes_app.py b/kpops/components/base_components/kubernetes_app.py index ca115c24f..fa5667e03 100644 --- a/kpops/components/base_components/kubernetes_app.py +++ b/kpops/components/base_components/kubernetes_app.py @@ -78,7 +78,9 @@ def deploy(self, dry_run: bool) -> None: dry_run, self.namespace, self.to_helm_values(), - HelmUpgradeInstallFlags(version=self.version), + HelmUpgradeInstallFlags( + create_namespace=self.config.create_namespace, version=self.version + ), ) if dry_run and self.helm_diff.config.enable: self.print_helm_diff(stdout) diff --git a/tests/component_handlers/helm_wrapper/test_helm_wrapper.py b/tests/component_handlers/helm_wrapper/test_helm_wrapper.py index d59979615..e7e873cf4 100644 --- a/tests/component_handlers/helm_wrapper/test_helm_wrapper.py +++ b/tests/component_handlers/helm_wrapper/test_helm_wrapper.py @@ -138,6 +138,7 @@ def test_should_call_run_command_method_when_helm_install_with_non_defaults( dry_run=True, values={"commandLine": "test"}, flags=HelmUpgradeInstallFlags( + create_namespace=True, force=True, timeout="120s", wait=True, @@ -157,6 +158,7 @@ def test_should_call_run_command_method_when_helm_install_with_non_defaults( "test-namespace", "--values", "values.yaml", + "--create-namespace", "--dry-run", "--force", "--wait",