如何获得Ansible telnet模块的响应

时间:2020-10-06 13:25:59

标签: ansible telnet connection-refused

下面是几个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'failed': True, 'changed': False, 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 }}"

1 个答案:

答案 0 :(得分:0)

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