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

Ansible中vars_prompt能否搭配when条件实现指定提示跳过?

Ansible 实现输入y后跳过后续提示的解决方案

问题原因

Ansible 的vars_prompt属于剧本预处理阶段的逻辑,执行时机早于变量解析和条件判断流程,直接在vars_prompt条目下添加的when条件不会被识别生效,因此不管第一个输入的内容是什么,后续的提示都会正常弹出。

解决方法

将后续三个交互逻辑从vars_prompt移到任务阶段,使用pause模块实现交互,此时defaultMOTD变量已经完成赋值,when条件可以正常生效。完整实现代码如下:

---
- name: User MOTD Script
  hosts: localhost
  vars_prompt:
      - name: "defaultMOTD"
        prompt: "Do you want to set the MOTDs to the default? (y/n)"
        private: no

  pre_tasks:
    # 自定义 /etc/motd 输入逻辑
    - name: 提示输入/etc/motd内容
      pause:
        prompt: "Please input your MOTD for /etc/motd: "
      register: motd_input
      when: defaultMOTD != "y"

    - name: 赋值MOTD变量
      set_fact:
        MOTD: "{{ motd_input.user_input }}"
      when: defaultMOTD != "y"

    # 自定义 /etc/issue 输入逻辑
    - name: 提示输入/etc/issue内容
      pause:
        prompt: "Please input your MOTD for /etc/issue: "
      register: issue_input
      when: defaultMOTD != "y"

    - name: 赋值MOTDIssue变量
      set_fact:
        MOTDIssue: "{{ issue_input.user_input }}"
      when: defaultMOTD != "y"

    # 自定义 /etc/issue.net 输入逻辑
    - name: 提示输入/etc/issue.net内容
      pause:
        prompt: "Please input your MOTD for /etc/issue.net: "
      register: issue_net_input
      when: defaultMOTD != "y"

    - name: 赋值MOTDIssueNet变量
      set_fact:
        MOTDIssueNet: "{{ issue_net_input.user_input }}"
      when: defaultMOTD != "y"

  tasks:
    # 此处添加你后续操作MOTD的业务逻辑,可直接调用MOTD、MOTDIssue、MOTDIssueNet变量

效果说明

当用户在第一个提示输入y时,所有pre_tasks下的交互和变量赋值任务都会被跳过,不会弹出后续输入提示;如果输入其他值,则会依次弹出三个自定义内容的输入提示,和你原有逻辑的效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:06:03