Skip to content

Commit c59e0b9

Browse files
Modify stonith action retrieval and improve test coverage for _get_stonith_action method (#12)
Modify stonith action retrieval to use local cluster commands instead of cibadmin query; as that throws an error when the stonith-action is not explicitly set.
1 parent 33c09db commit c59e0b9

File tree

2 files changed

+46
-16
lines changed

2 files changed

+46
-16
lines changed

src/module_utils/get_cluster_status.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,20 @@ def _get_stonith_action(self) -> None:
4848
"""
4949
Retrieves the stonith action from the system.
5050
"""
51+
self.result["stonith_action"] = "unknown"
5152
try:
5253
stonith_action = self.execute_command_subprocess(STONITH_ACTION[self.ansible_os_family])
53-
stonith_action = (
54-
stonith_action.split("stonith-action:")[-1]
55-
if self.ansible_os_family == "REDHAT"
56-
else stonith_action
57-
)
58-
self.result["stonith_action"] = stonith_action.strip()
59-
except Exception:
60-
self.result["stonith_action"] = "reboot"
54+
actions = [
55+
"reboot",
56+
"poweroff",
57+
"off",
58+
]
59+
for action in actions:
60+
if action in stonith_action:
61+
self.result["stonith_action"] = action
62+
break
63+
except Exception as ex:
64+
self.log(logging.WARNING, f"Failed to get stonith action: {str(ex)}")
6165

6266
def _validate_cluster_basic_status(self, cluster_status_xml: ET.Element):
6367
"""

tests/module_utils/get_cluster_status_test.py

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def base_checker(self):
6666
"""
6767
return TestableBaseClusterChecker(ansible_os_family="REDHAT")
6868

69-
def test_get_stonith_action(self, mocker, base_checker):
69+
def test_get_stonith_action_rhel94(self, mocker, base_checker):
7070
"""
7171
Test the _get_stonith_action method when the command executes successfully.
7272
@@ -75,14 +75,40 @@ def test_get_stonith_action(self, mocker, base_checker):
7575
:param base_checker: Instance of TestableBaseClusterChecker.
7676
:type base_checker: TestableBaseClusterChecker
7777
"""
78-
mock_execute = mocker.patch.object(
79-
base_checker, "execute_command_subprocess", return_value="stonith-action:reboot"
80-
)
78+
return_values = ["reboot", "poweroff", "off"]
79+
for return_value in return_values:
80+
mock_execute = mocker.patch.object(
81+
base_checker,
82+
"execute_command_subprocess",
83+
return_value="Cluster Properties: cib-bootstrap-options\n"
84+
+ f" stonith-action={return_value}",
85+
)
8186

82-
base_checker._get_stonith_action()
87+
base_checker._get_stonith_action()
88+
mock_execute.assert_called_once()
89+
assert base_checker.result["stonith_action"] == return_value
8390

84-
mock_execute.assert_called_once()
85-
assert base_checker.result["stonith_action"] == "reboot"
91+
def test_get_stonith_action(self, mocker, base_checker):
92+
"""
93+
Test the _get_stonith_action method when the command executes successfully.
94+
95+
:param mocker: Mocking library to patch methods.
96+
:type mocker: mocker.MockerFixture
97+
:param base_checker: Instance of TestableBaseClusterChecker.
98+
:type base_checker: TestableBaseClusterChecker
99+
"""
100+
return_values = ["reboot", "poweroff", "off"]
101+
for return_value in return_values:
102+
mock_execute = mocker.patch.object(
103+
base_checker,
104+
"execute_command_subprocess",
105+
return_value="Cluster Properties: cib-bootstrap-options\n"
106+
+ f" stonith-action: {return_value}",
107+
)
108+
109+
base_checker._get_stonith_action()
110+
mock_execute.assert_called_once()
111+
assert base_checker.result["stonith_action"] == return_value
86112

87113
def test_get_stonith_action_exception(self, mocker, base_checker):
88114
"""
@@ -100,7 +126,7 @@ def test_get_stonith_action_exception(self, mocker, base_checker):
100126
base_checker._get_stonith_action()
101127

102128
mock_execute.assert_called_once()
103-
assert base_checker.result["stonith_action"] == "reboot"
129+
assert base_checker.result["stonith_action"] == "unknown"
104130

105131
def test_validate_cluster_basic_status_success(self, mocker, base_checker):
106132
"""

0 commit comments

Comments
 (0)