ansible playbook命令出现问题?

Tec*_*ain 8 shell ansible docker hyperledger-fabric

我正在尝试从我的机​​器在其他机器上的docker上执行命令。当我执行此命令时:

- name: Add header
      command: docker exec cli bash -l -c "echo '{"payload":{"header":{"channel_header":{"channel_id":"gll", "type":2}},"data":{"config_update":'$(cat jaguar_update.json)'}}}' | jq . > jaguar_update_in_envelope.json"
Run Code Online (Sandbox Code Playgroud)

通过ansible剧本,我得到下面显示的错误。

fatal:[  
   command-task
]:FAILED! =>{  
   "changed":true,
   "cmd":[  ],
   "delta":"0:00:00.131115",
   "end":"2019-07-11 17:32:44.651504",
   "msg":"non-zero return code",
   "rc":4,
   "start":"2019-07-11 17:32:44.520389",
   "stderr":"mesg: ttyname   
failed: Inappropriate ioctl for device\nparse error: Invalid numeric   
literal at line 1, column 9",
   "stderr_lines":[  
      "mesg: ttyname failed: 
Inappropriate ioctl for device",
      "parse error: Invalid numeric literal 
at line 1, column 9"
   ],
   "stdout":"",
   "stdout_lines":[  

   ]
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我在docker容器中手动执行命令,它可以正常工作,而且我没有任何问题。

编辑:如建议,我尝试与shell模块

shell: docker exec cli -it bash -l -c "echo '{"payload":{"header":{"channel_header":{"channel_id":"gll", "type":2}},"data":{"config_update":'$(cat jaguar_update.json)'}}}' | jq . > jaguar_update_in_envelope.json"
Run Code Online (Sandbox Code Playgroud)

但是我得到以下错误

致命:[命令任务]:失败!=> {“ changed”:true,“ cmd”:“ docker exec cli -it bash -l -c echo'{\” payload \“:{\” header \“:{\” channel_header \“:{\” channel_id \“:\” gll \“,\” type \“:2}},\” data \“:{\” config_update \“:'$(cat jaguar_update.json)'}}}'| jq。> jaguar_update_in_envelope.json“,” delta“:” 0:00:00.110341“,” end“:” 2019-07-12 10:21:45.204049“,” msg“:”非零返回码“,” rc“: 4,“开始”:“ 2019-07-12 10:21:45.093708”,“ stderr”:“猫:jaguar_update.json:没有这样的文件或目录\ nparse错误:第1行第4列的无效数字文字”, “ stderr_lines”:[“ cat:jaguar_update。

工作目录中存在所有文件“ jaguar_update.json”。我已经确认了工作目录。

如果我将其放在外壳脚本文件中,则以上命令有效,然后从ansible执行外壳脚本。

Von*_*onC 1

为了避免任何复杂性,请尝试像这个问题一样将命令包装在脚本中,然后调用该脚本(使用commandshell

- name: Add header
      raw: /path/to/script/docker-add-header.sh
Run Code Online (Sandbox Code Playgroud)

并在/path/to/script/docker-add-header.sh

docker exec cli -it bash -l -c "echo '{"payload":{"header":{"channel_header":{"channel_id":"gll", "type":2}},"data":{"config_update":'$(cat jaguar_update.json)'}}}' | jq . > jaguar_update_in_envelope.json
Run Code Online (Sandbox Code Playgroud)

尝试先让脚本单独工作(无 Ansible)。
请参阅(如果它不起作用,即使在任何 Ansible 调用之外),以转义嵌套双引号:

docker exec cli -it bash -l -c "echo '{\"payload\":{\"header\":...
Run Code Online (Sandbox Code Playgroud)