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

aoyhnmkz  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(78)

我尝试使用ansible.builtin.search将布尔结果赋给一个变量,并使用debug将其打印出来。
我尝试使用Ansible文档中的示例代码,但没有看到预期的结果。在调试输出中,我看到的不是布尔结果,而是整个搜索字符串。
下面是我的代码:

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

  vars:
    url: "https://example.com/users/foo/resources/bar"
    foundmatch: url is ansible.builtin.search("users")

  tasks:
    - debug:
        msg: "{{foundmatch}}"  # expect this to print the boolean value 

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

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

“when:“中的比较逻辑按预期工作。但是调试程序正在将{{ foundmatch }}打印为:“msg”:“url is ansible.builtin.search(“users”)”而不是布尔值。
我错过了什么?我是不是阅读错了文档,搜索只能用于比较而不能用于赋值?

cs7cruho

cs7cruho1#

更新变量赋值以使用"{{ expression }}"语法。请注意,由于更改,搜索词“users”现在在单引号内。

vars:
  foundmatch: "{{ url is ansible.builtin.search('users') }}"

如果没有花括号,Ansible不知道将其作为Jinja2表达式进行计算,而是假设它是一个字符串。
它在when条件下按预期工作的原因是,
when子句是一个没有双花括号的原始Jinja2表达式。(文件)

相关问题