--- /dev/null
+- name: Merge SpamAssassin databases
+ hosts: "{{ hosts | default('all') }}"
+ gather_facts: false
+ tasks:
+ - block:
+ - name: Stop exim
+ become: true
+ service:
+ name: exim4
+ state: stopped
+ - name: Stop SpamAssassin
+ become: true
+ service:
+ name: spamassassin
+ state: stopped
+
+ - name: Backup SpamAssassin DB
+ shell: "sa-learn --sync && exec sa-learn --backup >~/tmp/sa-learn.backup@{{ inventory_hostname }}"
+ - name: Fetch SpamAssassin DB backup
+ ansible.posix.synchronize:
+ src: "~/tmp/sa-learn.backup@{{ inventory_hostname }}"
+ dest: "~/tmp/sa-learn.backup@{{ inventory_hostname }}"
+ mode: pull
+ when: inventory_hostname != 'localhost'
+
+ - name: Combine SpamAssassin DB backups
+ shell: "exec {{ playbook_dir }}/sa-merge-all.py -o sa-learn.backup sa-learn.backup@*"
+ args:
+ chdir: "~/tmp"
+ when: inventory_hostname == 'localhost'
+
+ - block:
+ - name: Push combined SpamAssassin DB backup
+ ansible.posix.synchronize:
+ src: "~/tmp/sa-learn.backup"
+ dest: "~/tmp/sa-learn.backup"
+ - name: Restore combined SpamAssassin DB
+ shell: "sa-learn --clear && sa-learn --restore sa-learn.backup && exec sa-learn --sync"
+ args:
+ chdir: "~/tmp"
+
+ - name: Start SpamAssassin
+ become: true
+ service:
+ name: spamassassin
+ state: started
+ - name: Start exim
+ become: true
+ service:
+ name: exim4
+ state: started
+ when: inventory_hostname != 'localhost'
+
+ - name: Cleanup
+ shell: "exec rm sa-learn.backup*"
+ args:
+ chdir: "~/tmp"