in infrastructure-provisioning/src/general/scripts/gcp/common_terminate_notebook.py [0:0]
def terminate_nb(instance_name, bucket_name, region, zone, user_name):
logging.info('Terminating Dataproc cluster and cleaning Dataproc config from bucket')
try:
labels = [
{instance_name: '*'}
]
clusters_list = GCPMeta.get_dataproc_list(labels)
if clusters_list:
for cluster_name in clusters_list:
GCPActions.bucket_cleanup(bucket_name, user_name, cluster_name)
logging.info('The bucket {} has been cleaned successfully'.format(bucket_name))
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 dataproc", str(err))
sys.exit(1)
logging.info("Terminating data engine cluster")
try:
clusters_list = GCPMeta.get_list_instances_by_label(zone, instance_name)
if clusters_list.get('items'):
for vm in clusters_list['items']:
try:
GCPActions.remove_instance(vm['name'], zone)
logging.info("Instance {} has been terminated".format(vm['name']))
except:
pass
else:
logging.info("There are no data engine clusters to terminate.")
except Exception as err:
datalab.fab.append_result("Failed to terminate dataengine", str(err))
sys.exit(1)
logging.info("Terminating notebook")
try:
GCPActions.remove_instance(instance_name, zone)
except Exception as err:
datalab.fab.append_result("Failed to terminate instance", str(err))
sys.exit(1)
if os.environ['notebook_create_keycloak_client'] == 'True':
logging.info("Terminating notebook keycloak client")
try:
keycloak_auth_server_url = '{}/realms/master/protocol/openid-connect/token'.format(
os.environ['keycloak_auth_server_url'])
keycloak_client_url = '{0}/admin/realms/{1}/clients'.format(os.environ['keycloak_auth_server_url'],
os.environ['keycloak_realm_name'])
keycloak_auth_data = {
"username": os.environ['keycloak_user'],
"password": os.environ['keycloak_user_password'],
"grant_type": "password",
"client_id": "admin-cli",
}
client_params = {
"clientId": "{}-{}-{}-{}".format(notebook_config['service_base_name'], notebook_config['project_name'],
notebook_config['endpoint_name'], notebook_config['exploratory_name'])
}
keycloak_token = requests.post(keycloak_auth_server_url, data=keycloak_auth_data).json()
keycloak_get_id_client = requests.get(keycloak_client_url, data=keycloak_auth_data, params=client_params,
headers={"Authorization": "Bearer " + keycloak_token.get("access_token"),
"Content-Type": "application/json"})
json_keycloak_client_id = json.loads(keycloak_get_id_client.text)
keycloak_id_client = json_keycloak_client_id[0]['id']
keycloak_client_delete_url = '{0}/admin/realms/{1}/clients/{2}'.format(os.environ['keycloak_auth_server_url'],
os.environ['keycloak_realm_name'],
keycloak_id_client)
requests.delete(keycloak_client_delete_url,
headers={"Authorization": "Bearer " + keycloak_token.get("access_token"),
"Content-Type": "application/json"})
except Exception as err:
logging.error("Failed to remove project client from Keycloak", str(err))