我想使用 Ansible 将文件从远程目录复制到本地目录,但获取模块只允许我复制一个文件。我有许多需要文件(每个服务器的目录相同)的服务器,但我不知道如何使用 Ansible 执行此操作。
有任何想法吗?
答案1
您可能需要注册远程内容然后循环遍历它,类似这样的操作应该可以工作:
- shell: (cd /remote; find . -maxdepth 1 -type f) | cut -d'/' -f2
register: files_to_copy
- fetch: src=/remote/{{ item }} dest=/local/
with_items: "{{ files_to_copy.stdout_lines }}"
应该/remote
使用远程服务器上的目录路径和/local/
主服务器上的目录进行更改
答案2
答案3
我没有足够的代表来评论,否则我会添加它。
我使用了 Kęstutis 发布的内容。我必须稍作修改
- shell: (cd /remote; find . -maxdepth 1 -type f) | cut -d'/' -f2
register: files_to_copy
- fetch: src=/remote/{{ item }} dest=/local/
with_items: "{{ files_to_copy.stdout_lines }}"
with_items 是我必须更改的区域。否则它无法找到文件。
答案4
好吧,如果你使用的是最新的 ansible 版本,比如 2.9.9,我认为我们需要对该项目进行引号
- name: use find to get the files list which you want to copy/fetch
find:
paths: /etc/
patterns: ".*passwd$"
use_regex: True
register: file_2_fetch
- name: use fetch to get the files
fetch:
src: "{{ item.path }}"
dest: /tmp/
flat: yes
with_items: "{{ file_2_fetch.files }}"