Ansible 2.4 uri模块下载文件(1K),即使它不存在--url返回404错误。

问题描述 投票:0回答:1

我试图运行下面的代码,寻找在给定的url中不存在的myfile.JAR文件。我希望这个任务失败,不下载任何文件。

    - name: Download using URI
      uri:
        url: "http://1.2.3.4:8081/myurl/myfile.JAR"
        dest: ./
        method: GET
        status_code: [200] 

任务失败了,但在.下有一个1K大小的myfile.JAR文件。

为什么下载这个文件(真实大小是20MB)

ansible
1个回答
0
投票

稍微修改一下你的playbook

---
- hosts: localhost
  connection: local
  gather_facts: False

  tasks:
  - name: Download using URI
    uri:
      url: "http://www/myurl/myfile.JAR"
      dest: ./uri.jar
    ignore_errors: yes
  - name: Download using GET_URL
    get_url:
      url: "http://www/myurl/myfile.JAR"
      dest: ./get_url.jar
    ignore_errors: yes

结果如下。

  • uri 下载文件,即webserver的html错误信息内容。
  • get_url 不下载任何不存在的内容

为什么?

get_url 是专门用于下载给定url的内容。如果http状态码不是200,那么什么都不会下载,这意味着如果文件在远程服务器上不存在,任务就会失败。

uri 另一方面是用于与web服务交互,如REST或SOAP或其他什么。当一个restful请求失败时,http状态码为 400 例如,附加信息可以在响应的主体中传输。例子见 https:/praveer09.github.iotechnology20160707rest-error-respon-boot的响应 而这些内容恰恰是通过下载 uri 任务。保存的结果可以由进一步的任务来处理。

© www.soinside.com 2019 - 2024. All rights reserved.