diff --git a/changelogs/fragments/50-command-changed.yml b/changelogs/fragments/50-command-changed.yml new file mode 100644 index 00000000..fec925ac --- /dev/null +++ b/changelogs/fragments/50-command-changed.yml @@ -0,0 +1,2 @@ +breaking_changes: +- "command - the module now always indicates that a change happens. If this is not correct, please use ``changed_when`` to determine the correct changed status for a task (https://github.com/ansible-collections/community.routeros/pull/50)." diff --git a/plugins/modules/command.py b/plugins/modules/command.py index 82331a57..a96c7f0f 100644 --- a/plugins/modules/command.py +++ b/plugins/modules/command.py @@ -15,6 +15,9 @@ read from the device. This module includes an argument that will cause the module to wait for a specific condition before returning or timing out if the condition is not met. + - The module always indicates a (changed) status. You can use + R(the changed_when task property,override_the_changed_result) to determine + whether a command task actually resulted in a change or not. options: commands: description: @@ -168,7 +171,7 @@ def main(): module.fail_json(msg=msg, failed_conditions=failed_conditions) result.update({ - 'changed': False, + 'changed': True, 'stdout': responses, 'stdout_lines': list(to_lines(responses)) }) diff --git a/tests/unit/plugins/modules/test_command.py b/tests/unit/plugins/modules/test_command.py index ab045fe5..0bb4f07d 100644 --- a/tests/unit/plugins/modules/test_command.py +++ b/tests/unit/plugins/modules/test_command.py @@ -61,20 +61,20 @@ def load_from_file(*args, **kwargs): def test_command_simple(self): set_module_args(dict(commands=['/system resource print'])) - result = self.execute_module() + result = self.execute_module(changed=True) self.assertEqual(len(result['stdout']), 1) self.assertTrue('platform: "MikroTik"' in result['stdout'][0]) def test_command_multiple(self): set_module_args(dict(commands=['/system resource print', '/system resource print'])) - result = self.execute_module() + result = self.execute_module(changed=True) self.assertEqual(len(result['stdout']), 2) self.assertTrue('platform: "MikroTik"' in result['stdout'][0]) def test_command_wait_for(self): wait_for = 'result[0] contains "MikroTik"' set_module_args(dict(commands=['/system resource print'], wait_for=wait_for)) - self.execute_module() + self.execute_module(changed=True) def test_command_wait_for_fails(self): wait_for = 'result[0] contains "test string"' @@ -92,13 +92,13 @@ def test_command_match_any(self): wait_for = ['result[0] contains "MikroTik"', 'result[0] contains "test string"'] set_module_args(dict(commands=['/system resource print'], wait_for=wait_for, match='any')) - self.execute_module() + self.execute_module(changed=True) def test_command_match_all(self): wait_for = ['result[0] contains "MikroTik"', 'result[0] contains "RB1100"'] set_module_args(dict(commands=['/system resource print'], wait_for=wait_for, match='all')) - self.execute_module() + self.execute_module(changed=True) def test_command_match_all_failure(self): wait_for = ['result[0] contains "MikroTik"', @@ -110,4 +110,4 @@ def test_command_match_all_failure(self): def test_command_wait_for_2(self): wait_for = 'result[0] contains "wireless"' set_module_args(dict(commands=['/system package print'], wait_for=wait_for)) - self.execute_module() + self.execute_module(changed=True)