ansible - Ansible“when 语句不应包含 jinja2 模板”
问题描述
我正在尝试检查某个字符串是否是列表的元素之一。我设法得到了预期的结果,但我找不到一种方法来做到这一点,而不会收到警告说:
[警告]:when 语句不应包含 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"
]
}
}
这就是我的“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 doc、jinja2 doc 和 stackoverflow 中的其他一些帖子,我也无法在没有任何警告的情况下找到正确的方法:/
解决方案
很简单:
when: "'epel/x86_64' not in repos.stdout_lines"
警告表示将when
key的值作为一个整体作为一个Jinja2表达式处理,即
{% "epel/x86_64" not in {{ repos.stdout_lines }} %}
而且{{ ... }}
内部{% ... %}
是多余的。
推荐阅读
- vue.js - VueJS + Axios - CORS 策略:无访问控制允许来源
- postgresql - initdb 后恢复 postgresql 数据库
- node.js - 如何为指向具有不同 URL 的同一应用程序的不同域配置 React 路由
- if-statement - 谷歌表格在 IF 公式中不相乘
- reactjs - 我的打字稿文件在反应项目中出错
- javascript - 如果特定键的值相同,如何将值更新为嵌套的对象数组?
- linux - 我在 ssh 中批量执行了一个权限命令,现在我被锁定了
- css - 仅在触发 Modal 后才延迟加载 iframe
- google-cloud-functions - 如何使用 Cloud Functions 读取存储在 Google Cloud Storage 中的 CSV 数据
- jupyter-notebook - 如何解决 jupyter notebook 中的 ModuleNotFoundError?