From a883635aeb5a889b609ed14bf394ae4f46000a91 Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Wed, 17 May 2017 00:36:32 +0530 Subject: [PATCH] Add dellos6 changes for Python3 (#24606) Make `execute_command` arguments and its return value complaint to PY3 changes made in PR #24431 --- lib/ansible/module_utils/dellos6.py | 13 ++++----- lib/ansible/plugins/terminal/dellos6.py | 35 +++++++++++++------------ 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/lib/ansible/module_utils/dellos6.py b/lib/ansible/module_utils/dellos6.py index 53c5f0bf48a..8ff0911ca3a 100644 --- a/lib/ansible/module_utils/dellos6.py +++ b/lib/ansible/module_utils/dellos6.py @@ -30,6 +30,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 @@ -79,8 +80,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 @@ -102,15 +103,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')) for command in to_list(commands): if command == 'end': @@ -118,7 +119,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/dellos6.py b/lib/ansible/plugins/terminal/dellos6.py index baf66fcb34a..b939318e5e3 100644 --- a/lib/ansible/plugins/terminal/dellos6.py +++ b/lib/ansible/plugins/terminal/dellos6.py @@ -21,6 +21,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 @@ -28,34 +29,34 @@ 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: (?:(?!\bdoes not exist\b)(?!\balready exists\b)(?!\bHost not found\b)(?!\bnot active\b).)*$"), - re.compile(r"% ?Bad secret"), - 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"'[^']' +returned error code: ?\d+"), + re.compile(br"% ?Error: (?:(?!\bdoes not exist\b)(?!\balready exists\b)(?!\bHost not found\b)(?!\bnot active\b).)*$"), + re.compile(br"% ?Bad secret"), + 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"'[^']' +returned error code: ?\d+"), ] def on_authorize(self, passwd=None): if self._get_prompt().endswith('#'): return - cmd = {'command': 'enable'} + cmd = {u'command': u'enable'} if passwd: - cmd['prompt'] = r"[\r\n]?password:$" + cmd['prompt'] = to_text(r"[\r\n]?password: $", errors='surrogate_or_strict') cmd['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') # in dellos6 the terminal settings are accepted after the privilege mode 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') @@ -65,9 +66,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')