目录
[示例3:flat 参数设置为 yes](#示例3:flat 参数设置为 yes)
[示例 Playbook](#示例 Playbook)
[1. 拉取远程主机上的 syslog 文件](#1. 拉取远程主机上的 syslog 文件)
[2. 直接保存文件到指定路径](#2. 直接保存文件到指定路径)
[3. 处理源文件不存在的情况](#3. 处理源文件不存在的情况)
[4. 递归拉取目录中的文件](#4. 递归拉取目录中的文件)
fetch
模块是 Ansible 中用于从远程主机获取文件并将其复制到控制节点的模块。它的主要作用是从远程主机拉取文件,以供后续处理或分析。
参数
-
src
:- 描述:远程主机上要拉取的文件路径。
- 类型:字符串
- 必需:是
-
dest
:- 描述:控制节点上保存文件的目标路径。
- 类型:字符串
- 必需:是
-
flat
:- 描述:如果为
yes
,则将所有文件都拉取到一个目录下。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
-
validate_checksum
:- 描述:如果为
yes
,则在文件传输完成后验证文件的校验和。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
-
remote_src
:- 描述:如果为
yes
,则从远程主机的路径拉取文件,否则从本地主机拉取文件。 - 类型:布尔值
- 默认值:
yes
- 描述:如果为
-
fail_on_missing
:- 描述:如果为
yes
,则在源文件不存在时终止任务。 - 类型:布尔值
- 默认值:
yes
- 描述:如果为
示例1:最基本的用法
从远程主机上拉取 /var/log/syslog
文件,并保存到本地 /tmp
目录中:
ansible all -m fetch -a "src=/var/log/syslog dest=/tmp"
示例2:指定目标目录和主机名子目录
从远程主机拉取 /var/log/syslog
文件,并保存到本地 /tmp/hostname/var/log/syslog
路径中,其中 hostname
是远程主机名:
ansible all -m fetch -a "src=/var/log/syslog dest=/tmp"
示例3:flat 参数设置为 yes
直接保存文件到 /tmp
目录中,而不创建主机名子目录:
ansible all -m fetch -a "src=/var/log/syslog dest=/tmp/syslog flat=yes"
示例4:处理源文件不存在的情况
如果文件不存在,不会失败:
ansible all -m fetch -a "src=/var/log/nonexistentfile dest=/tmp/nonexistentfile fail_on_missing=no"
示例5:验证文件校验和
在传输过程中验证文件校验和:
ansible all -m fetch -a "src=/var/log/syslog dest=/tmp/syslog validate_checksum=yes"
示例 Playbook
1. 拉取远程主机上的 syslog 文件
- name: Fetch syslog file from remote hosts
fetch:
src: /var/log/syslog
dest: /tmp/logs
flat: no
fail_on_missing: yes
validate_checksum: yes
这个任务将从所有远程主机中拉取/var/log/syslog
文件,并保存到本地/tmp/logs
目录中。如果文件不存在,将会失败。并且拉取时验证文件的校验和。
2. 直接保存文件到指定路径
- name: Fetch file directly to dest without creating subdirectories
fetch:
src: /var/log/syslog
dest: /tmp/syslog
flat: yes
这个任务直接拉取/var/log/syslog
文件并保存到/tmp/syslog
路径,而不会创建主机名子目录。
3. 处理源文件不存在的情况
- name: Fetch file and handle missing file gracefully
fetch:
src: /var/log/nonexistentfile
dest: /tmp/nonexistentfile
fail_on_missing: no
这个任务试图拉取一个不存在的文件/var/log/nonexistentfile
,如果文件不存在,则不会失败。
4. 递归拉取目录中的文件
- name: Fetch directory with recursive fetching
fetch:
src: /var/log/
dest: /tmp/varlogs
flat: no
validate_checksum: no
这个任务将递归地拉取/var/log/
目录中的所有文件,并保存到本地/tmp/varlogs
目录下,不验证校验和。