From 4abdf2421b0e0e7ee33535e7b05c4315deb3ec26 Mon Sep 17 00:00:00 2001 From: Hemanth Nakkina Date: Tue, 23 Apr 2024 18:01:17 +0530 Subject: [PATCH] Handle wait for application gone in plugin disable Wait for applications to be removed during plugin disable --- .github/workflows/build-snap.yml | 8 ++++---- .github/workflows/test-snap-with-k8s.yml | 8 ++++---- .../sunbeam/plugins/interface/v1/openstack.py | 14 ++++++++++++-- .../tests/unit/sunbeam/plugins/test_openstack.py | 13 +++++++++++++ 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-snap.yml b/.github/workflows/build-snap.yml index bcc8c127..593e95ec 100644 --- a/.github/workflows/build-snap.yml +++ b/.github/workflows/build-snap.yml @@ -55,8 +55,8 @@ jobs: sg snap_daemon "openstack.sunbeam configure -a" sg snap_daemon "openstack.sunbeam launch" sg snap_daemon "openstack.sunbeam enable orchestration" - # sg snap_daemon "openstack.sunbeam enable loadbalancer" - # sg snap_daemon "openstack.sunbeam enable dns --nameservers=testing.github." + sg snap_daemon "openstack.sunbeam enable loadbalancer" + sg snap_daemon "openstack.sunbeam enable dns --nameservers=testing.github." sg snap_daemon "openstack.sunbeam enable telemetry" sg snap_daemon "openstack.sunbeam enable observability" sg snap_daemon "openstack.sunbeam enable vault" @@ -72,8 +72,8 @@ jobs: # Commented disabling observability due to LP#1998282 # sg snap_daemon "openstack.sunbeam disable observability" # sg snap_daemon "openstack.sunbeam disable telemetry" - # sg snap_daemon "openstack.sunbeam disable dns" - # sg snap_daemon "openstack.sunbeam disable loadbalancer" + sg snap_daemon "openstack.sunbeam disable dns" + sg snap_daemon "openstack.sunbeam disable loadbalancer" sg snap_daemon "openstack.sunbeam disable orchestration" # sg snap_daemon "openstack.sunbeam disable validation" diff --git a/.github/workflows/test-snap-with-k8s.yml b/.github/workflows/test-snap-with-k8s.yml index b5e4bd59..40fa7d78 100644 --- a/.github/workflows/test-snap-with-k8s.yml +++ b/.github/workflows/test-snap-with-k8s.yml @@ -37,8 +37,8 @@ jobs: sg snap_daemon "sunbeam configure -a" sg snap_daemon "sunbeam launch" sg snap_daemon "sunbeam enable orchestration" - # sg snap_daemon "sunbeam enable loadbalancer" - # sg snap_daemon "sunbeam enable dns --nameservers=testing.github." + sg snap_daemon "sunbeam enable loadbalancer" + sg snap_daemon "sunbeam enable dns --nameservers=testing.github." sg snap_daemon "sunbeam enable telemetry" sg snap_daemon "sunbeam enable observability" sg snap_daemon "sunbeam enable vault" @@ -56,8 +56,8 @@ jobs: # Commented disabling observability due to LP#1998282 # sg snap_daemon "sunbeam disable observability" # sg snap_daemon "sunbeam disable telemetry" - # sg snap_daemon "sunbeam disable dns" - # sg snap_daemon "sunbeam disable loadbalancer" + sg snap_daemon "sunbeam disable dns" + sg snap_daemon "sunbeam disable loadbalancer" sg snap_daemon "sunbeam disable orchestration" # sg snap_daemon "sunbeam disable validation" diff --git a/sunbeam-python/sunbeam/plugins/interface/v1/openstack.py b/sunbeam-python/sunbeam/plugins/interface/v1/openstack.py index 881f8045..0cf50dfe 100644 --- a/sunbeam-python/sunbeam/plugins/interface/v1/openstack.py +++ b/sunbeam-python/sunbeam/plugins/interface/v1/openstack.py @@ -437,7 +437,7 @@ def run(self, status: Optional[Status] = None) -> Result: self.jhelper.wait_until_active( self.model, apps, - timeout=APPLICATION_DEPLOY_TIMEOUT, + timeout=self.plugin.set_application_timeout_on_enable(), ) ) except (JujuWaitException, TimeoutException) as e: @@ -493,6 +493,16 @@ def run(self, status: Optional[Status] = None) -> Result: apps = self.plugin.set_application_names() LOG.debug(f"Application monitored for removal: {apps}") - # TODO(hemanth): Check if apps are removed or not. + try: + run_sync( + self.jhelper.wait_application_gone( + apps, + self.model, + timeout=self.plugin.set_application_timeout_on_disable(), + ) + ) + except TimeoutException as e: + LOG.debug(f"Failed to destroy {apps}", exc_info=True) + return Result(ResultType.FAILED, str(e)) return Result(ResultType.COMPLETED) diff --git a/sunbeam-python/tests/unit/sunbeam/plugins/test_openstack.py b/sunbeam-python/tests/unit/sunbeam/plugins/test_openstack.py index daf9352d..23de1668 100644 --- a/sunbeam-python/tests/unit/sunbeam/plugins/test_openstack.py +++ b/sunbeam-python/tests/unit/sunbeam/plugins/test_openstack.py @@ -146,6 +146,19 @@ def test_run_tf_apply_failed(self, cclient, jhelper, osplugin): assert result.result_type == ResultType.FAILED assert result.message == "apply failed..." + def test_run_waiting_timed_out( + self, cclient, read_config, jhelper, tfhelper, osplugin, manifest, pluginmanager + ): + jhelper.wait_application_gone.side_effect = TimeoutException("timed out") + + step = openstack.DisableOpenStackApplicationStep(jhelper, osplugin) + result = step.run() + + osplugin.manifest.update_tfvars_and_apply_tf.assert_called_once() + jhelper.wait_application_gone.assert_called_once() + assert result.result_type == ResultType.FAILED + assert result.message == "timed out" + class MockStatus: def __init__(self, value: dict):