Ansible模块[05]:fetch
应用
- 此模块的工作方式与[copy]模块类似,但与之相反。它用于从目标主机获取文件,并将它们存储在本地文件树中,按主机名来区分是从哪一台目标主机获取的。如果“dest”中已存在的文件与“src”不同,则将覆盖这些文件。
参数
- src:要获取的目标主机上的文件。这必须是一个文件,而不是一个目录。
- dest:获取到的目标主机文件,所存放的本地主机目录。
- flat:
- 从单个主机上拉取文件,拉取到本地主机上的文件名称唯一。
- 从多台主机上拉取相同名称的文件,则该文件将会被每个远程主机相名称的文件覆盖,最后只剩下一个文件。
示例
1、获取单台目标主机上的文件。
#目标主机:10.0.0.12
- name: Store file into /tmp/fetched/host.example.com/tmp/somefile
fetch:
src: /etc/passwd
dest: /data
2、获取多台目标主机上相同名称的文件。
#目标主机:10.0.0.12,10.0.0.13两台。
- name: Get files with the same name on multiple target hosts
fetch:
src: /etc/passwd
dest: /data
#可以看到拉取后的目录结构
[root@ansible-master date]# tree /date
/date
├── 10.0.0.12
│ └── etc
│ └── passwd
└── 10.0.0.13
└── etc
└── passwd
3、获取多台目标主机上相同名称的文件,可以看到加了flat=yes这个参数,本应该有两个分别来自两台目标主机的passwd文件,这时却被覆盖了一个。这样并不能达到预期效果。示例2中的方式又将文件藏得太深。
#目标主机:10.0.0.12,10.0.0.13两台。
#出现问题,未达到预期效果,其中有一台目标主机拉取到本地主机的文件被覆盖。
- name: Storing in a path relative to the playbook
fetch:
src: /etc/passwd
dest: /data
flat: yes
[root@ansible-master date]# tree /date
/date
└── passwd
#目标主机:10.0.0.12,10.0.0.13两台。
#解决办法。
- name: Storing in a path relative to the playbook
fetch:
src: /etc/passwd
dest: /data/passwd_{{ inventory_hostname }}.bak
flat: yes
[root@ansible-master date]# tree /date
/date
└── passwd_10.0.0.12.bak
└── passwd_10.0.0.13.bak

浙公网安备 33010602011771号