"""Script to retrieve and parse AWS Glacier inventory job output and save it to a CSV file.""" import boto3 import json import csv import base64 import xml.etree.ElementTree as ET import sys def main(): if len(sys.argv) != 4: print("Usage: python main.py ") sys.exit(1) vault_name = sys.argv[1] job_id = sys.argv[2] output_csv = sys.argv[3] glacier_client = boto3.client('glacier') response = glacier_client.get_job_output(vaultName=vault_name, jobId=job_id) inventory = json.loads(response['body'].read()) archive_list = inventory.get('ArchiveList', []) with open(output_csv, 'w', newline='') as csvfile: writer = csv.writer(csvfile) writer.writerow(['ArchiveId', 'CreationDate', 'Size', 'Path']) for archive in archive_list: archive_id = archive.get('ArchiveId', '') creation_date = archive.get('CreationDate', '') size = archive.get('Size', '') desc = archive.get('ArchiveDescription', '') # Parse path from ArchiveDescription root = ET.fromstring(desc) b64_path = root.find('p').text path = base64.b64decode(b64_path).decode('utf-8') writer.writerow([archive_id, creation_date, size, path]) if __name__ == '__main__': main()