如何获得 Ansible telnet 模块的响应

How to get response of Ansible telnet module

下面是几个 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 的 Ansible 输出:

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'failed': True, 'changed': False, u'elapsed': 3}"

我看到的唯一区别是 elapsed 的值。

这是我的剧本。

---
- 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 }}"