The last time I tried this the monkey didn't survive. Let's hope it works better this time.
This commit is contained in:
47
secdep.py
47
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)
|
||||
|
||||
Reference in New Issue
Block a user