我如何在ansible中获得一个随机未使用的端口
How do I get a random unused port in ansible
我想获得一个随机未使用的端口,以便我可以 wait_for
它。最好在动态端口范围内,但在这一点上,我并不挑剔。我正在使用 Linux 并且它不必与 windows 或 Mac.
兼容
虽然这个问题被标记为已回答,但如果有人有办法更简单地完成此操作并减少对 shell 的调用,请在下面 post。我不在乎这个问题是不是四年了。
如评论中所述,您不想 wait_for
一个端口,而是打开一个端口并等待 ping。
我不知道获取随机端口的简单方法,所以我写了一些 shell 脚本来找到一个:
- hosts: all
tasks:
- name: find port
shell: |
PORT=5000
while true; do
ss -tulpen | grep ":${PORT}" &> /dev/null
if [[ "$?" == "1" ]]; then
echo "${PORT}"
exit
fi
((PORT++))
done
args:
executable: /bin/bash
register: port
- name: print port
debug:
msg: "{{ port.stdout }}"
- name: wait for ping
shell: nc -l "{{ port.stdout }}"
- name: debug
debug:
msg: "Ping received"
这会查找一个端口,将其打印给您,然后打开该端口并使用 netcat
等待 ping。收到 ping 后,它会打印一条消息。
在 ubuntu 上对此进行了测试。您可能需要 netcat
(或这里是 nc
)的不同参数,因为不同的发行版提供不同的版本。
编辑:
向端口发送 ping 后,需要关闭 TCP 连接,因为 netcat
只有在连接关闭后才会退出。
我想获得一个随机未使用的端口,以便我可以 wait_for
它。最好在动态端口范围内,但在这一点上,我并不挑剔。我正在使用 Linux 并且它不必与 windows 或 Mac.
虽然这个问题被标记为已回答,但如果有人有办法更简单地完成此操作并减少对 shell 的调用,请在下面 post。我不在乎这个问题是不是四年了。
如评论中所述,您不想 wait_for
一个端口,而是打开一个端口并等待 ping。
我不知道获取随机端口的简单方法,所以我写了一些 shell 脚本来找到一个:
- hosts: all
tasks:
- name: find port
shell: |
PORT=5000
while true; do
ss -tulpen | grep ":${PORT}" &> /dev/null
if [[ "$?" == "1" ]]; then
echo "${PORT}"
exit
fi
((PORT++))
done
args:
executable: /bin/bash
register: port
- name: print port
debug:
msg: "{{ port.stdout }}"
- name: wait for ping
shell: nc -l "{{ port.stdout }}"
- name: debug
debug:
msg: "Ping received"
这会查找一个端口,将其打印给您,然后打开该端口并使用 netcat
等待 ping。收到 ping 后,它会打印一条消息。
在 ubuntu 上对此进行了测试。您可能需要 netcat
(或这里是 nc
)的不同参数,因为不同的发行版提供不同的版本。
编辑:
向端口发送 ping 后,需要关闭 TCP 连接,因为 netcat
只有在连接关闭后才会退出。