In my files directory I have various files, with a similar name structure:
data-example.zip
data-precise.zip
data-arbitrary.zip
data-collected.zipI would like to transfer all of these files in the /tmp directory of my remote machine using Ansible without specifying each file name explicitly. In other words I would like to transfer every file that stars with "data-".
What is the correct way to do that? In a similar thread, someone suggested the with_fileglob keyword, - but I couldn't get that to work.
Can someone provide me an example on how to accomplish said task?
2 Answers
Method 1: Find all files, store them in a variable and copy them to destination.
- hosts: lnx tasks: - find: paths="/source/path" recurse=yes patterns="data*" register: files_to_copy - copy: src={{ item.path }} dest=/dear/dir owner: root mode: 0775 with_items: "{{ files_to_copy.files }}"Use remote_src: yes to copy file in remote machine from one path to another.
Method 2: Fileglob
Fileglob allows using patterns to match files and directories
- name: Copy each file over that matches the given pattern copy: src: "{{ item }}" dest: "/etc/fooapp/" owner: "root" mode: 0600 with_fileglob: - "/playbooks/files/fooapp/*" 6 Shortly after posting the question I actually figured it out myself. The with_fileglob keyword is the way to do it.
- name: "Transferring all data files" copy: src: "{{ item }}" dest: /tmp/ with_fileglob: "data-*"