我无法再使用 ansible 下载 MySQL ConnectorJ

我无法再使用 ansible 下载 MySQL ConnectorJ

我有一个如下的任务:

- name: Download {{ mysql_connector_download_url }}
  ansible.builtin.get_url:
    url: '{{ mysql_connector_download_url }}'
    dest: '{{ mysql_connector_download_dir }}/{{ mysql_connector_download_file }}'
  register: jdbc_driver

其中mysql_connector_download_url扩展为https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.0.31.tar.gz

这已经工作了很长一段时间,但由于某种原因它不再起作用,我得到的错误是这样的:

    "msg": "Request failed",
    "response": "HTTP Error 403: Forbidden",
    "status_code": 403,
    "url": "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.0.31.tar.gz"

奇怪的是,我可以wget在目标机器上输入相同的 URL,并且工作正常,只有通过 ansible 下载才会失败。

我在想也许与 cookie 有关,但如果是这样的话,它不应该wget也失败吗?

答案1

由于该文件可用但隐藏在重定向后面,因此最简单的方法是查看输出以wget获取文件的真实位置并从那里下载。

在这种情况下,重定向https://dev.mysql.com/get/Downloads…https://cdn.mysql.com/Downloads…并将最后一个 URL 传递给 Ansible 是成功的。

这当然将来可能会改变,但这个解决方案为我解决了这个问题。

答案2

这是由请求头 User-Agent 导致的,如果使用请求头 "User-Agent":"ansible-httpget" 会返回 403,但如果将请求头设置为 "User-Agent":"curl/7.29.0" 则可以。

要获取 302 重定向 uri,你可以查看这个 Github 评论:https://github.com/ansible/ansible/issues/27293#issuecomment-518389800

相关内容