ansible_image_validation/cleanup-azure-table.py (44 lines of code) (raw):

import os import datetime import dateutil.parser import argparse from os import path from azure.cosmosdb.table.tableservice import TableService from azure.cosmosdb.table.models import Entity from azure.cosmosdb.table.tablebatch import TableBatch class AzureTableData: """ This class handles the functionality of getting data from Azure Table Storage cleaning it. """ def __init__(self, args): connect_str = args.connection_str self.table_service = TableService(connection_string=connect_str) def clean_up_table(self, args): """ Fetches all the images from Azure Table Storage. Marks the images as deleted if the image is not present in Azure Marketplace """ allimages = open(args.all_image_list, 'r') images_in_marketplace = allimages.readlines() imagequeryresult = self.table_service.query_entities(args.table_name, filter="IsDeleted eq 0", accept='application/json;odata=minimalmetadata') print("Creating list of images") list_of_images_to_clean_up = [] for image in imagequeryresult: disk_version = image.PartitionKey.split('-')[-1] l = [image_name for image_name in images_in_marketplace if disk_version in image_name] if l == None or len(l) is 0: list_of_images_to_clean_up.append(image) print("Updating", len(list_of_images_to_clean_up)) self.mark_deleted(list_of_images_to_clean_up, args.table_name) def mark_deleted(self, images, table_name): """ Updates Azure Table Storage record by marking it as deleted """ i = 1 for image in images: image.IsDeleted = 1 self.table_service.update_entity(table_name, image) print(i) i += 1 def parse_arguments(): parser = argparse.ArgumentParser(description= "Build Template Generator Arguments") parser.add_argument('--connection-str', '-c', help = "connection string for the storage account") parser.add_argument('--all-image-list', '-in', help = "connection string for the storage account") parser.add_argument('--table-name', '-t', help = "Table name") return parser.parse_args() if __name__ == "__main__": args = parse_arguments() tabledata = AzureTableData(args) tabledata.clean_up_table(args)