Add diff capability in vyos edit_config (#41950)

* Add diff capability in vyos edit_config

Fetch onbox diff within edit_config cliconf
plugin and return it in response

* Remove diff returned from ios edit_config

* Fix CI failure

* More CI fixes
pull/36425/head
Ganesh Nalawade 8 years ago committed by GitHub
parent e60da3feaf
commit 9acb5780bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -133,10 +133,9 @@ def load_config(module, commands, commit=False, comment=None):
connection = get_connection(module) connection = get_connection(module)
try: 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) resp = json.loads(resp)
diff_config = resp.get('diff')
except ConnectionError as exc: except ConnectionError as exc:
module.fail_json(msg=to_text(exc)) module.fail_json(msg=to_text(exc))
return diff_config return resp.get('diff')

@ -203,8 +203,6 @@ class CliconfBase(with_metaclass(ABCMeta, object)):
:param replace: Boolean flag to indicate if running configuration should be completely :param replace: Boolean flag to indicate if running configuration should be completely
replace by candidate configuration. 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 :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 :return: Returns a json string with contains configuration applied on remote host, the returned
response on executing configuration commands and platform relevant data. response on executing configuration commands and platform relevant data.

@ -124,7 +124,7 @@ class Cliconf(CliconfBase):
return json.dumps(diff) return json.dumps(diff)
@enable_mode @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 = {} resp = {}
if not candidate: if not candidate:
raise ValueError("must provide a candidate config to load") raise ValueError("must provide a candidate config to load")
@ -151,11 +151,6 @@ class Cliconf(CliconfBase):
results.append(self.send_command('end')) results.append(self.send_command('end'))
diff_config = None
if diff:
diff_config = candidate
resp['diff'] = diff_config
resp['response'] = results[1:-1] resp['response'] = results[1:-1]
return json.dumps(resp) return json.dumps(resp)

@ -19,6 +19,7 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
import collections
import re import re
import json import json
@ -60,7 +61,7 @@ class Cliconf(CliconfBase):
out = self.send_command('show configuration commands') out = self.send_command('show configuration commands')
return out 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 = {} resp = {}
if not candidate: if not candidate:
raise ValueError('must provide a candidate config to load') raise ValueError('must provide a candidate config to load')
@ -78,29 +79,32 @@ class Cliconf(CliconfBase):
results = [] results = []
for cmd in chain(['configure'], to_list(candidate)): 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: results.append(self.send_command(**cmd))
out = self.get('compare')
out = to_text(out, errors='surrogate_or_strict') out = self.get('compare')
if not out.startswith('No changes'): out = to_text(out, errors='surrogate_or_strict')
diff_config = out diff_config = out if not out.startswith('No changes') else None
if commit: if diff_config:
try: if commit:
self.commit(comment) try:
except AnsibleConnectionFailure as e: self.commit(comment)
msg = 'commit failed: %s' % e.message except AnsibleConnectionFailure as e:
self.discard_changes() msg = 'commit failed: %s' % e.message
raise AnsibleConnectionFailure(msg) self.discard_changes()
raise AnsibleConnectionFailure(msg)
else:
self.get('exit')
else: else:
self.get('exit') self.discard_changes()
else: else:
self.discard_changes() self.get('exit')
resp['diff'] = diff_config resp['diff'] = diff_config
resp['response'] = results[1:] resp['response'] = results[1:-1]
return json.dumps(resp) return json.dumps(resp)
def get(self, command=None, prompt=None, answer=None, sendonly=False): def get(self, command=None, prompt=None, answer=None, sendonly=False):

Loading…
Cancel
Save