Ansible“when语句不应包含jinja2模板”

5
我想检查某个字符串是否是列表元素之一。我设法获得了所需的结果,但我找不到一种方法来避免收到警告,警告内容如下:
[WARNING]: when语句不应包含jinja2模板分隔符,如{{ }}或{% %}。
你能帮我理解如何为这种情况制作适当的'when'语句吗?
变量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"
    ]
}
}

这是我的 "when" 语句的外观(它正在工作,我只想学习如何正确编写它)。
- 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 }}'

我尝试了不同的方法,甚至阅读了ansible文档、jinja2文档和stackoverflow上的一些帖子,但是我没有找到一种合适的方法来做到这一点而不出现任何警告 :/


2
警告信息明确指出问题所在:“使用{{}}”,只需将其删除即可。 - Stefan Wegener
1个回答

8

就像这样简单:

when: "'epel/x86_64' not in repos.stdout_lines"

警告意味着when键的值被视为整个Jinja2表达式。
{% "epel/x86_64" not in {{ repos.stdout_lines }} %}

{% ... %}标签内部使用{{ ... }}是多余的。


不仅代码运行成功了,而且我非常感谢您提供的进一步解释!非常感谢!!!顺便说一句,repos.stdout_lines 前面多了一个引号,我已经删除以使其正常工作。再次感谢!!! - carrotcakeslayer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接