ansible、命令模块和带管道的jq

ansible、命令模块和带管道的jq,ansible,Ansible,我正在尝试运行docker命令,该命令返回容器列表及其大小 该命令是docker容器ls--format“{\'name\”:\“{{{.Names}}\”,\“size\”:“{{.size}}\”--all{jq--slurp 当我尝试在Ansible剧本中运行时,它会爆炸: - name: Get cointainer size raw: /path/to/script/docker-cointainer-size.sh 截断错误为: fatal: [localhost]:

我正在尝试运行docker命令,该命令返回容器列表及其大小

该命令是
docker容器ls--format“{\'name\”:\“{{{.Names}}\”,\“size\”:“{{.size}}\”--all{jq--slurp

当我尝试在Ansible剧本中运行时,它会爆炸:

- name: Get cointainer size
      raw: /path/to/script/docker-cointainer-size.sh
截断错误为:

fatal: [localhost]: FAILED! => changed=true 
  msg: non-zero return code
  rc: 2
  stderr: |-
    jq - commandline JSON processor [version 1.5-1-a5b5cbe]
    Usage: jq [options] <jq filter> [file...]
...
fatal:[localhost]:失败!=>更改=真
msg:非零返回码
rc:2
标准:|-
jq-命令行JSON处理器[版本1.5-1-a5b5cbe]
用法:jq[选项][文件…]
...
我怀疑这与管道(|)的使用有关,因为当我移除管道,以及随后的
jq
命令时,playbook成功完成

手动运行时,
.sh
脚本工作正常

我还尝试过使用
shell
模块,以及
命令
模块-两者都无法运行脚本

如何在Ansible playbook中使用jq和管道功能?

退出代码说明:

rc:2 标准:|- jq-命令行JSON处理器[版本1.5-1-a5b5cbe] 用法:jq[选项][文件…]

jq是指:

有任何使用问题或系统错误

man jq展示:

jq[选项…]过滤器[文件…]

缺少“筛选器”。例如,使用“.”复制输入

jq——咕噜


您是否检查了脚本在手动触发时是否返回正确的返回代码?我不是说工作,而是说返回代码(
echo$?
当您的脚本完成时)。AFAIK
jq
强制使用选择器,即使只是
将输入复制到输出您是否考虑过使用ansible方法?使用
command
获取docker结果,而无需通过管道传输到jq,并使用
command_result.stdout |从_json
@MatthewLDaniel进行解析。它并不总是强制执行,但可能会造成混乱,如图所示。