mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-26 04:11:25 -07:00
Fix junos_command py3 related issues (#36782)
Fixes #36204 * tostring() input string shoulb be in byte string format * to_ele() input is required in unicode format
This commit is contained in:
parent
2fbfce06e7
commit
41d75783b5
4 changed files with 7 additions and 6 deletions
|
@ -27,7 +27,7 @@
|
||||||
#
|
#
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from ansible.module_utils._text import to_text, to_native
|
from ansible.module_utils._text import to_text, to_bytes
|
||||||
from ansible.module_utils.connection import Connection, ConnectionError
|
from ansible.module_utils.connection import Connection, ConnectionError
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -67,9 +67,9 @@ class NetconfConnection(Connection):
|
||||||
response = self._exec_jsonrpc(name, *args, **kwargs)
|
response = self._exec_jsonrpc(name, *args, **kwargs)
|
||||||
if 'error' in response:
|
if 'error' in response:
|
||||||
rpc_error = response['error'].get('data')
|
rpc_error = response['error'].get('data')
|
||||||
return self.parse_rpc_error(to_native(rpc_error, errors='surrogate_then_replace'))
|
return self.parse_rpc_error(to_bytes(rpc_error, errors='surrogate_then_replace'))
|
||||||
|
|
||||||
return fromstring(to_native(response['result'], errors='surrogate_then_replace'))
|
return fromstring(to_bytes(response['result'], errors='surrogate_then_replace'))
|
||||||
|
|
||||||
def parse_rpc_error(self, rpc_error):
|
def parse_rpc_error(self, rpc_error):
|
||||||
if self.check_rc:
|
if self.check_rc:
|
||||||
|
|
|
@ -171,6 +171,7 @@ import re
|
||||||
import shlex
|
import shlex
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
|
from ansible.module_utils._text import to_text
|
||||||
from ansible.module_utils.network.common.netconf import exec_rpc
|
from ansible.module_utils.network.common.netconf import exec_rpc
|
||||||
from ansible.module_utils.network.junos.junos import junos_argument_spec, get_configuration, get_connection, get_capabilities
|
from ansible.module_utils.network.junos.junos import junos_argument_spec, get_configuration, get_connection, get_capabilities
|
||||||
from ansible.module_utils.network.common.parsing import Conditional, FailedConditionalError
|
from ansible.module_utils.network.common.parsing import Conditional, FailedConditionalError
|
||||||
|
@ -240,7 +241,7 @@ def rpc(module, items):
|
||||||
if fetch_config:
|
if fetch_config:
|
||||||
reply = get_configuration(module, format=xattrs['format'])
|
reply = get_configuration(module, format=xattrs['format'])
|
||||||
else:
|
else:
|
||||||
reply = exec_rpc(module, tostring(element), ignore_warning=False)
|
reply = exec_rpc(module, to_text(tostring(element), errors='surrogate_then_replace'), ignore_warning=False)
|
||||||
|
|
||||||
if xattrs['format'] == 'text':
|
if xattrs['format'] == 'text':
|
||||||
if fetch_config:
|
if fetch_config:
|
||||||
|
|
|
@ -102,7 +102,7 @@ class NetconfBase(with_metaclass(ABCMeta, object)):
|
||||||
"""RPC to be execute on remote device
|
"""RPC to be execute on remote device
|
||||||
:name: Name of rpc in string format"""
|
:name: Name of rpc in string format"""
|
||||||
try:
|
try:
|
||||||
obj = to_ele(to_bytes(name, errors='surrogate_or_strict'))
|
obj = to_ele(name)
|
||||||
resp = self.m.rpc(obj)
|
resp = self.m.rpc(obj)
|
||||||
return resp.data_xml if hasattr(resp, 'data_xml') else resp.xml
|
return resp.data_xml if hasattr(resp, 'data_xml') else resp.xml
|
||||||
except RPCError as exc:
|
except RPCError as exc:
|
||||||
|
|
|
@ -50,7 +50,7 @@ class Netconf(NetconfBase):
|
||||||
device_info['network_os'] = 'junos'
|
device_info['network_os'] = 'junos'
|
||||||
ele = new_ele('get-software-information')
|
ele = new_ele('get-software-information')
|
||||||
data = self.execute_rpc(to_xml(ele))
|
data = self.execute_rpc(to_xml(ele))
|
||||||
reply = to_ele(to_bytes(data, errors='surrogate_or_strict'))
|
reply = to_ele(data)
|
||||||
sw_info = reply.find('.//software-information')
|
sw_info = reply.find('.//software-information')
|
||||||
|
|
||||||
device_info['network_os_version'] = self.get_text(sw_info, 'junos-version')
|
device_info['network_os_version'] = self.get_text(sw_info, 'junos-version')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue