【问题标题】:ansible, command module and jq with pipeansible、命令模块和带管道的 jq
【发布时间】: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


【解决方案1】:

退出代码说:

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

jq exit code 2 表示:

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

man jq 显示:

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

“过滤器”丢失。放一个“。”例如复制输入

jq --slurp.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多