如何获得Ansible telnet模块的响应

问题描述

下面是几个IP地址及其telnet响应(输出

telnet 10.9.9.112 22
Trying 10.9.9.112......

telnet 10.9.9.143 22
Trying 10.9.9.143.....
telnet: connect to address 10.9.9.143: Connection refused.

对于第一个IP 10.9.9.112,没有连接,防火墙阻止了从源到目标的任何连接。输出显示Trying ....,并保持这种状态,而无需打印其他任何内容

对于第二个IP 10.9.9.143,我立即在输出中得到Connection refused,并将控件返回到提示

我希望抓住when条件下的两种情况,并针对两种情况进行不同的活动。

我尝试使用Ansible的telnet模块,但我不知道如何在注册变量中同时获取这两个不同的输出

就我而言,它为两个IP打印相同的消息。

一个IP的可用输出

TASK [debug] *************************************
ok: [localhost] => {
   "msg": "HERE:{u'msg': u'Timeout when waiting for 10.9.9.112',u'Failed': True,'changed': False,u'elapsed': 4}"

Ansible Output for second ip:

TASK [debug] *************************************
ok: [localhost] => {
   "msg": "HERE:{u'msg': u'Timeout when waiting for 10.9.9.143',u'elapsed': 3}"

我看到的唯一区别是经过时间的值。

这是我的剧本。

---
- name: "Play 1"
  hosts: localhost
  tasks: 
    - wait_for:
        hosts: "{{ item }}"
        port: 22
        state: started
        delay: 3
        timeout: 90
      ignore_errors: yes
      register: telnetout
      loop:
        - 10.9.9.112
        - 10.9.9.143

    - debug:
        msg: "HERE: {{ telnetout }}"

解决方法

telnet模块不幸地没有在输出中记录Connection Refused消息。

我们必须像下面那样使用raw模块。

---
- name: "Play 1"
  hosts: localhost
  tasks: 
    - raw: "timeout --signal=9 2 telnet {{ item }} 22"
      ignore_errors: yes
      register: telnetout
      loop:
        - 10.9.9.112
        - 10.9.9.143

- debug:
    msg: "HERE: {{ telnetout }}"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...