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

如何让Ansible vars_prompt将yes/no输入转换为布尔值?

如何在Ansible的vars_prompt中将yes/no输入转换为布尔值?

这个问题的核心原因是YAML解析和vars_prompt输入处理的差异:在vars块里定义的yes/no会被YAML自动解析为布尔值,但vars_prompt的输入默认会被当作字符串处理——而Ansible的when条件会把任何非空字符串都判定为True,哪怕内容是"no",这就导致你的第三个任务逻辑不符合预期。

这里有两种简单的解决方法:

方法一:给vars_prompt指定type: bool

这是最直接的方式,Ansible会自动将用户输入的yes/no/true/false(包括大小写变体,比如YES/No)转换成对应的布尔值,和vars块里的解析效果完全一致:

---
- name: variable tests
  hosts: local
  gather_facts: false
  vars:
    answer1: yes
  vars_prompt:
    - name: "answer2"
      prompt: "Reply true"
      private: no
      type: bool  # 启用布尔类型解析
    - name: "answer3"
      prompt: "Reply yes"
      private: no
      type: bool  # 启用布尔类型解析
  tasks:
    - debug: msg="answer1 is true"
      when: answer1
    - debug: msg="answer2 is true"
      when: answer2
    - debug: msg="answer3 is true"
      when: answer3

方法二:用bool过滤器手动转换变量

如果因为某些场景不能直接指定type: bool,可以通过set_fact任务或者在when条件中直接使用bool过滤器来转换字符串为布尔值:

---
- name: variable tests
  hosts: local
  gather_facts: false
  vars:
    answer1: yes
  vars_prompt:
    - name: "answer2"
      prompt: "Reply true"
      private: no
    - name: "answer3"
      prompt: "Reply yes"
      private: no
  tasks:
    # 提前将answer3转换为布尔值
    - set_fact:
        answer3: "{{ answer3 | bool }}"
    
    - debug: msg="answer1 is true"
      when: answer1
    - debug: msg="answer2 is true"
      when: answer2 | bool  # 直接在条件中使用过滤器
    - debug: msg="answer3 is true"
      when: answer3

bool过滤器会智能识别常见的布尔字符串:"yes"/"true"/"1"会被转为True,"no"/"false"/"0"会被转为False,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:35:33