Ansible中如何等待主机不可达后忽略状态并继续等待其恢复可达?
实现Ansible升级Playbook中的节点不可达等待任务
下面是满足需求的Playbook片段,重点实现task-5的功能:
--- - name: 节点软件升级流程 hosts: target_nodes gather_facts: false tasks: # task-4:触发升级激活命令(示例) - name: 执行升级激活命令 command: /usr/local/bin/trigger-upgrade-activation register: upgrade_trigger # task-5:等待节点变为不可达,忽略错误以继续后续任务 - name: 等待节点SSH端口关闭(标记不可达) wait_for: host: "{{ inventory_hostname }}" port: 22 state: stopped timeout: 2400 # 最长等待40分钟,覆盖题目中20-40分钟的窗口 delay: 1200 # 先等待20分钟再开始检测,避免过早触发无效检测 delegate_to: localhost ignore_errors: yes become: no # task-6:等待节点恢复可达(题目已知可用此模块) - name: 等待节点重新上线 wait_for_connection: timeout: 2400 # 最长等待40分钟,对应恢复所需时间 delay: 60 # 延迟1分钟后开始检测,避免节点刚重启就立刻尝试连接
参数说明:
wait_for模块:通过控制机检测目标节点的SSH端口(默认22)状态,state: stopped表示等待端口停止监听,即节点不可达timeout: 2400:设置40分钟的最长等待时间,匹配题目中节点可能在20-40分钟内重启的范围delay: 1200:先等待20分钟再启动检测,跳过节点还未开始重启的时间段,减少无效检测delegate_to: localhost:在控制机执行检测操作,避免因目标节点断开导致任务直接失败ignore_errors: yes:强制忽略此任务的所有错误(比如超时未检测到端口关闭),确保后续task-6能正常执行become: no:无需提权,仅需控制机的基础网络检测权限
内容的提问来源于stack exchange,提问作者Aditya Siddarth
相关产品推荐
相关产品推荐

