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执行外壳脚本。
为了避免任何复杂性,请尝试像这个问题一样将命令包装在脚本中,然后调用该脚本(使用command或shell)
- 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)
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |