The last time I tried this the monkey didn't survive. Let's hope it works better this time.

This commit is contained in:
2023-03-13 21:10:43 +02:00
parent 15f3d58928
commit 8b67077b63

View File

@@ -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)