AWS ECR 获取登录命令 - 通过 ansible 没有此类文件或目录

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}

是什么原因 ?我相信这个命令应该运行良好

Rod*_*o M 5

您使用的 $(command) 构造是“命令替换”。shell 运行命令,捕获其输出,并将其插入包含 $(...) 的命令行中。它旨在用于从 shell 命令行登录到 ECS 服务。

Ansible 不会在 shell 模式下启动命令。并且无法在该上下文中支持 shell 命令替换,并因此报告找不到文件。

来自 https://docs.ansible.com/ansible/2.5/modules/command_module.html

给定的命令将在所有选定的节点上执行。它不会通过shell处理,所以像$HOME这样的变量和像“<”、“>”、“|”、“;”这样的操作 并且 "&" 将不起作用(如果需要这些功能,请使用 shell 模块)。

相反,您可以创建一个 shell 脚本来执行 ECS 登录以及登录后需要运行的进程。然后从命令参数调用该脚本。

请注意,上面的文档确实引用了可以使用的 shell 模块。如果您需要这种类型的命令替换,您应该使用该模块。