json Ansible:属性名称应该用双引号括起来

lvjbypge  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(148)

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

我得到了这个错误:
属性名称应括在双引号中
我试过各种语法,但都不成功。我有点想不出办法。如有任何建议,将不胜感激。

ttp71kqs

ttp71kqs1#

错误的直接原因是您需要将有效的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"

相关问题