Ansible:期望属性名用双引号括起来



下一个任务读取文件的内容,对于读取的每一行(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}}"

,我得到这个错误:

期望属性名用双引号括起来

我尝试了各种语法,但没有运气。我有点无计可施如有任何建议,不胜感激。

错误的直接原因是您需要将有效的JSON传递给from_json过滤器,而JSON只支持双引号字符串("this is a valid JSON string",'this is not')。

此外,when表达式在隐式Jinja模板上下文中求值,这意味着您永远不会在条件中使用{{...}}模板标记。

不幸的是,如果不知道users-list文件的格式,就很难建议正确的语法。如果该文件中的每一行都是有效的JSON文档,如下所示:

{"username": "bob", "userLogin": true}
{"username": "alice", "userLogin": false}

那么你可以这样写你的任务:

- name: create users
script:
cmd: myscript.sh "{{item}}"
with_lines: "cat users-list"
when: "(item|from_json).userLogin"

相关内容

最新更新