mirror of
				https://github.com/kevinveenbirkenbach/computer-playbook.git
				synced 2025-11-04 12:18:17 +00:00 
			
		
		
		
	Refactor systemctl services and timers
- Unified service templates into generic systemctl templates - Introduced reusable filter plugins for script path handling - Updated path variables and service/timer definitions - Migrated roles (backup, cleanup, repair, etc.) to use systemctl role - Added sys-daemon role for core systemd cleanup - Simplified timer handling via sys-timer role Note: This is a large refactor and some errors may still exist. Further testing and adjustments will be needed.
This commit is contained in:
		
							
								
								
									
										63
									
								
								roles/svc-bkp-loc-2-usb/files/script.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								roles/svc-bkp-loc-2-usb/files/script.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
import subprocess
 | 
			
		||||
import shutil
 | 
			
		||||
import os
 | 
			
		||||
import glob
 | 
			
		||||
import datetime
 | 
			
		||||
 | 
			
		||||
def main():
 | 
			
		||||
    source_path = sys.argv[1]
 | 
			
		||||
    print(f"source path: {source_path}")
 | 
			
		||||
    
 | 
			
		||||
    backup_to_usb_destination_path = sys.argv[2]
 | 
			
		||||
    print(f"backup to usb destination path: {backup_to_usb_destination_path}")
 | 
			
		||||
    
 | 
			
		||||
    if not os.path.isdir(backup_to_usb_destination_path):
 | 
			
		||||
        print(f"Directory {backup_to_usb_destination_path} does not exist")
 | 
			
		||||
        sys.exit(1)
 | 
			
		||||
    
 | 
			
		||||
    machine_id = subprocess.run(["sha256sum", "/etc/machine-id"], capture_output=True, text=True).stdout.strip()[:64]
 | 
			
		||||
    print(f"machine id: {machine_id}")
 | 
			
		||||
    
 | 
			
		||||
    versions_path = os.path.join(backup_to_usb_destination_path, f"{machine_id}/svc-bkp-loc-2-usb/")
 | 
			
		||||
    print(f"versions path: {versions_path}")
 | 
			
		||||
    
 | 
			
		||||
    if not os.path.isdir(versions_path):
 | 
			
		||||
        print(f"Creating {versions_path}...")
 | 
			
		||||
        os.makedirs(versions_path, exist_ok=True)
 | 
			
		||||
    
 | 
			
		||||
    previous_version_path = max(glob.glob(f"{versions_path}*"), key=os.path.getmtime, default=None)
 | 
			
		||||
    print(f"previous versions path: {previous_version_path}")
 | 
			
		||||
    
 | 
			
		||||
    current_version_path = os.path.join(versions_path, datetime.datetime.now().strftime("%Y%m%d%H%M%S"))
 | 
			
		||||
    print(f"current versions path: {current_version_path}")
 | 
			
		||||
    
 | 
			
		||||
    print("Creating backup destination folder...")
 | 
			
		||||
    os.makedirs(current_version_path, exist_ok=True)
 | 
			
		||||
    
 | 
			
		||||
    print("Starting synchronization...")
 | 
			
		||||
    try:
 | 
			
		||||
        rsync_command = [
 | 
			
		||||
            "rsync", "-abP", "--delete", "--delete-excluded"
 | 
			
		||||
        ]
 | 
			
		||||
        if previous_version_path is not None:
 | 
			
		||||
            rsync_command.append("--link-dest=" + previous_version_path)
 | 
			
		||||
        rsync_command.extend([source_path, current_version_path])
 | 
			
		||||
        rsync_output = subprocess.check_output(rsync_command, stderr=subprocess.STDOUT, text=True)
 | 
			
		||||
        
 | 
			
		||||
        print(rsync_output)
 | 
			
		||||
        print("Synchronization finished")
 | 
			
		||||
        sys.exit(0)
 | 
			
		||||
    except subprocess.CalledProcessError as e:
 | 
			
		||||
        print(e.output)
 | 
			
		||||
        if "rsync warning: some files vanished before they could be transferred" in e.output:
 | 
			
		||||
            print("Synchronization finished with rsync warning")
 | 
			
		||||
            sys.exit(0)
 | 
			
		||||
        else:
 | 
			
		||||
            print("Synchronization failed")
 | 
			
		||||
            sys.exit(1)
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    main()
 | 
			
		||||
		Reference in New Issue
	
	Block a user