Ansible在另一个变量中搜索变量的内容

Ansible search content of variable in another variable

我正在尝试检查变量 B 的内容是否在变量 ssl_certs 中。 以下有效,但给我一个警告:

[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}.

工作手册:

  vars:
    B: 'test-cert'

  tasks:

  - name: Collect bigip facts
    bigip_device_facts:
      provider: '{{ provider }}'
      gather_subset: ssl-certs
    register: ssl_certs

  - name: debug SSL cert exists
    debug:
      msg: "cert-test already exists"
    when: ssl_certs is search('{{B}}')

如果只在搜索中添加B的内容,就可以去掉警告。但是如何搜索一个变量在另一个变量中的内容来查找条件语句呢?

我已经尝试了以下方法,但由于不完全匹配所以不起作用

when: "B == ssl_certs"

谢谢

when 子句是一个没有双花括号的原始 Jinja2 表达式。 您可以试试这个代码片段。 变量: 乙:'test-cert'

  tasks:

  - name: Collect bigip facts
    bigip_device_facts:
      provider: '{{ provider }}'
      gather_subset: ssl-certs
    register: ssl_certs

  - name: debug SSL cert exists
    debug:
      msg: "cert-test already exists"
    when: ssl_certs in B 

Ansibles 的解析器在运行时解析 when 条件,因为它是原始的 jinja2 模板,我们不需要提供 jinja2 模板的“{{}}”。

例如,假定以下行位于 ssl_certs

中存储的文本中
         Subject: CN=Jane Doe, OU=Finance, O=test-cert, C=US

Jinja test in 是最简单的测试 B 的内容是否在存储在 ssl_certs[ 中的文本中的方法=30=] 还是不行。下面的任务

    - debug:
        msg: cert-test already exists
      when: B in ssl_certs
      vars:
        B: test-cert

给予

  msg: cert-test already exists

同样的结果给出了Ansible测试search

    - debug:
        msg: cert-test already exists
      when: ssl_certs is search(B)
      vars:
        B: test-cert

此测试可用于搜索更多详细信息,例如

    - debug:
        msg: cert-test already exists
      when: ssl_certs is search(regex)
      vars:
        B: test-cert
        regex: 'Subject:(.*)O={{ B }}'