我正在写一本剧本来管理 iptables(是的,我知道有一个模块可以解决这个问题,但我更喜欢使用自定义剧本)。加载新规则后,我等待USR1
信号。如果没有,我会回滚。
因此,相关的 ansible 任务如下所示:
- name: Restore iptables
shell: /root/load_iptables_rules.sh
async: 45
poll: 0
- name: Test SSH connection
shell: /root/send_usr1.sh
register: exit_code
until: exit_code.rc == 0
retries: 10
async: 45
poll: 3
我希望第二个任务(“测试 SSH 连接”)在新的、不同的 SSH 连接中运行。这样我就可以确认我的主机是真的接受新的 SSH 连接。否则,Ansible 可能会使用已经建立的连接,而这无法满足我的需求。
我读过一些有关管道和异步的内容,但我无法让它工作。
答案1
您正在寻找meta
模块reset_connection
动作;这将中断连接,以便后续任务需要建立新连接。这可能看起来像:
- name: Restore iptables
shell: /root/load_iptables_rules.sh
async: 45
poll: 0
- name: Reset connection
meta: reset_connection
- name: Test SSH connection
shell: /root/send_usr1.sh
register: exit_code
until: exit_code.rc == 0
retries: 10
async: 45
poll: 3