junos_config: Remove reliance on ability to output configuration in set format (#23225)

* Remove reliance on ability to output configuration in `set` format
* Support multiple warnings per rpc-reply
This commit is contained in:
Nathaniel Case
2017-04-04 15:00:00 -04:00
committed by GitHub
parent 01e27b1083
commit 597bca3129
4 changed files with 37 additions and 16 deletions

View File

@@ -147,7 +147,7 @@ def get_diff(module):
if output is not None:
return output.text
def load_config(module, candidate, action='merge', commit=False, format='xml',
def load_config(module, candidate, warnings, action='merge', commit=False, format='xml',
comment=None, confirm=False, confirm_timeout=None):
with locked_config(module):
@@ -155,6 +155,8 @@ def load_config(module, candidate, action='merge', commit=False, format='xml',
candidate = '\n'.join(candidate)
reply = load_configuration(module, candidate, action=action, format=format)
if isinstance(reply, list):
warnings.extend(reply)
validate(module)
diff = get_diff(module)
@@ -168,4 +170,3 @@ def load_config(module, candidate, action='merge', commit=False, format='xml',
discard_changes(module)
return diff

View File

@@ -31,13 +31,31 @@ from xml.etree.ElementTree import tostring, fromstring
from ansible.module_utils.connection import exec_command
NS_MAP = {'nc': "urn:ietf:params:xml:ns:netconf:base:1.0"}
def send_request(module, obj, check_rc=True):
request = tostring(obj)
rc, out, err = exec_command(module, request)
if rc != 0:
if check_rc:
if rc != 0 and check_rc:
error_root = fromstring(err)
fake_parent = Element('root')
fake_parent.append(error_root)
error_list = fake_parent.findall('.//nc:rpc-error', NS_MAP)
if not error_list:
module.fail_json(msg=str(err))
return fromstring(out)
warnings = []
for rpc_error in error_list:
message = rpc_error.find('./nc:error-message', NS_MAP).text
severity = rpc_error.find('./nc:error-severity', NS_MAP).text
if severity == 'warning':
warnings.append(message)
else:
module.fail_json(msg=str(err))
return warnings
return fromstring(out)
def children(root, iterable):