我正在开发更大的 Ansible 剧本。我想使用的任务之一是使用 执行“TCP ping” netcat
。在其中一个主机上,我想启动netcat
“服务器”,然后启动“客户端”以将任何字符串发送到服务器。
我在没有 Ansible 的情况下测试了这一点——一切正常,但在 Ansible 中netcat
返回1
。我知道这意味着网络连接未建立。这是我的netcat
服务器任务:
- shell: |
nc -d -q0 -l 1234
poll: 0
async: 60
但是,这根本行不通。我尝试在命令末尾添加 & 符号,但没有成功。我做的另一件事是将 poll 设置为 > 0,然后在“服务器”主机上检查端口是否已打开(通过netstat -tulpn
)。结果没有。
我在这里遗漏了什么?
答案1
在 CLI 上执行上述命令将导致输出
nc -d -q0 -l 1234 &
[1] 123456
~/test$ Ncat: Invalid -d delay "-q0" (must be greater than 0). QUITTING.
^C
[1]+ Exit 2 nc -d -q0 -l 1234
由此得出一个最小示例剧本
---
- hosts: test
become: false
gather_facts: false
tasks:
- name: Start LISTENer on Remote Node
shell:
cmd: "nc --listen 1234"
poll: 0
async: 60 # seconds
- name: Test from Control Node
delegate_to: controlnode.example.com
wait_for:
host: "{{ inventory_hostname }}"
port: 1234
state: drained
delay: 0
timeout: 3 # seconds
active_connection_states: SYN_RECV
- name: Test via nc
delegate_to: controlnode.example.com
shell:
cmd: "nc -vz {{ inventory_hostname }} 1234"
register: result
- name: Show result
debug:
var: result
将导致输出
TASK [Start LISTENer on Remote Node] ************************
changed: [test1.example.com]
changed: [test2.example.com]
changed: [test3.example.com]
TASK [Test from Control Node] *******************************
ok: [test1.example.com -> controlnode.example.com]
ok: [test2.example.com -> controlnode.example.com]
ok: [test3.example.com -> controlnode.example.com]
TASK [Test via nc] ******************************************
changed: [test1.example.com -> controlnode.example.com]
changed: [test2.example.com -> controlnode.example.com]
changed: [test3.example.com -> controlnode.example.com]
TASK [Show result] ******************************************
ok: [test1.example.com] =>
result:
changed: true
cmd: nc -vz test1.example.com 1234
delta: '0:00:00.034145'
end: '2023-01-28 13:30:00.291207'
failed: false
msg: ''
rc: 0
start: '2023-01-28 13:30:00.257062'
stderr: |-
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.2.1:1234.
Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.
stderr_lines:
- 'Ncat: Version 7.50 ( https://nmap.org/ncat )'
- 'Ncat: Connected to 192.168.2.1:1234.'
- 'Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.'
stdout: ''
stdout_lines: []
...
关于
我想要使用的任务之一是执行“TCP ping”......
建议使用wait_for
模块 – 等待条件满足后再继续代替
... 使用 netcat 执行“TCP ping”。
正如我们从提供的示例输出中看到的那样,并且由于结果集和行为的差异。
更多文档