【发布时间】:2019-04-09 15:33:22
【问题描述】:
我正在尝试运行一个返回容器列表及其大小的 docker 命令。
命令是docker container 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...]
...
我怀疑这与管道 (|) 的使用有关,因为当我删除它以及随后的 jq 命令时,剧本成功完成。
.sh 脚本在手动运行时可以正常工作。
我也尝试过使用 shell 模块和 command 模块 - 两者都无法运行脚本。
如何在 Ansible playbook 中使用 jq 和管道函数?
【问题讨论】:
-
您是否检查过您的脚本在手动触发时返回正确的返回码?
-
我不是在谈论工作,而是在谈论返回码(当你的脚本完成时
echo $?) -
AFAIK
jq要求选择器,即使只是.将输入复制到输出 -
你考虑过采用 ansible 的方式吗?使用
command获取您的 docker 结果,无需管道到 jq 并使用command_result.stdout | from_json解析 -
@MatthewLDaniel 它并不总是强制要求它for some time already,但它可能会令人困惑,如此处所示。
标签: ansible