mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-24 11:21:25 -07:00
On Cisco ASAv on AWS, the prompt is 'Password', thus the privilege elevation fails, we need to check upper and lower p.
69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
#
|
|
# (c) 2016 Red Hat Inc.
|
|
#
|
|
# This file is part of Ansible
|
|
#
|
|
# Ansible is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Ansible is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
from __future__ import (absolute_import, division, print_function)
|
|
__metaclass__ = type
|
|
|
|
import re
|
|
import json
|
|
|
|
from ansible.errors import AnsibleConnectionFailure
|
|
from ansible.module_utils._text import to_text, to_bytes
|
|
from ansible.plugins.terminal import TerminalBase
|
|
|
|
|
|
class TerminalModule(TerminalBase):
|
|
|
|
terminal_stdout_re = [
|
|
re.compile(br"[\r\n]?[\w+\-\.:\/\[\]]+(?:\([^\)]+\)){,3}(?:>|#) ?$"),
|
|
re.compile(br"\[\w+\@[\w\-\.]+(?: [^\]])\] ?[>#\$] ?$")
|
|
]
|
|
|
|
terminal_stderr_re = [
|
|
re.compile(br"error:", re.I),
|
|
re.compile(br"Removing.* not allowed, it is being used")
|
|
]
|
|
|
|
def on_open_shell(self):
|
|
if self._get_prompt().strip().endswith(b'#'):
|
|
self.disable_pager()
|
|
|
|
def disable_pager(self):
|
|
cmd = {u'command': u'no terminal pager'}
|
|
try:
|
|
self._exec_cli_command(u'no terminal pager')
|
|
except AnsibleConnectionFailure:
|
|
raise AnsibleConnectionFailure('unable to disable terminal pager')
|
|
|
|
def on_become(self, passwd=None):
|
|
if self._get_prompt().strip().endswith(b'#'):
|
|
return
|
|
|
|
cmd = {u'command': u'enable'}
|
|
if passwd:
|
|
# Note: python-3.5 cannot combine u"" and r"" together. Thus make
|
|
# an r string and use to_text to ensure it's text on both py2 and py3.
|
|
cmd[u'prompt'] = to_text(r"[\r\n]?[Pp]assword: $", errors='surrogate_or_strict')
|
|
cmd[u'answer'] = passwd
|
|
|
|
try:
|
|
self._exec_cli_command(to_bytes(json.dumps(cmd), errors='surrogate_or_strict'))
|
|
except AnsibleConnectionFailure:
|
|
raise AnsibleConnectionFailure('unable to elevate privilege to enable mode')
|
|
|
|
self.disable_pager()
|