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
pull/36897/head
Ganesh Nalawade 7 years ago committed by GitHub
parent 2fbfce06e7
commit 41d75783b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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…
Cancel
Save