@@ -17,27 +17,40 @@ def main_block(namespace, pvc_name, pv):
1717 backup_name = f'hasadna-k8s-pvc-backup-{ backup_datestr } '
1818 print (f'Backup name: { backup_name } ' )
1919 subprocess .check_call (['rbd' , 'snap' , 'create' , f'{ pool } /{ image_name } @{ backup_name } ' ])
20- subprocess .check_call (['rbd' , 'snap' , 'protect' , f'{ pool } /{ image_name } @{ backup_name } ' ])
21- clone_name = f'hasadna-k8s-pvc-backup-{ backup_name } '
22- print (f'Clone name: { clone_name } ' )
23- subprocess .check_call (['rbd' , 'clone' , f'{ pool } /{ image_name } @{ backup_name } ' , f'{ pool } /{ clone_name } ' ])
24- device = subprocess .check_output (['rbd-nbd' , 'map' , f'{ pool } /{ clone_name } ' ]).decode ().strip ()
25- print (f'Device: { device } ' )
26- if subprocess .call (['e2fsck' , '-yf' , device ]) != 0 :
27- print (f"WARNING! e2fsck fixed some errors on namespace '{ namespace } ', pvc '{ pvc_name } '" )
28- subprocess .check_call (['mkdir' , '-p' , f'/tmp{ device } ' ])
29- subprocess .check_call (['mount' , '-t' , 'ext4' , '-o' , 'ro' , device , f'/tmp{ device } ' ])
30- kopia_snapshot_source = f'ceph@{ namespace } :{ pvc_name } '
31- print (f'Creating Kopia snapshot with source { kopia_snapshot_source } ...' )
32- subprocess .check_call (['kopia' , 'snapshot' , 'create' , f'/tmp{ device } ' , '--override-source' , kopia_snapshot_source ])
33- print ("Kopia snapshot created successfully." )
34- print ('Unmounting and cleaning up...' )
35- subprocess .check_call (['umount' , f'/tmp{ device } ' ])
36- subprocess .check_call (['rbd-nbd' , 'unmap' , device ])
37- subprocess .check_call (['rbd' , 'rm' , f'{ pool } /{ clone_name } ' ])
38- subprocess .check_call (['rbd' , 'snap' , 'unprotect' , f'{ pool } /{ image_name } @{ backup_name } ' ])
39- subprocess .check_call (['rbd' , 'snap' , 'rm' , f'{ pool } /{ image_name } @{ backup_name } ' ])
40- print ('Backup completed successfully.' )
20+ try :
21+ subprocess .check_call (['rbd' , 'snap' , 'protect' , f'{ pool } /{ image_name } @{ backup_name } ' ])
22+ try :
23+ clone_name = f'hasadna-k8s-pvc-backup-{ backup_name } '
24+ print (f'Clone name: { clone_name } ' )
25+ subprocess .check_call (['rbd' , 'clone' , f'{ pool } /{ image_name } @{ backup_name } ' , f'{ pool } /{ clone_name } ' ])
26+ try :
27+ device = subprocess .check_output (['rbd-nbd' , 'map' , f'{ pool } /{ clone_name } ' ]).decode ().strip ()
28+ print (f'Device: { device } ' )
29+ try :
30+ if subprocess .call (['e2fsck' , '-yf' , device ]) != 0 :
31+ print (f"WARNING! e2fsck fixed some errors on namespace '{ namespace } ', pvc '{ pvc_name } '" )
32+ subprocess .check_call (['mkdir' , '-p' , f'/tmp{ device } ' ])
33+ subprocess .check_call (['mount' , '-t' , 'ext4' , '-o' , 'ro' , device , f'/tmp{ device } ' ])
34+ try :
35+ kopia_snapshot_source = f'ceph@{ namespace } :{ pvc_name } '
36+ print (f'Creating Kopia snapshot with source { kopia_snapshot_source } ...' )
37+ subprocess .check_call (['kopia' , 'snapshot' , 'create' , f'/tmp{ device } ' , '--override-source' , kopia_snapshot_source ])
38+ print ("Kopia snapshot created successfully." )
39+ finally :
40+ if subprocess .call (['umount' , f'/tmp{ device } ' ]) != 0 :
41+ print (f"ERROR! Failed to unmount device { device } for namespace '{ namespace } ', pvc '{ pvc_name } '" )
42+ finally :
43+ if subprocess .call (['rbd-nbd' , 'unmap' , device ]) != 0 :
44+ print (f"ERROR! Failed to unmap device { device } for namespace '{ namespace } ', pvc '{ pvc_name } '" )
45+ finally :
46+ if subprocess .call (['rbd' , 'rm' , f'{ pool } /{ clone_name } ' ]) != 0 :
47+ print (f"ERROR! Failed to remove clone { clone_name } for namespace '{ namespace } ', pvc '{ pvc_name } '" )
48+ finally :
49+ if subprocess .call (['rbd' , 'snap' , 'unprotect' , f'{ pool } /{ image_name } @{ backup_name } ' ]) != 0 :
50+ print (f"ERROR! Failed to unprotect snapshot { backup_name } for namespace '{ namespace } ', pvc '{ pvc_name } '" )
51+ finally :
52+ if subprocess .call (['rbd' , 'snap' , 'rm' , f'{ pool } /{ image_name } @{ backup_name } ' ]) != 0 :
53+ print (f"ERROR! Failed to remove snapshot { backup_name } for namespace '{ namespace } ', pvc '{ pvc_name } '" )
4154
4255
4356def main_shared (namespace , pvc_name , pv ):
0 commit comments