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

如何将ansible.builtin.search返回的布尔值赋值给Ansible变量?

问题分析与解决

你遇到的核心问题是变量赋值时没有用Jinja2表达式包裹测试语句,导致Ansible把表达式当成普通字符串存储,而非执行后返回布尔值。

原因说明

  • 在vars块中直接赋值时,Ansible默认将内容视为字面量字符串,不会自动解析其中的is search测试表达式;
  • 而when是特殊的条件字段,Ansible会自动把其中的内容当作Jinja2表达式执行,所以能正常返回布尔判断结果。

修正方案

给变量赋值的表达式加上{{ }},让Ansible解析执行后再赋值给变量:

---
- name: test search
  hosts: linux
  remote_user: xxx
  gather_facts: no
  become: yes

  vars:
    url: "https://example.com/users/foo/resources/bar"
    # 用{{ }}包裹表达式,让Ansible执行后返回布尔值
    foundmatch: "{{ url is ansible.builtin.search('users') }}"

  tasks:
    - debug:
        msg: "{{ foundmatch }}"  # 现在会输出预期的布尔值True

    - debug:
        msg: "matched pattern 3"
      when: url is ansible.builtin.search("users")

    - debug:
        msg: "matched pattern 4"
      when: url is search("XXXusers")

补充说明

search测试并非只能用于when条件判断,只要通过{{ }}包裹表达式,就能将其执行结果(布尔值)赋值给变量使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:35:02