loop: "{{ file_to_backup.files }}"
delegate_to: "{{ target_node }}"
- - name: preserve mode
+ - name: preserve mode on files
file:
path: "{{ backup_dir }}/{{ hostvars[target_node]['ansible_facts']['hostname'] }}/{{ item.path }}"
mode: "{{ item.mode }}"
- name: restore mode
when: mode == 'restore'
block:
+ - name: stat directories
+ stat:
+ path: "{{ backup_dir }}/{{ hostvars[target_node]['ansible_facts']['hostname'] }}{{ item }}"
+ register: dir_stat
+ loop:
+ - /etc/ceph
+ - /var/lib/ceph
+
- name: get a list of files to be restored
find:
paths:
recurse: yes
register: file_to_restore
+ - name: create a list of directories to create
+ set_fact:
+ dir_to_create: "{{ dir_to_create | default([]) | union([{'path': item.item | replace(backup_dir + '/' + hostvars[target_node]['ansible_facts']['hostname'], ''), 'uid': item.stat.uid, 'gid': item.stat.gid, 'mode': item.stat.mode}]) }}"
+ loop: "{{ dir_stat.results }}"
+ delegate_to: "{{ target_node }}"
+
+ - name: create a liste of sub-directories to create
+ set_fact:
+ subdir_to_create: "{{ subdir_to_create | default([]) | union([{'path': item.path | dirname | replace(backup_dir + '/' + hostvars[target_node]['ansible_facts']['hostname'], ''), 'uid': item.uid, 'gid': item.gid, 'mode': item.mode}]) }}"
+ loop: "{{ file_to_restore.files }}"
+
+ - name: ensure directories are created
+ file:
+ state: directory
+ path: "{{ item.path }}"
+ mode: "{{ item.mode }}"
+ owner: "{{ item.uid }}"
+ group: "{{ item.gid }}"
+ loop: "{{ dir_to_create + subdir_to_create }}"
+ delegate_to: "{{ target_node }}"
+
- name: restore files
copy:
src: "{{ item.path }}"