tsa*_*eht 3 amazon-web-services ansible docker
我有一个可靠的任务
- name: Login to AWS
command: $(aws ecr get-login --no-include-email --region us-east-2)
Run Code Online (Sandbox Code Playgroud)
在运行这个我得到输出
失败的!=> {"changed": false, "cmd": "'^$(aws' ecr get-login --no-include-email --region 'us-east-2)'", "msg": "[ Errno 2] 没有那个文件或目录", "rc": 2}
是什么原因 ?我相信这个命令应该运行良好
您使用的 $(command) 构造是“命令替换”。shell 运行命令,捕获其输出,并将其插入包含 $(...) 的命令行中。它旨在用于从 shell 命令行登录到 ECS 服务。
Ansible 不会在 shell 模式下启动命令。并且无法在该上下文中支持 shell 命令替换,并因此报告找不到文件。
来自 https://docs.ansible.com/ansible/2.5/modules/command_module.html
给定的命令将在所有选定的节点上执行。它不会通过shell处理,所以像$HOME这样的变量和像“<”、“>”、“|”、“;”这样的操作 并且 "&" 将不起作用(如果需要这些功能,请使用 shell 模块)。
相反,您可以创建一个 shell 脚本来执行 ECS 登录以及登录后需要运行的进程。然后从命令参数调用该脚本。
请注意,上面的文档确实引用了可以使用的 shell 模块。如果您需要这种类型的命令替换,您应该使用该模块。
| 归档时间: |
|
| 查看次数: |
2109 次 |
| 最近记录: |