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
posted @ 2021-03-21 00:52  lizhi_box  阅读(318)  评论(0)    收藏  举报