You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible playbook交互确认后仅单主机生效其余被跳过如何解决

问题原因

  • 核心原因是Ansible的pause模块默认隐式开启了run_once: true属性,只会在当前play匹配到的第一台主机上执行一次,你输入的确认内容只会被注册到第一台主机的confirm_delete变量中,其余主机的该变量处于未定义状态。
  • 配套的set_fact任务没有显式设置run_once: true,默认只会给有confirm_delete变量的第一台主机生成confirm_delete_fact事实变量,剩下两台主机完全没有该变量,第二个play的when: confirm_delete_fact条件判断时,未定义变量会被解析为false,因此被跳过。

解决方法

修改第一个play的两个任务,显式指定run_once: true即可。Ansible中run_once: true的set_fact任务生成的事实变量默认作用域是当前play的所有主机,而非仅执行任务的单台主机,刚好适配这种需要全局统一确认的场景:

- hosts: all
  become: false
  tasks:
    - pause:
        prompt: "Are you sure you want to delete \" EVERYTHING \"? Please confirm with \"yes\". Abort with \"no\" or Ctrl+c and then \"a\""
      register: confirm_delete
      run_once: true # 显式声明单次运行,输入结果全局生效
    - set_fact:
        confirm_delete_fact: "{{ confirm_delete.user_input | bool }}"
      run_once: true # 显式声明单次运行,变量会同步到当前play所有主机

- hosts: all
  become: false
  roles:
    - {role: destroy, when: confirm_delete_fact }

修改后再运行playbook,my_group内所有主机都会使用同一个确认值执行后续的destroy角色。

内容的提问来源于stack exchange,提问作者reisub83

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:36:08