如何将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
相关产品推荐
相关产品推荐

