diff --git a/secdep.py b/secdep.py index 7b0cd54..081bc39 100755 --- a/secdep.py +++ b/secdep.py @@ -57,6 +57,7 @@ parser.add_argument('-P', '--provider', help='Cloud provider', choices=['gce', ' parser.add_argument('-a', '--action', help='Action to perform', choices=['create', 'delete', 'start', 'stop', 'reboot']) parser.add_argument('-c', '--create', help='Create an instance', action='store_true') parser.add_argument('-d', '--delete', help='Delete an instance', action='store_true') +parser.add_argument('-da', '--deleteall', help='Delete all instances', action='store_true') parser.add_argument('-x', '--start', help='Start an instance', action='store_true') parser.add_argument('-z', '--stop', help='Stop an instance', action='store_true') parser.add_argument('-r', '--reboot', help='Reboot an instance', action='store_true') @@ -874,18 +875,20 @@ def create_node(provider, name=None, location=None, size=None, image=None, confi else: blockPrint() # If provider was aws we must get the list of amis - if provider != "aws": + if provider == "gce": images = list_provider_images(provider) + elif provider == "azure": + images = AZURE_images.values() else: images = AWS_images.values() enablePrint() imageName = [] - if provider != "aws": + if provider == "gce": for img in images: - if provider == "gce": - imageName.append(img.name) - elif provider == "azure": - imageName.append(img.id) + imageName.append(img.name) + elif provider == "azure": + for img in images: + imageName.append(img) else: # In the case of aws this is how we get the list of amis for img in images: @@ -905,8 +908,10 @@ def create_node(provider, name=None, location=None, size=None, image=None, confi assert image is not None, "Image is None" else: # If image was indeed in the list we choose it - if provider != "aws": + if provider == "gce": image = images[imageName.index(image)] + elif provider == "azure": + image = image else: # but in the case of aws we still need to get the region first region = getAWSRegionFromAmi(image) @@ -942,7 +947,7 @@ def create_node(provider, name=None, location=None, size=None, image=None, confi if provider == "gce": node = driver.create_node(name=name, image=image, size=size, location=location, ex_service_accounts=sa_scopes, ex_metadata=metadata) elif provider == "azure": - node = driver.create_node(name, size, image, location, auth=auth) + node = driver.create_node(name=name, size=size, image=image, location=location, auth=auth, ex_user_name="secdep", ex_resource_group="secdep", ex_storage_account="secdep") else: keys = driver.list_key_pairs() for key in keys: @@ -976,7 +981,7 @@ def create_node(provider, name=None, location=None, size=None, image=None, confi if provider == "gce": node = driver.create_node(name=name, image=image, size=size, location=location, ex_service_accounts=sa_scopes, ex_metadata=metadata) elif provider == "azure": - node = driver.create_node(name, size, image, location, auth=auth) + node = driver.create_node(name=name, size=size, image=image, location=location, auth=auth, ex_user_name="secdep", ex_resource_group="secdep", ex_storage_account="secdep") else: keys = driver.list_key_pairs() for key in keys: @@ -1072,6 +1077,27 @@ def delete_node(): else: print("%s node could not be deleted" % (providerName.upper())) +def delete_all_nodes(): + blockPrint() + nodes = list_all_nodes("terminated") + enablePrint() + for node in nodes: + providerName = node.name.split("-")[0] + if providerName == "gce": + driver = get_corresponding_driver("gce") + elif providerName == "azure": + driver = get_corresponding_driver("azure") + elif providerName == "aws": + driver = get_corresponding_driver("aws") + assert driver is not None, "Driver is not set up correctly" + region = getAWSRegionFromAmi(node.extra['image_id']) + driver = get_driver(Provider.EC2)(SECDEP_AWS_ACCESS_KEY, SECDEP_AWS_SECRET_KEY,region=region) + if(driver.destroy_node(node)): + print("%s node deleted successfully" % (node.name)) + else: + print("%s node could not be deleted" % (node.name)) + + # If -p -q or -G is passed, provider must be passed as well if args.listimages or args.listsizes or args.listlocations: assert args.provider is not None, "Provider must be passed if listing images, sizes or locations" @@ -1113,6 +1139,9 @@ if args.list: if args.delete: delete_node() exit(0) +if args.deleteall: + delete_all_nodes() + exit(0) if args.image or args.size or args.name or args.region or args.yes and not args.create: print("Image, size, name, region and yes parameters only go along with the create flag") exit(0)