1

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:

  1. copy file to local ansible server from primary,
  2. 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?

  • The 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 Jul 30 '19 at 7:27
  • Can you show more of the Ansible output so we can see what the tasks are doing? – Bruce Becker Jul 31 '19 at 12:06
  • @BruceBecker i will update my question as soon as i get access to my pc. thank you for reply. – BlackCrystal Jul 31 '19 at 14:07
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.

| improve this answer | |
1

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.*"
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.