diff --git a/lib/ansible/modules/network/vyos/vyos_config.py b/lib/ansible/modules/network/vyos/vyos_config.py index cc1961a809..c8e10360d1 100644 --- a/lib/ansible/modules/network/vyos/vyos_config.py +++ b/lib/ansible/modules/network/vyos/vyos_config.py @@ -269,9 +269,11 @@ def main(): run(module, result) if module.params['save']: - if not module.check_mode: - run_commands(module, ['save']) - result['changed'] = True + diff = run_commands(module, commands=['configure', 'compare saved'])[1] + if diff != '[edit]': + run_commands(module, commands=['save']) + result['changed'] = True + run_commands(module, commands=['exit']) module.exit_json(**result) diff --git a/test/integration/targets/vyos_config/tests/cli/save.yaml b/test/integration/targets/vyos_config/tests/cli/save.yaml new file mode 100644 index 0000000000..0eeeb80477 --- /dev/null +++ b/test/integration/targets/vyos_config/tests/cli/save.yaml @@ -0,0 +1,60 @@ +--- +- debug: msg="START cli/save.yaml" + +- name: setup + vyos_config: + lines: set system host-name {{ inventory_hostname_short }} + provider: "{{ cli }}" + match: none + +- name: configure hostaname and save + vyos_config: + lines: set system host-name foo + provider: "{{ cli }}" + save: true + register: result + +- assert: + that: + - "result.changed == true" + - "'set system host-name foo' in result.commands" + +- name: configure hostaname and don't save + vyos_config: + lines: set system host-name bar + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'set system host-name bar' in result.commands" + +- name: save config + vyos_config: + save: true + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + +- name: save config again + vyos_config: + save: true + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: teardown + vyos_config: + lines: set system host-name {{ inventory_hostname_short }} + provider: "{{ cli }}" + match: none + save: true + +- debug: msg="END cli/simple.yaml" diff --git a/test/units/modules/network/vyos/test_vyos_config.py b/test/units/modules/network/vyos/test_vyos_config.py index 6ecd9bc4e4..09dc7a0d2f 100644 --- a/test/units/modules/network/vyos/test_vyos_config.py +++ b/test/units/modules/network/vyos/test_vyos_config.py @@ -73,15 +73,6 @@ class TestVyosConfigModule(TestVyosModule): result = self.execute_module() self.assertIn('__backup__', result) - def test_vyos_config_save(self): - set_module_args(dict(save=True)) - self.execute_module(changed=True) - self.assertEqual(self.run_commands.call_count, 1) - self.assertEqual(self.get_config.call_count, 0) - self.assertEqual(self.load_config.call_count, 0) - args = self.run_commands.call_args[0][1] - self.assertIn('save', args) - def test_vyos_config_lines(self): commands = ['set system host-name foo'] set_module_args(dict(lines=commands))