def getarchive(args): region = args.region vault = args.vault archive = args.archive filename = args.filename glacierconn = glaciercorecalls.GlacierConnection(args.aws_access_key, args.aws_secret_key, region=region) gv = glaciercorecalls.GlacierVault(glacierconn, vault) jobs = gv.list_jobs() found = False for job in gv.job_list: if job['ArchiveId'] == archive: found = True # no need to start another archive retrieval if filename or not job['Completed']: print "ArchiveId: ", archive if job['Completed']: job2 = glaciercorecalls.GlacierJob(gv, job_id=job['JobId']) if filename: ffile = open(filename, "w") for part in iter( (lambda: job2.get_output().read(READ_PART_SIZE)), ''): ffile.write(part) ffile.close() else: print job2.get_output().read() return if not found: job = gv.retrieve_archive(archive) print "Started"
def download(args): region = args.region vault = args.vault filename = args.filename out_file = args.out_file if not filename: raise Exception( u"You have to pass in the file name or the search term \ of it's description to search through archive.") args.search_term = filename items = search(args, print_results=False) n_items = 0 if not items: print "Sorry, didn't find anything." return False print "Region\tVault\tFilename\tArchive ID" for item in items: n_items += 1 archive = item['archive_id'] vault = item['vault'] print "%s\t%s\t%s\t%s" % (item['region'], item['vault'], item['filename'], item['archive_id']) if n_items > 1: print "You need to uniquely identify file with either region, vault or \ filename parameters. If that is not enough, use getarchive to \ specify exactly which archive you want." return False glacierconn = glaciercorecalls.GlacierConnection(args.aws_access_key, args.aws_secret_key, region=region) gv = glaciercorecalls.GlacierVault(glacierconn, vault) jobs = gv.list_jobs() found = False for job in gv.job_list: if job['ArchiveId'] == archive: found = True # no need to start another archive retrieval if not job['Completed']: print "Waiting for Amazon Glacier to assamble the archive." if job['Completed']: job2 = glaciercorecalls.GlacierJob(gv, job_id=job['JobId']) if out_file: ffile = open(out_file, "w") ffile.write(job2.get_output().read()) ffile.close() else: print job2.get_output().read() return True if not found: job = gv.retrieve_archive(archive) print "Started"
def inventory(args): region = args.region vault = args.vault force = args.force BOOKKEEPING = args.bookkeeping BOOKKEEPING_DOMAIN_NAME = args.bookkeeping_domain_name glacierconn = glaciercorecalls.GlacierConnection(args.aws_access_key, args.aws_secret_key, region=region) gv = glaciercorecalls.GlacierVault(glacierconn, vault) if force: job = gv.retrieve_inventory(format="JSON") return True try: gv.list_jobs() inventory_retrievals_done = [] for job in gv.job_list: if job['Action'] == "InventoryRetrieval" and job[ 'StatusCode'] == "Succeeded": d = dateutil.parser.parse( job['CompletionDate']).replace(tzinfo=pytz.utc) job['inventory_date'] = d inventory_retrievals_done += [job] if len(inventory_retrievals_done): list.sort(inventory_retrievals_done, key=lambda i: i['inventory_date'], reverse=True) job = inventory_retrievals_done[0] print "Inventory with JobId:", job['JobId'] job = glaciercorecalls.GlacierJob(gv, job_id=job['JobId']) inventory = json.loads(job.get_output().read()) if BOOKKEEPING: sdb_conn = boto.connect_sdb( aws_access_key_id=args.aws_access_key, aws_secret_access_key=args.aws_secret_key) domain_name = BOOKKEEPING_DOMAIN_NAME try: domain = sdb_conn.get_domain(domain_name, validate=True) except boto.exception.SDBResponseError: domain = sdb_conn.create_domain(domain_name) d = dateutil.parser.parse( inventory['InventoryDate']).replace(tzinfo=pytz.utc) item = domain.put_attributes("%s" % (d, ), inventory) if ((datetime.datetime.utcnow().replace(tzinfo=pytz.utc) - d).days > 1): gv.retrieve_inventory(format="JSON") render_inventory(inventory) else: job = gv.retrieve_inventory(format="JSON") except Exception, e: print "exception: ", e print json.loads(e[1])['message']
def describejob(args): vault = args.vault jobid = args.jobid region = args.region glacierconn = glaciercorecalls.GlacierConnection(args.aws_access_key, args.aws_secret_key, region=region) gv = glaciercorecalls.GlacierVault(glacierconn, vault) gj = glaciercorecalls.GlacierJob(gv, job_id=jobid) gj.job_status() print "Archive ID: %s\nJob ID: %s\nCreated: %s\nStatus: %s\n" % ( gj.archive_id, jobid, gj.created, gj.status_code)