using copy module with wildcards
Solution 1
with_fileglog
creates a loop with the fileglob
lookup. As all other lookups it runs on the controller machine, not on the remote server.
Since I guess you don't already have those backup files on the controller in the path you referenced, your loop is empty.
As you have guessed, this approach will not work for your scenario. I suggest you have a look at the find
module to create the list of files to fetch from your primary server.
Solution 2
any with_*
is actully a local lookup.
So as Zeitounator mentioned, you're going to need to use something like the find
module to fetch the files you want.
so I imagine that something like this would work:
- hosts: primary
remote_user: root
tasks:
- name: gather list of files to fetch
find:
paths: "/data1/"
recurse: no
patterns: "{{ dbname }}.0.db2inst1.*"
use_regex: no
regisrer: db_backup_src
- name: fetch backups to local disk
fetch:
src: "{{ item['path'] }}"
dest: /data1/backup/
flat: yes
loop: "{{ db_backuo_src['files'] }}"
- hosts: standby
remote_user: root
tasks:
- name: copy backup to standby
copy:
src: "{{ item }}"
dest: /data1
mode: 0755
owner: db2inst1
with_fileglob:
- "/data1/backup/{{dbname}}.0.db2inst1.*"
Comments
-
BlackCrystal over 1 year
I need to copy a database backup file from a primary server to a standby server. Since I can't use
synchronize
, I was following this method:- copy file to local ansible server from primary,
- then, copy it from local to standby.
The name of backup files are different on every machine. for example:
TEST1.0.db2inst1.DBPART000.20190729162630.001 TEST3.0.db2inst1.DBPART000.20180729172631.002
The playbook I was using looked like this:
- hosts: primary remote_user: root tasks: - name: copy backup to local file fetch: src={{item}} dest=/data1/backup with_fileglob: /data1/{{dbname}}.0.db2inst1.* tags: transfer - hosts: standby remote_user: root tasks: - name: copy backup to standby copy: src={{item}} dest=/data1 mode=0755 owner=db2inst1 with_fileglob: /data1/backup/{{dbname}}.0.db2inst1.* tags: ransfer
(The playbook is run with the command:
ansible-playbook -i hostfile transfer.yml --extra-vars "dbname=TEST1"
)However, this doesn't work; I get this output:
primary : ok=1 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 standby : ok=1 changed=0 unreachable=0 failed=0 skipped=1 rescued=0
I think the name of files are problem. What should I do?
-
Bruce Becker almost 5 yearsThe fact that the tasks are skipped means that your loop (ie, with_fileglob) is passing an empty list. Perhaps that hint may help?
-
Bruce Becker almost 5 yearsCan you show more of the Ansible output so we can see what the tasks are doing?
-
BlackCrystal almost 5 years@BruceBecker i will update my question as soon as i get access to my pc. thank you for reply.