From f956ef22be2cedf160dc3730fbb098248a72b23c Mon Sep 17 00:00:00 2001 From: Tobias Wolf Date: Thu, 5 Sep 2024 16:17:29 +0200 Subject: [PATCH 1/2] Handle access to undefined states gracefully Fixes: #76 Signed-off-by: Tobias Wolf --- src/rookify/modules/machine.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/rookify/modules/machine.py b/src/rookify/modules/machine.py index cb8c9d5..fc2a7aa 100644 --- a/src/rookify/modules/machine.py +++ b/src/rookify/modules/machine.py @@ -92,7 +92,12 @@ def _get_state_tags_data(self, name: str) -> Dict[str, Any]: return data def get_execution_state(self, name: str) -> Any: - return self.get_state(self.__class__.STATE_NAME_EXECUTION_PREFIX + name) + state_name = self.__class__.STATE_NAME_EXECUTION_PREFIX + name + + if state_name not in self.states: + return None + + return self.get_state(state_name) def get_execution_state_data( self, name: str, tag: str, default_value: Any = None @@ -100,7 +105,12 @@ def get_execution_state_data( return getattr(self.get_execution_state(name), tag, default_value) def get_preflight_state(self, name: str) -> Any: - return self.get_state(self.__class__.STATE_NAME_PREFLIGHT_PREFIX + name) + state_name = self.__class__.STATE_NAME_PREFLIGHT_PREFIX + name + + if state_name not in self.states: + return None + + return self.get_state(state_name) def get_preflight_state_data( self, name: str, tag: str, default_value: Any = None From 072ac3c65204461b1cd42a2b952fdd230d69d1d1 Mon Sep 17 00:00:00 2001 From: Tobias Wolf Date: Thu, 5 Sep 2024 16:19:58 +0200 Subject: [PATCH 2/2] Fix state access if executed in dry-run mode Signed-off-by: Tobias Wolf --- src/rookify/modules/__init__.py | 7 ++++++- .../modules/create_rook_cluster/main.py | 18 ++++++++---------- src/rookify/modules/migrate_mds_pools/main.py | 5 ++--- src/rookify/modules/migrate_mgrs/main.py | 2 +- src/rookify/modules/migrate_mons/main.py | 2 +- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/rookify/modules/__init__.py b/src/rookify/modules/__init__.py index a5c4947..3ed9a0b 100644 --- a/src/rookify/modules/__init__.py +++ b/src/rookify/modules/__init__.py @@ -30,7 +30,12 @@ def _load_module(machine: Machine, config: Dict[str, Any], module_name: str) -> :return: returns tuple of preflight_modules, modules """ - module = importlib.import_module("rookify.modules.{0}".format(module_name)) + if "." in module_name: + absolute_module_name = module_name + else: + absolute_module_name = "rookify.modules.{0}".format(module_name) + + module = importlib.import_module(absolute_module_name) additional_modules = [] if not hasattr(module, "ModuleHandler") or not callable( diff --git a/src/rookify/modules/create_rook_cluster/main.py b/src/rookify/modules/create_rook_cluster/main.py index 28ce87a..4d7d0a1 100644 --- a/src/rookify/modules/create_rook_cluster/main.py +++ b/src/rookify/modules/create_rook_cluster/main.py @@ -15,9 +15,11 @@ class CreateRookClusterHandler(ModuleHandler): ] def preflight(self) -> None: - if self.machine.get_execution_state_data( - "CreateRookClusterHandler", "generated", default_value=False - ): + cluster_definition = self.machine.get_preflight_state_data( + "CreateRookClusterHandler", "cluster_definition" + ) + + if cluster_definition is not None: return state_data = self.machine.get_preflight_state("AnalyzeCephHandler").data @@ -63,13 +65,9 @@ def preflight(self) -> None: if mgr_count > 5: mgr_count = rook_config["cluster"].get("max_mgr_count", 5) - self.machine.get_execution_state( - "CreateRookClusterHandler" - ).mgr_count = mgr_count - - self.machine.get_execution_state( - "CreateRookClusterHandler" - ).mon_count = mon_count + state = self.machine.get_preflight_state("CreateRookClusterHandler") + state.mgr_count = mgr_count + state.mon_count = mon_count cluster_definition_values = { "cluster_name": rook_config["cluster"]["name"], diff --git a/src/rookify/modules/migrate_mds_pools/main.py b/src/rookify/modules/migrate_mds_pools/main.py index 8a796dd..fd822b3 100644 --- a/src/rookify/modules/migrate_mds_pools/main.py +++ b/src/rookify/modules/migrate_mds_pools/main.py @@ -39,9 +39,8 @@ def preflight(self) -> None: if pool_data_osd_name not in migrated_pools: migrated_pools.append(pool_data_osd_name) - self.machine.get_execution_state( - "MigrateMdsPoolsHandler" - ).migrated_pools = migrated_pools + state = self.machine.get_execution_state("MigrateMdsPoolsHandler") + if state is not None: state.migrated_pools = migrated_pools continue diff --git a/src/rookify/modules/migrate_mgrs/main.py b/src/rookify/modules/migrate_mgrs/main.py index 29be0f7..79e9335 100644 --- a/src/rookify/modules/migrate_mgrs/main.py +++ b/src/rookify/modules/migrate_mgrs/main.py @@ -81,7 +81,7 @@ def _migrate_mgr(self, mgr_host: str) -> None: "MigrateMgrsHandler" ).migrated_mgrs = migrated_mgrs - mgr_count_expected = self.machine.get_execution_state_data( + mgr_count_expected = self.machine.get_preflight_state_data( "CreateRookClusterHandler", "mgr_count", default_value=3 ) diff --git a/src/rookify/modules/migrate_mons/main.py b/src/rookify/modules/migrate_mons/main.py index 596ddb8..e7dbab1 100644 --- a/src/rookify/modules/migrate_mons/main.py +++ b/src/rookify/modules/migrate_mons/main.py @@ -97,7 +97,7 @@ def _migrate_mon(self, mon: Dict[str, Any]) -> None: "MigrateMonsHandler", ).migrated_mons = migrated_mons - mon_count_expected = self.machine.get_execution_state_data( + mon_count_expected = self.machine.get_preflight_state_data( "CreateRookClusterHandler", "mon_count", default_value=3 )