in infrastructure-provisioning/src/general/scripts/gcp/project_terminate.py [0:0]
def terminate_edge_node(endpoint_name, project_name, service_base_name, region, zone):
logging.info("Terminating Dataengine-service clusters")
try:
labels = [
{'sbn': service_base_name},
{'project_tag': project_name}
]
clusters_list = GCPMeta.get_dataproc_list(labels)
if clusters_list:
for cluster_name in clusters_list:
GCPActions.delete_dataproc_cluster(cluster_name, region)
logging.info('The Dataproc cluster {} has been terminated successfully'.format(cluster_name))
else:
logging.info("There are no Dataproc clusters to terminate.")
except Exception as err:
datalab.fab.append_result("Failed to terminate dataengine-service", str(err))
sys.exit(1)
logging.info("Terminating EDGE and notebook instances")
base = '{}-{}-{}'.format(service_base_name, project_name, endpoint_name)
keys = ['edge', 'ps', 'static-ip', 'bucket', 'subnet']
targets = ['{}-{}'.format(base, k) for k in keys]
try:
instances = GCPMeta.get_list_instances(zone, base)
if 'items' in instances:
for i in instances['items']:
if 'project_tag' in i['labels'] and project_name == i['labels']['project_tag']:
GCPActions.remove_instance(i['name'], zone)
except Exception as err:
datalab.fab.append_result("Failed to terminate instances", str(err))
sys.exit(1)
logging.info("Removing static addresses")
try:
static_addresses = GCPMeta.get_list_static_addresses(region, base)
if 'items' in static_addresses:
for i in static_addresses['items']:
if bool(set(targets) & set([i['name']])):
GCPActions.remove_static_address(i['name'], region)
except Exception as err:
datalab.fab.append_result("Failed to remove static addresses", str(err))
sys.exit(1)
logging.info("Removing storage bucket")
try:
buckets = GCPMeta.get_list_buckets(base)
if 'items' in buckets:
for i in buckets['items']:
if bool(set(targets) & set([i['name']])):
GCPActions.remove_bucket(i['name'])
except Exception as err:
datalab.fab.append_result("Failed to remove storage buckets", str(err))
sys.exit(1)
logging.info("Removing project specific images")
try:
project_image_name_beginning = '{}-{}-{}'.format(service_base_name, project_name, endpoint_name)
images = GCPMeta.get_list_images(project_image_name_beginning)
if 'items' in images:
for i in images['items']:
GCPActions.remove_image(i['name'])
except Exception as err:
logging.info('Error: {0}'.format(err))
sys.exit(1)
logging.info("Removing firewalls")
try:
firewalls = GCPMeta.get_list_firewalls(base)
if 'items' in firewalls:
for i in firewalls['items']:
if bool(set(targets) & set(i['targetTags'])):
GCPActions.remove_firewall(i['name'])
except Exception as err:
datalab.fab.append_result("Failed to remove security groups", str(err))
sys.exit(1)
logging.info("Removing Service accounts and roles")
try:
list_service_accounts = GCPMeta.get_list_service_accounts()
sa_keys = ['edge-sa', 'ps-sa']
role_keys = ['edge-role', 'ps-role']
sa_target = ['{}-{}'.format(base, k) for k in sa_keys]
indexes = [GCPMeta.get_index_by_service_account_name('{}-{}'.format(base, k)) for k in sa_keys]
role_targets = ['{}-{}-{}'.format(base, i, k) for k in role_keys for i in indexes]
for service_account in (set(sa_target) & set(list_service_accounts)):
GCPActions.remove_service_account(service_account, service_base_name)
list_roles_names = GCPMeta.get_list_roles()
for role in (set(role_targets) & set(list_roles_names)):
GCPActions.remove_role(role)
except Exception as err:
datalab.fab.append_result("Failed to remove service accounts and roles", str(err))
sys.exit(1)
logging.info("Removing subnets")
try:
list_subnets = GCPMeta.get_list_subnetworks(region, '', base)
if 'items' in list_subnets:
vpc_selflink = list_subnets['items'][0]['network']
vpc_name = vpc_selflink.split('/')[-1]
subnets = GCPMeta.get_list_subnetworks(region, vpc_name, base)
for i in subnets['items']:
if bool(set(targets) & set([i['name']])):
GCPActions.remove_subnet(i['name'], region)
except Exception as err:
datalab.fab.append_result("Failed to remove subnets", str(err))
sys.exit(1)
logging.info("Removing nat route")
try:
nat_route_name = '{0}-{1}-{2}-nat-route'.format(service_base_name, project_name, endpoint_name)
route = GCPMeta.get_route(nat_route_name)
if route:
GCPActions.delete_nat_route(nat_route_name)
except Exception as err:
datalab.fab.append_result("Failed to remove nat route", str(err))
sys.exit(1)