From 442df927f17b64ca3d3f81daa446ea64f6c27ed7 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Wed, 17 May 2017 00:36:15 +0530 Subject: [PATCH] Add dellos10 changes for python3 (#24608) Make `execute_command` arguments and its return value complaint to PY3 changes made in PR #24431 --- lib/ansible/module_utils/dellos10.py | 13 +++---- lib/ansible/plugins/terminal/dellos10.py | 43 ++++++++++++------------ 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/lib/ansible/module_utils/dellos10.py b/lib/ansible/module_utils/dellos10.py index 2c4567930df..8c8989cb27e 100644 --- a/lib/ansible/module_utils/dellos10.py +++ b/lib/ansible/module_utils/dellos10.py @@ -31,6 +31,7 @@ # import re +from ansible.module_utils._text import to_text from ansible.module_utils.basic import env_fallback, return_values from ansible.module_utils.network_common import to_list, ComplexList from ansible.module_utils.connection import exec_command @@ -80,8 +81,8 @@ def get_config(module, flags=[]): except KeyError: rc, out, err = exec_command(module, cmd) if rc != 0: - module.fail_json(msg='unable to retrieve current config', stderr=err) - cfg = str(out).strip() + module.fail_json(msg='unable to retrieve current config', stderr=to_text(err, errors='surrogate_or_strict')) + cfg = to_text(out, errors='surrogate_or_strict').strip() _DEVICE_CONFIGS[cmd] = cfg return cfg @@ -103,15 +104,15 @@ def run_commands(module, commands, check_rc=True): cmd = module.jsonify(cmd) rc, out, err = exec_command(module, cmd) if check_rc and rc != 0: - module.fail_json(msg=err, rc=rc) - responses.append(out) + module.fail_json(msg=to_text(err, errors='surrogate_or_strict'), rc=rc) + responses.append(to_text(out, errors='surrogate_or_strict')) return responses def load_config(module, commands): rc, out, err = exec_command(module, 'configure terminal') if rc != 0: - module.fail_json(msg='unable to enter configuration mode', err=err) + module.fail_json(msg='unable to enter configuration mode', err=to_text(err, errors='surrogate_or_strict')) commands.append('commit') for command in to_list(commands): @@ -120,7 +121,7 @@ def load_config(module, commands): cmd = {'command': command, 'prompt': WARNING_PROMPTS_RE, 'answer': 'yes'} rc, out, err = exec_command(module, module.jsonify(cmd)) if rc != 0: - module.fail_json(msg=err, command=command, rc=rc) + module.fail_json(msg=to_text(err, errors='surrogate_or_strict'), command=command, rc=rc) exec_command(module, 'end') diff --git a/lib/ansible/plugins/terminal/dellos10.py b/lib/ansible/plugins/terminal/dellos10.py index 6d268cc645f..45e6046d38c 100644 --- a/lib/ansible/plugins/terminal/dellos10.py +++ b/lib/ansible/plugins/terminal/dellos10.py @@ -24,6 +24,7 @@ __metaclass__ = type import re import json +from ansible.module_utils._text import to_text, to_bytes from ansible.plugins.terminal import TerminalBase from ansible.errors import AnsibleConnectionFailure @@ -31,38 +32,38 @@ from ansible.errors import AnsibleConnectionFailure class TerminalModule(TerminalBase): terminal_stdout_re = [ - re.compile(r"[\r\n]?[\w+\-\.:\/\[\]]+(?:\([^\)]+\)){,3}(?:#) ?$"), - re.compile(r"\[\w+\@[\w\-\.]+(?: [^\]])\] ?[>#\$] ?$") + re.compile(br"[\r\n]?[\w+\-\.:\/\[\]]+(?:\([^\)]+\)){,3}(?:#) ?$"), + re.compile(br"\[\w+\@[\w\-\.]+(?: [^\]])\] ?[>#\$] ?$") ] terminal_stderr_re = [ - re.compile(r"% ?Error"), - re.compile(r"% ?Bad secret"), - re.compile(r"Syntax error:"), - re.compile(r"invalid input", re.I), - re.compile(r"(?:incomplete|ambiguous) command", re.I), - re.compile(r"connection timed out", re.I), - re.compile(r"[^\r\n]+ not found", re.I), - re.compile(r"'[^']' +returned error code: ?\d+"), + re.compile(br"% ?Error"), + re.compile(br"% ?Bad secret"), + re.compile(br"Syntax error:"), + re.compile(br"invalid input", re.I), + re.compile(br"(?:incomplete|ambiguous) command", re.I), + re.compile(br"connection timed out", re.I), + re.compile(br"[^\r\n]+ not found", re.I), + re.compile(br"'[^']' +returned error code: ?\d+"), ] def on_open_shell(self): try: - self._exec_cli_command('terminal length 0') + self._exec_cli_command(b'terminal length 0') except AnsibleConnectionFailure: raise AnsibleConnectionFailure('unable to set terminal parameters') def on_authorize(self, passwd=None): - if self._get_prompt().endswith('#'): + if self._get_prompt().endswith(b'#'): return - cmd = {'command': 'enable'} + cmd = {u'command': u'enable'} if passwd: - cmd['prompt'] = r"[\r\n]?password: $" - cmd['answer'] = passwd + cmd[u'prompt'] = to_text(r"[\r\n]?password: $", errors='surrogate_or_strict') + cmd[u'answer'] = passwd try: - self._exec_cli_command(json.dumps(cmd)) + self._exec_cli_command(to_bytes(json.dumps(cmd), errors='surrogate_or_strict')) except AnsibleConnectionFailure: raise AnsibleConnectionFailure('unable to elevate privilege to enable mode') @@ -72,9 +73,9 @@ class TerminalModule(TerminalBase): # if prompt is None most likely the terminal is hung up at a prompt return - if prompt.strip().endswith(')#'): - self._exec_cli_command('end') - self._exec_cli_command('disable') + if prompt.strip().endswith(b')#'): + self._exec_cli_command(b'end') + self._exec_cli_command(b'disable') - elif prompt.endswith('#'): - self._exec_cli_command('disable') + elif prompt.endswith(b'#'): + self._exec_cli_command(b'disable')