Server IP : 85.214.239.14 / Your IP : 18.218.42.199 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /lib/python3/dist-packages/ansible_collections/ansible/netcommon/plugins/action/ |
Upload File : |
# (c) 2017, Ansible Project # # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) # SPDX-License-Identifier: GPL-3.0-or-later from __future__ import absolute_import, division, print_function __metaclass__ = type import telnetlib from time import sleep from ansible.module_utils._text import to_bytes, to_text from ansible.module_utils.six import text_type from ansible.plugins.action import ActionBase from ansible.utils.display import Display display = Display() class ActionModule(ActionBase): TRANSFERS_FILES = False def run(self, tmp=None, task_vars=None): if self._task.environment and any(self._task.environment): self._display.warning( "The telnet task does not support the environment keyword" ) result = super(ActionModule, self).run(tmp, task_vars) del tmp # tmp no longer has any effect if self._play_context.check_mode: # in --check mode, always skip this module execution result["skipped"] = True result["msg"] = "The telnet task does not support check mode" else: result["changed"] = True result["failed"] = False host = to_text( self._task.args.get("host", self._play_context.remote_addr) ) user = to_text( self._task.args.get("user", self._play_context.remote_user) ) password = to_text( self._task.args.get("password", self._play_context.password) ) # FIXME, default to play_context? port = int(self._task.args.get("port", 23)) timeout = int(self._task.args.get("timeout", 120)) pause = int(self._task.args.get("pause", 1)) send_newline = self._task.args.get("send_newline", False) login_prompt = to_text( self._task.args.get("login_prompt", "login: ") ) password_prompt = to_text( self._task.args.get("password_prompt", "Password: ") ) prompts = self._task.args.get("prompts", ["\\$ "]) commands = self._task.args.get("command") or self._task.args.get( "commands" ) if isinstance(commands, text_type): commands = commands.split(",") if isinstance(commands, list) and commands: tn = telnetlib.Telnet(host, port, timeout) output = [] try: if send_newline: tn.write(b"\n") tn.read_until(to_bytes(login_prompt)) tn.write(to_bytes(user + "\n")) if password: tn.read_until(to_bytes(password_prompt)) tn.write(to_bytes(password + "\n")) tn.expect(list(map(to_bytes, prompts))) for cmd in commands: display.vvvvv(">>> %s" % cmd) tn.write(to_bytes(cmd + "\n")) index, match, out = tn.expect( list(map(to_bytes, prompts)), timeout=timeout ) display.vvvvv("<<< %s" % cmd) output.append(out) sleep(pause) tn.write(b"exit\n") except EOFError as e: result["failed"] = True result["msg"] = "Telnet action failed: %s" % to_text(e) finally: if tn: tn.close() result["output"] = output else: result["failed"] = True result["msg"] = "Telnet requires a command to execute" return result