Record archive recovery lifecycle and validate receipt provenance
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a06ecb-456a-71c2-b41e-0755d336e883
This commit is contained in:
parent
445f1361dc
commit
a867ec269a
9 changed files with 203 additions and 11 deletions
|
|
@ -1,6 +1,7 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Silent attended transfer of a real encrypted backup for isolated recovery."""
|
||||
import argparse
|
||||
from datetime import datetime, timezone
|
||||
import base64
|
||||
import urllib.request
|
||||
import shutil
|
||||
|
|
@ -70,10 +71,11 @@ def main():
|
|||
p.add_argument('--receipt',required=True)
|
||||
a=p.parse_args()
|
||||
fd=os.open(a.receipt,os.O_WRONLY|os.O_CREAT|os.O_EXCL,0o600)
|
||||
receipt={'schema':'platform.real-offsite-recovery.v1','status':'failed'}
|
||||
receipt={'schema':'platform.real-offsite-recovery.v1','status':'failed','started_at':datetime.now(timezone.utc).isoformat()}
|
||||
try: run(a.source,a.directory,receipt)
|
||||
except Exception as error: receipt['error']=str(error) if isinstance(error,LaneError) else 'internal_error'
|
||||
finally:
|
||||
receipt['finished_at']=datetime.now(timezone.utc).isoformat()
|
||||
with os.fdopen(fd,'w') as f: json.dump(receipt,f,indent=2)
|
||||
return int(receipt['status']=='failed')
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue