diff --git a/lib/ansible/modules/commands/telnet.py b/lib/ansible/modules/commands/telnet.py index 3b9f697a9cb..6428671ed82 100644 --- a/lib/ansible/modules/commands/telnet.py +++ b/lib/ansible/modules/commands/telnet.py @@ -43,10 +43,11 @@ options: description: - timeout for remote operations default: 120 - command: + prompts: description: - - Command to execute in telnet session - required: True + - List of prompts expected before sending next command + required: False + default: ['$'] pause: description: - Seconds to pause between each command issued @@ -59,11 +60,27 @@ author: ''' EXAMPLES = ''' -- name: Force ssh on IOS +- name: send configuration commands to IOS + telnet: + user: cisco + password: cisco + login_prompt: "Username: " + prompts: + - "[>|#]" + commands: + - terminal length 0 + - configure terminal + - hostname ios01 + +- name: run show commands telnet: - command: transport input ssh user: cisco password: cisco + login_prompt: "Username: " + prompts: + - "[>|#]" + commands: + - terminal length 0 ''' RETURN = ''' diff --git a/lib/ansible/plugins/action/telnet.py b/lib/ansible/plugins/action/telnet.py index 765ea897bc6..de89339b9ee 100644 --- a/lib/ansible/plugins/action/telnet.py +++ b/lib/ansible/plugins/action/telnet.py @@ -42,6 +42,7 @@ class ActionModule(ActionBase): login_prompt = self._task.args.get('login_prompt', "login: ") password_prompt = self._task.args.get('password_prompt', "Password: ") + prompts = self._task.args.get('prompts', "$ ") commands = self._task.args.get('command') if isinstance(commands, text_type): @@ -54,15 +55,18 @@ class ActionModule(ActionBase): output = [] try: tn.read_until(login_prompt) - tn.write('%s\n' % user) + tn.write('%s\n' % to_native(user)) if password: tn.read_until(password_prompt) - tn.write('%s\n' % password) + tn.write('%s\n' % to_native(password)) + + tn.expect(prompts) for cmd in commands: - tn.write(cmd) - output.append(tn.read_until('')) + tn.write('%s\n' % to_native(cmd)) + index, match, out = tn.expect(prompts) + output.append(out) sleep(pause) tn.write("exit\n") @@ -76,6 +80,6 @@ class ActionModule(ActionBase): result['output'] = output else: result['failed'] = True - result['msg'] = 'Telnet requries a command to execute' + result['msg'] = 'Telnet requires a command to execute' return result