【问题标题】:Why Ansible get_url gives error about checksums?为什么 Ansible get_url 给出校验和错误?
【发布时间】:2020-02-17 10:22:35
【问题描述】:

我的 ansible playbook 中有一个任务,它从 github url 下载 java 存档。 任务在这里:

- name: Download Jar Plugin
  get_url:
    url: https://GitHub-URL/plugins-1.0.5.jar
    dest: /app/plugins/

没有提到校验和,但它给出了这个错误:

fatal: [host]: FAILED! => {"changed": false, "msg": "attempted to take checksum of directory: /app/plugins/plugins-1.0.5.jar"}

有人对此有任何想法吗?是否有任何解决方法可以让它下载这个 java 存档?

【问题讨论】:

    标签: ansible checksum geturl


    【解决方案1】:

    首先,GitHub 不是保存二进制文件的正确位置。在大多数情况下,Github 不允许我们存储大于 100 MB 的单个文件。您应该将二进制文件保存在物理服务器或任何云存储中并从那里提取它。

    现在,如果您真的倾向于遵循这种不良做法,我建议您首先创建一个等效的 unix curl 来执行此操作。如果您有一个现有的 curl 命令可以与我们分享,或者简单地使用 ansible shell 模块作为起点。您也可以尝试增加超时时间,因为默认时间仅为 10 秒。这是一个超时设置为 200 秒的 sn-p。

    - name: Download Jar Plugin
      get_url:
        url: https://GitHub-URL/plugins-1.0.5.jar
        dest: /app/plugins/
        timeout: 200
    

    【讨论】:

    • curl -o /app/plugins/plugins-1.0.5.jar --create-dir https://github.com/app/plugins/plugins-1.0.5.jar OK 这是一个适用于正确 URL 的示例..
    • @SS-eth0 尝试增加超时,默认只有 10 秒。 docs.ansible.com/ansible/latest/modules/…
    • 在剧本中设置高超时令人惊讶,但我很困惑,无法理解其原因。任何指针?
    • @SS-eth0 timeout 是 Ansible 等待从请求中获得响应的时间段。即使从 curl 请求开始,您的请求响应也需要 10 秒以上,因此,增加超时将起作用。
    【解决方案2】:

    尝试如下添加校验和参数:

    - name: Download Jar Plugin
      get_url:
       url: https://GitHub-URL/plugins-1.0.5.jar
       dest: /app/plugins/
       timeout: 200
       checksum: <yourchecksum>
    

    希望这对您的错误有所帮助。

    【讨论】:

    • ty @Santosh 贡献,但在我的情况下,我没有校验和,只需要下载文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 2021-06-23
    • 1970-01-01
    相关资源
    最近更新 更多