【发布时间】:2015-08-07 17:30:24
【问题描述】:
我正在尝试使用 HTTP 从具有 get_url 模块的远程服务器下载受保护的文件,但用户名密码似乎没有在请求中传递,因此任务失败。
我正在使用 Ansible 1.9.2
这是我正在使用的 get_url 定义:
- name: Downloading Artifact
get_url:
url: "http://myserver/somefile.tar.gz"
dest: "/home/jdoe/somefile.tar.gz"
url_username: "jdoe"
url_password: "mysecret"
mode: 0600
这是我得到的错误:
failed: [myserver] => {"dest": "/home/jdoe/somefile.tar.gz", "failed": true,
"response": "HTTP Error 403: Forbidden", "state": "absent",
"status_code": 403, "url": "http://myserver/somefile.tar.gz"}
msg: Request failed
FATAL: all hosts have already failed -- aborting
现在,我尝试使用 cURL 下载文件,它可以正常工作。
感谢任何帮助,因为我已经为此苦苦挣扎了 2 天。
【问题讨论】:
-
如果您以您正在运行的用户身份登录运行此 playbook 的服务器并运行以下命令:
curl -u jdoe:mysecret -o /home/jdoe/somefile.tar.gz http://myserver/somefile.tar.gz会发生什么?这应该有效地复制您尝试运行的命令,并且可能指向主机上的权限问题。 -
您能否将您的 Ansible 更新到 2.0 开发分支并尝试添加参数
force_basic_auth=yes是否有帮助? -
直接在主机上进行 curl 可以正常工作并正确下载文件。我还尝试从剧本中运行 curl,它按预期工作。 get_url 命令似乎不起作用。我还没有尝试将 ansible 升级到 2.0,但我会尝试。
-
请提供等效的 curl 命令。如果是模块错误,我会尝试
-
您是否尝试过以详细模式运行角色/剧本?在命令末尾添加“-vvvv”。