From ab0a709a532f8065168ea99f15f9c8a81f0f100a Mon Sep 17 00:00:00 2001 From: Munir Siddiqui Date: Wed, 12 Aug 2026 12:20:18 +0500 Subject: [PATCH] fix: add telemetry notifications support for manila-data - Add `enable-telemetry-notifications` variable to the manila-data terraform plan - Add `feature_manager.is_feature_enabled("telemetry")` check in `DeployManilaDataApplicationStep.extra_tfvars()` - Reapply manila-data in telemetry feature enable/disable plans when shared-filesystem is active - Fix existing unit tests to account for the new telemetry flag Related-bug: #2162762 Signed-off-by: Munir Siddiqui --- .../etc/deploy-manila-data/main.tf | 3 +- .../etc/deploy-manila-data/variables.tf | 6 +++ .../features/shared_filesystem/manila_data.py | 11 +++++ .../sunbeam/features/telemetry/feature.py | 41 +++++++++++++++++++ .../shared_filesystem/test_manila_data.py | 4 ++ .../unit/sunbeam/features/test_telemetry.py | 3 ++ 6 files changed, 67 insertions(+), 1 deletion(-) diff --git a/sunbeam-python/sunbeam/features/shared_filesystem/etc/deploy-manila-data/main.tf b/sunbeam-python/sunbeam/features/shared_filesystem/etc/deploy-manila-data/main.tf index 442c16ec7..66f703d04 100644 --- a/sunbeam-python/sunbeam/features/shared_filesystem/etc/deploy-manila-data/main.tf +++ b/sunbeam-python/sunbeam/features/shared_filesystem/etc/deploy-manila-data/main.tf @@ -31,7 +31,8 @@ resource "juju_application" "manila-data" { } config = merge({ - snap-channel = var.manila-data-channel + snap-channel = var.manila-data-channel + enable-telemetry-notifications = var.enable-telemetry-notifications }, var.charm-manila-data-config) endpoint_bindings = var.endpoint_bindings } diff --git a/sunbeam-python/sunbeam/features/shared_filesystem/etc/deploy-manila-data/variables.tf b/sunbeam-python/sunbeam/features/shared_filesystem/etc/deploy-manila-data/variables.tf index 905ea6d11..369a3a7c7 100644 --- a/sunbeam-python/sunbeam/features/shared_filesystem/etc/deploy-manila-data/variables.tf +++ b/sunbeam-python/sunbeam/features/shared_filesystem/etc/deploy-manila-data/variables.tf @@ -59,3 +59,9 @@ variable "database-offer-url" { type = string default = null } + +variable "enable-telemetry-notifications" { + description = "Enable telemetry notifications for manila-data" + type = bool + default = false +} diff --git a/sunbeam-python/sunbeam/features/shared_filesystem/manila_data.py b/sunbeam-python/sunbeam/features/shared_filesystem/manila_data.py index d2792980c..89090f5d0 100644 --- a/sunbeam-python/sunbeam/features/shared_filesystem/manila_data.py +++ b/sunbeam-python/sunbeam/features/shared_filesystem/manila_data.py @@ -52,6 +52,7 @@ def __init__( jhelper: JujuHelper, manifest: Manifest, model: str, + extra_tfvars: dict | None = None, ): super().__init__( deployment, @@ -67,6 +68,7 @@ def __init__( "Deploying Manila Data", ) self._offers: dict[str, str | None] = {} + self.override_tfvars: dict[str, Any] = extra_tfvars or {} def get_application_timeout(self) -> int: """Return application timeout in seconds.""" @@ -133,6 +135,15 @@ def extra_tfvars(self) -> dict: tfvars.update(self._get_offers()) + feature_manager = self.deployment.get_feature_manager() + if feature_manager.is_feature_enabled(self.deployment, "telemetry"): + tfvars["enable-telemetry-notifications"] = True + else: + tfvars["enable-telemetry-notifications"] = False + + # Any tfvars that needs override will take precedence from self.override_tfvars + tfvars.update(self.override_tfvars) + return tfvars diff --git a/sunbeam-python/sunbeam/features/telemetry/feature.py b/sunbeam-python/sunbeam/features/telemetry/feature.py index 817d9a939..4f96f2c23 100644 --- a/sunbeam-python/sunbeam/features/telemetry/feature.py +++ b/sunbeam-python/sunbeam/features/telemetry/feature.py @@ -24,6 +24,9 @@ OpenStackControlPlaneFeature, TerraformPlanLocation, ) +from sunbeam.features.shared_filesystem.manila_data import ( + DeployManilaDataApplicationStep, +) from sunbeam.steps.cinder_volume import DeployCinderVolumeApplicationStep from sunbeam.steps.hypervisor import ReapplyHypervisorTerraformPlanStep from sunbeam.steps.juju import RemoveSaasApplicationsStep @@ -204,6 +207,25 @@ def run_enable_plans( if len(plan3) > 1: # More than just TerraformInitStep run_plan(plan3, console, show_hints) + # Reapply manila-data if shared-filesystem feature is enabled + feature_manager = deployment.get_feature_manager() + if feature_manager.is_feature_enabled(deployment, "shared-filesystem"): + tfhelper_manila_data = deployment.get_tfhelper("manila-data-plan") + extra_tfvars_manila_data = {"enable-telemetry-notifications": True} + manila_data_plan: list[BaseStep] = [ + TerraformInitStep(tfhelper_manila_data), + DeployManilaDataApplicationStep( + deployment, + deployment.get_client(), + tfhelper_manila_data, + jhelper, + self.manifest, + deployment.openstack_machines_model, + extra_tfvars=extra_tfvars_manila_data, + ), + ] + run_plan(manila_data_plan, console, show_hints) + click.echo(f"OpenStack {self.display_name} application enabled.") def run_disable_plans(self, deployment: Deployment, show_hints: bool) -> None: @@ -316,6 +338,25 @@ def run_disable_plans(self, deployment: Deployment, show_hints: bool) -> None: if len(plan2) > 1: # More than just TerraformInitStep run_plan(plan2, console, show_hints) + # Reapply manila-data if shared-filesystem feature is enabled + feature_manager = deployment.get_feature_manager() + if feature_manager.is_feature_enabled(deployment, "shared-filesystem"): + tfhelper_manila_data = deployment.get_tfhelper("manila-data-plan") + extra_tfvars_manila_data = {"enable-telemetry-notifications": False} + manila_data_plan: list[BaseStep] = [ + TerraformInitStep(tfhelper_manila_data), + DeployManilaDataApplicationStep( + deployment, + deployment.get_client(), + tfhelper_manila_data, + jhelper, + self.manifest, + deployment.openstack_machines_model, + extra_tfvars=extra_tfvars_manila_data, + ), + ] + run_plan(manila_data_plan, console, show_hints) + click.echo(f"OpenStack {self.display_name} application disabled.") def set_application_names(self, deployment: Deployment) -> list: diff --git a/sunbeam-python/tests/unit/sunbeam/features/shared_filesystem/test_manila_data.py b/sunbeam-python/tests/unit/sunbeam/features/shared_filesystem/test_manila_data.py index dca4dfaff..5d49586b1 100644 --- a/sunbeam-python/tests/unit/sunbeam/features/shared_filesystem/test_manila_data.py +++ b/sunbeam-python/tests/unit/sunbeam/features/shared_filesystem/test_manila_data.py @@ -140,6 +140,9 @@ def test_extra_tfvars( Networks.INTERNAL: "internal", }[network] + feature_manager = basic_deployment.get_feature_manager.return_value + feature_manager.is_feature_enabled.return_value = False + tfvars = deploy_manila_data_step.extra_tfvars() expected_tfvars = { @@ -165,6 +168,7 @@ def test_extra_tfvars( "keystone-offer-url": "keystone-offer", "database-offer-url": "database-offer", "amqp-offer-url": "amqp-offer", + "enable-telemetry-notifications": False, } print(tfvars) print(expected_tfvars) diff --git a/sunbeam-python/tests/unit/sunbeam/features/test_telemetry.py b/sunbeam-python/tests/unit/sunbeam/features/test_telemetry.py index e74d95d75..604cadc67 100644 --- a/sunbeam-python/tests/unit/sunbeam/features/test_telemetry.py +++ b/sunbeam-python/tests/unit/sunbeam/features/test_telemetry.py @@ -17,6 +17,9 @@ def deployment(): client = deploy.get_client.return_value client.cluster.list_nodes_by_role.return_value = [{"name": "node1", "machineid": 1}] + feature_manager = deploy.get_feature_manager.return_value + feature_manager.is_feature_enabled.return_value = False + return deploy