From f5020f61309d92be3527c78c110cbb0b1591d24e Mon Sep 17 00:00:00 2001 From: Guillaume Abrioux Date: Tue, 5 Jul 2022 09:58:02 +0200 Subject: [PATCH] backup-and-restore: various fixes - preserve mode and ownership on main directories - make sure the directories are well present prior to restoring files. Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2051640 Signed-off-by: Guillaume Abrioux (cherry picked from commit 047af3a3f66b6135cf7ab6a7c28b9c30dea3c836) --- .../backup-and-restore-ceph-files.yml | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/infrastructure-playbooks/backup-and-restore-ceph-files.yml b/infrastructure-playbooks/backup-and-restore-ceph-files.yml index 2913310cea..30da772d99 100644 --- a/infrastructure-playbooks/backup-and-restore-ceph-files.yml +++ b/infrastructure-playbooks/backup-and-restore-ceph-files.yml @@ -71,7 +71,7 @@ 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 }}" @@ -82,6 +82,14 @@ - 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: @@ -89,6 +97,27 @@ 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 }}"