Ansible“当语句不应该包含jinja2模板时”

Seb*_*eco 3 jinja2 ansible

我正在尝试检查某些字符串是否是列表的元素之一。我设法获得了预期的结果,但是如果没有警告说,我无法找到一种方法:

[警告]:当语句不应包含jinja2模板分隔符时,例如{{}}或{%%}。

您能帮助我了解如何针对此用例做出正确的“何时”声明吗?

这是变量的内容repos

TASK [debug msg={{ repos }}] 
ok: [zimbramta01.essi.lab] => {
"msg": {
    "changed": true,
    "cmd": "yum repolist | cut -f1 -d\" \" | grep -iv 
    \"repolist\\|loaded\\|repo\"",
    "delta": "0:00:10.884070",
    "end": "2018-09-20 08:03:55.210767",
    "failed": false,
    "rc": 0,
    "start": "2018-09-20 08:03:44.326697",
    "stderr": "",
    "stderr_lines": [],
    "stdout": "epel/x86_64\nrhel-7-server-htb-rpms/x86_64\nrhel-7-server- 
     rpms/7Server/x86_64\nzimbra\nzimbra-889-network\nzimbra-889-oss",
    "stdout_lines": [
        "epel/x86_64",
        "rhel-7-server-htb-rpms/x86_64",
        "rhel-7-server-rpms/7Server/x86_64",
        "zimbra",
        "zimbra-889-network",
        "zimbra-889-oss"
    ]
}
}
Run Code Online (Sandbox Code Playgroud)

这就是我的“何时”语句的样子(它正在起作用,我只想学习如何正确编写它)。

- name: agrega repositorio epel
  shell: rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  args:
    warn: False
  when: '"epel/x86_64" not in {{ repos.stdout_lines }}'
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的方法来执行此操作,即使当我阅读了Ansible文档,jinja2文档以及stackoverflow中的其他一些帖子时,也没有找到任何警告就无法找到合适的方法来做到这一点:/

tec*_*raf 6

简单如:

when: "'epel/x86_64' not in repos.stdout_lines"
Run Code Online (Sandbox Code Playgroud)

该警告表示该when键的值作为一个Jinja2表达式作为一个整体来对待,即

{% "epel/x86_64" not in {{ repos.stdout_lines }} %}
Run Code Online (Sandbox Code Playgroud)

而且{{ ... }}内部{% ... %}是多余的。