diff options
author | Ganesh Nalawade <ganesh634@gmail.com> | 2020-08-27 21:40:46 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-27 11:10:46 -0500 |
commit | 67fab726b9a6ce77a78092de2da1b036f2fb4785 (patch) | |
tree | 25f1ad8f4c575e2e611431ce7015bbcff8878af0 | |
parent | 35d3ed5f1014197ba906c37aee4af882b61a25ac (diff) | |
download | ansible-67fab726b9a6ce77a78092de2da1b036f2fb4785.tar.gz |
Fix commit timeout failure issue for netconf modules (#71291)
Fixes https://github.com/ansible-collections/cisco.iosxr/issues/74
* ncclient API expects commit timeout value in either unicode
or bytes format, hence convert the timeout value explicitly
to string type.
4 files changed, 27 insertions, 2 deletions
diff --git a/changelogs/fragments/iosxr_netconf_config_commit_fix.yaml b/changelogs/fragments/iosxr_netconf_config_commit_fix.yaml new file mode 100644 index 0000000000..429f3c5c59 --- /dev/null +++ b/changelogs/fragments/iosxr_netconf_config_commit_fix.yaml @@ -0,0 +1,2 @@ +bugfixes: +- Confirmed commit fails with TypeError in IOS XR netconf plugin (https://github.com/ansible-collections/cisco.iosxr/issues/74) diff --git a/lib/ansible/plugins/netconf/__init__.py b/lib/ansible/plugins/netconf/__init__.py index b181f37696..529cc26067 100644 --- a/lib/ansible/plugins/netconf/__init__.py +++ b/lib/ansible/plugins/netconf/__init__.py @@ -24,7 +24,7 @@ from functools import wraps from ansible.errors import AnsibleError from ansible.plugins import AnsiblePlugin -from ansible.module_utils._text import to_native +from ansible.module_utils._text import to_native, to_text from ansible.module_utils.basic import missing_required_lib try: @@ -269,6 +269,7 @@ class NetconfBase(AnsiblePlugin): and set a token on the ongoing confirmed commit :return: Returns xml string containing the RPC response received from remote host """ + timeout = to_text(timeout, errors='surrogate_or_strict') resp = self.m.commit(confirmed=confirmed, timeout=timeout, persist=persist) return resp.data_xml if hasattr(resp, 'data_xml') else resp.xml diff --git a/lib/ansible/plugins/netconf/iosxr.py b/lib/ansible/plugins/netconf/iosxr.py index 228c5828ab..2bcbfbf8ee 100644 --- a/lib/ansible/plugins/netconf/iosxr.py +++ b/lib/ansible/plugins/netconf/iosxr.py @@ -42,7 +42,7 @@ import json import re import collections -from ansible.module_utils._text import to_native +from ansible.module_utils._text import to_native, to_text from ansible.module_utils.network.common.netconf import remove_namespaces from ansible.module_utils.network.iosxr.iosxr import build_xml, etree_find from ansible.errors import AnsibleConnectionFailure @@ -181,6 +181,8 @@ class Netconf(NetconfBase): raise Exception(to_xml(exc.xml)) def commit(self, confirmed=False, timeout=None, persist=None, remove_ns=False): + timeout = to_text(timeout, errors='surrogate_or_strict') + try: resp = self.m.commit(confirmed=confirmed, timeout=timeout, persist=persist) if remove_ns: diff --git a/test/integration/targets/netconf_config/tests/iosxr/basic.yaml b/test/integration/targets/netconf_config/tests/iosxr/basic.yaml index c2cd38974d..47af1306ec 100644 --- a/test/integration/targets/netconf_config/tests/iosxr/basic.yaml +++ b/test/integration/targets/netconf_config/tests/iosxr/basic.yaml @@ -11,4 +11,24 @@ that: - "'backup_path' in result" +- name: test confirm commit + netconf_config: + target: "candidate" + error_option: "rollback-on-error" + commit: yes + confirm: 10 + default_operation: "merge" + content: | + <nc:config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> + <cdp xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-cdp-cfg"> + <enable>true</enable> + </cdp> + </nc:config> + register: result + ignore_errors: True + +- assert: + that: + - "'failed' not in result" + - debug: msg="END netconf_config iosxr/basic.yaml on connection={{ ansible_connection }}" |