Ansible copy files with wildcard?
In my files directory I have various files, with a similar name structure:
data-example.zip data-precise.zip data-arbitrary.zip data-collected.zip
I 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/*"
6Shortly 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-*"
ncG1vNJzZmirpJawrLvVnqmfpJ%2Bse6S7zGiorp2jqbawutJobWtpYWuCdICOmqWsoZKhsm6vzqmwZp6ZobK0edaiq6Flp565pa%2FAq5s%3D