下一个任务读取文件的内容,并为读取的每一行(JSON格式)调用脚本。
- name: create users
script:
cmd: myscript.sh "{{item}}"
with_lines: "cat users-list"
我现在尝试向脚本调用添加一个条件,该条件取决于要读取的行的内容(要读取的JSON中的一个字段),但似乎找不到正确的语法。
- name: create users
script:
cmd: myscript.sh "{{item}}"
with_lines: "cat users-list"
when: "{{(('{' + item + '}') | from_json).userLogin}}"
我得到了这个错误:
属性名称应括在双引号中
我试过各种语法,但都不成功。我有点想不出办法。如有任何建议,将不胜感激。
1条答案
按热度按时间ttp71kqs1#
错误的直接原因是您需要将有效的JSON传递给
from_json
过滤器,而JSON只支持双引号字符串("this is a valid JSON string"
,'this is not'
)。此外,
when
表达式是在隐式Jinja模板上下文中计算的,这意味着您永远不会在条件中使用{{...}}
模板标记。不幸的是,如果不知道
users-list
文件的格式,就很难给出正确的语法建议。如果该文件中的每一行都是有效的JSON文档,如下所示:然后你可以这样写你的任务: