ansible常用模块之 -- get_url模块 – 从HTTP / HTTPS / FTP下载文件到节点

  • get_url模块 – 从HTTP / HTTPS / FTP下载文件到节点
  • 一、摘要
  • 二、参数
  • 三、示例


get_url模块 – 从HTTP / HTTPS / FTP下载文件到节点

一、摘要

  • 从HTTP、HTTPS或FTP下载文件到远程服务器。远程服务器必须直接访问远程资源
  • 默认情况下,如果在目标主机上设置了环境变量_proxy,则将通过该代理发送请求。可以通过为该任务设置一个变量(参见设置环境)或使用use_proxy选项来覆盖此行为。
  • HTTP重定向可以从HTTP重定向到HTTPS,因此应该确保这两个协议的代理环境都是正确的。
  • 在Ansible 2.4中,当使用——check运行时,它会执行一个HEAD请求来验证URL,但不会下载整个文件或根据哈希值验证它。
  • 对于Windows目标,使用win_get_url模块代替。

二、参数

参数

选项/默认值

描述

attributes

string

生成的文件或目录应该具有的属性。

要获得支持的标志,请查看目标系统上的chatr手册页。

该字符串应该包含与lsattr显示的相同顺序的属性。

=操作符为默认值,否则需要在字符串中包含+或-操作符。

backup

boolean

· no ←

· yes

创建一个包含时间戳信息的备份文件,以便在不正确地损坏原始文件时可以恢复原始文件。

checksum

string

Default:“”

如果将校验和传递给此参数,则将在下载目标文件后计算其摘要,以确保其完整性并验证传输成功完成。格式:< algorithm>:<checksum|url>,例如checksum="sha256:D98291AC[…]B6DC7B97”,checksum= " sha256: http://example.com/path/sha256sum.txt”

如果担心可移植性,那么在所有平台和python版本上只有sha1算法可用。

可以安装第三方hashlib库以访问其他算法。

此外,如果将校验和传递给该参数,且文件存在于最末端位置下,则将计算destination_checksum,如果校验和等于destination_checksum,则将跳过文件下载(除非force为true)。如果校验和不等于destination_checksum,则删除目标文件。

client_cert

path

PEM格式的证书链文件,用于SSL客户端认证。

该文件还可以包含密钥,如果包含密钥,则不需要client_key。

client_key

path

PEM格式的文件,其中包含用于SSL客户端身份验证的私钥。

如果client_cert同时包含证书和密钥,则不需要此选项。

dest

path

required

下载文件的绝对路径。

如果dest是一个目录,则使用服务器提供的文件名,如果没有提供,则使用远程服务器上URL的基名称。如果是目录,强制不起作用。

如果dest是一个目录,文件将始终被下载(不管force选项),但只有在内容发生更改时才会被替换。

force

boolean

· no ←

· yes

如果 yes 并且 dest 不是一个目录,将每次下载该文件,并在内容更改时替换该文件。如果不存在,则只有在目标文件不存在的情况下才会下载该文件。通常只对小的本地文件应该是yes。

在0.6之前,这个模块的行为就像yes是默认值一样。

force_basic_auth

boolean

· no ←

· yes

强制在初始请求时发送基本身份验证头。

Httplib2, uri模块使用的库只在webservice响应一个401状态的初始请求时发送身份验证信息。因为一些基本的认证服务不会正确地发送401,所以登录会失败。

group

string

应该拥有该文件/目录的组的名称,将提供给chown。

headers

raw

以hash/dict格式向请求添加自定义HTTP标头。

哈希/字典格式在Ansible 2.6中添加,

http_agent

string

Default:“ansible-httpget”

头标识为,一般出现在web服务器日志中

mode

string

生成的文件或目录应该具有的权限。

对于那些习惯了/usr/bin/chmod的人来说,记住模式实际上是八进制数。你必须添加一个前导零,这样Ansible的YAML解析器就知道这是一个八进制数(比如0644或01777),或者引用它(比如’644’或’1777’),这样Ansible就可以接收到一个字符串,并可以进行自己的从字符串到数字的转换。

给Ansible一个不遵循这些规则的数字将会得到一个十进制数,这将会产生意想不到的结果。

从Ansible 1.8开始,模式可以指定为符号模式(例如,u+rwx或u=rw,g=r,o=r)。

owner

string

应该拥有该文件/目录的用户名,将提供给chown。

selevel

string

Default:“s0”

SELinux文件上下文的level部分。

这是MLS/MCS属性,有时称为范围。

当设置为_default时,它将使用策略的级别部分(如果可用的话)。

serole

string

SELinux文件上下文的角色部分。

当设置为_default时,它将使用策略的角色部分(如果可用的话)。

setype

string

SELinux文件上下文的类型部分。

当设置为_default时,它将使用策略的类型部分(如果可用的话)。

seuser

string

SELinux文件上下文的用户部分。

默认情况下,它使用系统策略。

当设置为_default时,它将使用策略的用户部分(如果可用的话)。

sha256sum

Default:“”

如果将SHA-256校验和传递给该参数,目标文件的摘要将在下载后计算,以确保其完整性并验证传输成功完成。此选项已弃用。使用checksum 。

timeout

integer

Default:10

URL请求的超时时间,以秒为单位。

tmp_dest

path

下载临时文件的绝对路径。

当在Ansible 2.5或更高版本上运行时,path默认为Ansible的remote_tmp设置

当在2.5之前的Ansible上运行时,它默认为TMPDIR、TEMP或TMP环境变量或平台特定的值。

unsafe_writes

boolean

· no ←

· yes

影响何时使用原子操作以防止数据损坏或从目标文件读取不一致。

默认情况下,该模块使用原子操作来防止数据损坏或从目标文件读取不一致,但有时系统的配置或破坏会防止这种情况发生。一个例子是docker装载的文件,它不能从容器内部原子地更新,只能以不安全的方式写入。

这个选项允许Ansible在原子操作失败时使用不安全的方法更新文件(然而,它并不强制Ansible执行不安全的写操作)。

重要!不安全的写操作会受到竞争条件的影响,并可能导致数据损坏。

url

string

required

表单中的HTTP、HTTPS或FTP URL

url_password

string

用于HTTP基本身份验证的密码。

如果不指定url_username参数,则不使用url_password参数。

从2.8版开始,您还可以为该选项使用’password’别名。

url_username

string

用于HTTP基本身份验证的用户名。

对于允许空密码的站点,可以在不使用url_password的情况下使用此参数。

从2.8版开始,您还可以为该选项使用用户名别名。

use_proxy

boolean

· yes ←

· no

如果no,它将不使用代理,即使在目标主机上的环境变量中定义了代理。

validate_certs

boolean

· yes ←

· no

如果 no,将不验证SSL证书。

这应该只在使用自签名证书的个人控制网站上使用。

三、示例

# 下载foo.conf
- name: Download foo.conf
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    mode: '0440'

# 下载文件并强制基本认证
- name: Download file and force basic auth
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    force_basic_auth: yes

# 下载带有自定义HTTP标头的文件
- name: Download file with custom HTTP headers
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    headers:
      key1: one
      key2: two

# 下载校验文件(sha256)
- name: Download file with check (sha256)
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    checksum: sha256:b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c

# 下载校验(md5)文件
- name: Download file with check (md5)
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    checksum: md5:66dffb5228a211e61d6d7ef4a86f5758

# 下载带有校验和url的文件(sha256)
- name: Download file with checksum url (sha256)
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    checksum: sha256:http://example.com/path/sha256sum.txt

# 从文件路径下载文件
- name: Download file from a file path
  get_url:
    url: file:///tmp/afile.txt
    dest: /tmp/afilecopy.txt

# 获取需要认证的文件。用户名/密码仅从2.8开始可用,在旧版本中需要使用url_username/url_password
- name: < Fetch file that requires authentication.
        username/password only available since 2.8, in older versions you need to use url_username/url_password
  get_url:
    url: http://example.com/path/file.conf
    dest: /etc/foo.conf
    username: bar
    password: '{{ mysecret }}'

官方文档:https://docs.ansible.com/ansible/2.9/modules/get_url_module.html#get-url-module