diff --git a/lib/ansible/module_utils/network/vyos/vyos.py b/lib/ansible/module_utils/network/vyos/vyos.py index 2295a41242..dba75078db 100644 --- a/lib/ansible/module_utils/network/vyos/vyos.py +++ b/lib/ansible/module_utils/network/vyos/vyos.py @@ -133,10 +133,9 @@ def load_config(module, commands, commit=False, comment=None): connection = get_connection(module) try: - resp = connection.edit_config(candidate=commands, commit=commit, diff=module._diff, comment=comment) + resp = connection.edit_config(candidate=commands, commit=commit, comment=comment) resp = json.loads(resp) - diff_config = resp.get('diff') except ConnectionError as exc: module.fail_json(msg=to_text(exc)) - return diff_config + return resp.get('diff') diff --git a/lib/ansible/plugins/cliconf/__init__.py b/lib/ansible/plugins/cliconf/__init__.py index 4708fff182..2eb680b418 100644 --- a/lib/ansible/plugins/cliconf/__init__.py +++ b/lib/ansible/plugins/cliconf/__init__.py @@ -203,8 +203,6 @@ class CliconfBase(with_metaclass(ABCMeta, object)): :param replace: Boolean flag to indicate if running configuration should be completely replace by candidate configuration. - :param diff: Boolean flag to indicate if configuration that is applied on remote host should - generated and returned in response or not :param comment: Commit comment provided it is supported by remote host :return: Returns a json string with contains configuration applied on remote host, the returned response on executing configuration commands and platform relevant data. diff --git a/lib/ansible/plugins/cliconf/ios.py b/lib/ansible/plugins/cliconf/ios.py index ac9bb4cd0b..f276dcf6bc 100644 --- a/lib/ansible/plugins/cliconf/ios.py +++ b/lib/ansible/plugins/cliconf/ios.py @@ -124,7 +124,7 @@ class Cliconf(CliconfBase): return json.dumps(diff) @enable_mode - def edit_config(self, candidate=None, commit=True, replace=False, diff=False, comment=None): + def edit_config(self, candidate=None, commit=True, replace=False, comment=None): resp = {} if not candidate: raise ValueError("must provide a candidate config to load") @@ -151,11 +151,6 @@ class Cliconf(CliconfBase): results.append(self.send_command('end')) - diff_config = None - if diff: - diff_config = candidate - - resp['diff'] = diff_config resp['response'] = results[1:-1] return json.dumps(resp) diff --git a/lib/ansible/plugins/cliconf/vyos.py b/lib/ansible/plugins/cliconf/vyos.py index 430a2c1733..4b5d0e5085 100644 --- a/lib/ansible/plugins/cliconf/vyos.py +++ b/lib/ansible/plugins/cliconf/vyos.py @@ -19,6 +19,7 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type +import collections import re import json @@ -60,7 +61,7 @@ class Cliconf(CliconfBase): out = self.send_command('show configuration commands') return out - def edit_config(self, candidate=None, commit=True, replace=False, diff=False, comment=None): + def edit_config(self, candidate=None, commit=True, replace=False, comment=None): resp = {} if not candidate: raise ValueError('must provide a candidate config to load') @@ -78,29 +79,32 @@ class Cliconf(CliconfBase): results = [] for cmd in chain(['configure'], to_list(candidate)): - results.append(self.send_command(cmd)) + if not isinstance(cmd, collections.Mapping): + cmd = {'command': cmd} - diff_config = None - if diff: - out = self.get('compare') - out = to_text(out, errors='surrogate_or_strict') - if not out.startswith('No changes'): - diff_config = out + results.append(self.send_command(**cmd)) - if commit: - try: - self.commit(comment) - except AnsibleConnectionFailure as e: - msg = 'commit failed: %s' % e.message - self.discard_changes() - raise AnsibleConnectionFailure(msg) + out = self.get('compare') + out = to_text(out, errors='surrogate_or_strict') + diff_config = out if not out.startswith('No changes') else None + + if diff_config: + if commit: + try: + self.commit(comment) + except AnsibleConnectionFailure as e: + msg = 'commit failed: %s' % e.message + self.discard_changes() + raise AnsibleConnectionFailure(msg) + else: + self.get('exit') else: - self.get('exit') + self.discard_changes() else: - self.discard_changes() + self.get('exit') resp['diff'] = diff_config - resp['response'] = results[1:] + resp['response'] = results[1:-1] return json.dumps(resp) def get(self, command=None, prompt=None, answer=None, sendonly=False):