This is an automated email from the ASF dual-hosted git repository.

mykolabodnar pushed a commit to branch DATALAB-2409
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git


The following commit(s) were added to refs/heads/DATALAB-2409 by this push:
     new a0af74d  [DATALAB-2409] - [AWS] SSN configure refactored
a0af74d is described below

commit a0af74d498df68e54f8b10de61c480e6d43c0b88
Author: bodnarmykola <[email protected]>
AuthorDate: Wed Jul 28 16:48:54 2021 +0300

    [DATALAB-2409] - [AWS] SSN configure refactored
---
 .../src/general/conf/datalab.ini                   |  13 +
 .../src/general/lib/aws/meta_lib.py                |  58 ++--
 .../src/general/scripts/aws/ssn_configure.py       | 294 +++++++--------------
 .../src/general/scripts/aws/ssn_prepare.py         |  44 +--
 4 files changed, 153 insertions(+), 256 deletions(-)

diff --git a/infrastructure-provisioning/src/general/conf/datalab.ini 
b/infrastructure-provisioning/src/general/conf/datalab.ini
index 4881a03..7a21340 100644
--- a/infrastructure-provisioning/src/general/conf/datalab.ini
+++ b/infrastructure-provisioning/src/general/conf/datalab.ini
@@ -94,6 +94,19 @@ private_subnet_prefix = 24
 ### Deeplearning native cloud AMI enabled
 deeplearning_cloud_ami = true
 
+[packages]
+
+[pip_packages]
+boto3 = 1.18.8
+bcrypt = 3.2.0
+backoff = 1.11.1
+argparse = 1.4.0
+fabric = 2.6.0
+awscli = 1.20.8
+pymongo = 3.12.0
+pyyaml = 5.4.1
+jinja2 = 3.0.1
+
 #--- [aws] section contains all common parameters related to Amazon ---#
 [aws]
 ### Amazon iam user access_key
diff --git a/infrastructure-provisioning/src/general/lib/aws/meta_lib.py 
b/infrastructure-provisioning/src/general/lib/aws/meta_lib.py
index 33d95ec..b3ea91c 100644
--- a/infrastructure-provisioning/src/general/lib/aws/meta_lib.py
+++ b/infrastructure-provisioning/src/general/lib/aws/meta_lib.py
@@ -31,30 +31,38 @@ import subprocess
 from botocore.client import Config as botoConfig
 from datalab.fab import *
 
-
-def get_instance_hostname(tag_name, instance_name):
+def get_instance_metadata(tag_name, instance_name, metadata):
     try:
-        public = ''
-        private = ''
         ec2 = boto3.resource('ec2')
         instances = ec2.instances.filter(
             Filters=[{'Name': 'tag:{}'.format(tag_name), 'Values': 
[instance_name]},
                      {'Name': 'instance-state-name', 'Values': ['running']}])
         for instance in instances:
-            public = getattr(instance, 'public_dns_name')
-            private = getattr(instance, 'private_dns_name')
-            if public:
-                return public
-            else:
-                return private
-        if public == '' and private == '':
-            raise Exception("Unable to find instance hostname with instance 
name: " + instance_name)
-    except Exception as err:
-        logging.error("Error with finding instance hostname with instance 
name: " + instance_name + " : " + str(err) + "\n Traceback: " + 
traceback.print_exc(file=sys.stdout))
-        append_result(str({"error": "Error with finding instance hostname", 
"error_message": str(err) + "\n Traceback: " + 
traceback.print_exc(file=sys.stdout)}))
+            if metadata == 'hostname':
+                public = getattr(instance, 'public_dns_name')
+                private = getattr(instance, 'private_dns_name')
+                if public:
+                    return public
+                else:
+                    return private
+                if public == '' and private == '':
+                    raise Exception("Unable to find instance hostname with 
instance name: " + instance_name)
+            elif metadata == 'ip_address':
+                public = getattr(instance, 'public_ip_address')
+                private = getattr(instance, 'private_ip_address')
+                ips = {'Public': public, 'Private': private}
+                if ips == {}:
+                    raise Exception("Unable to find instance IP addresses with 
instance name: " + instance_name)
+                return ips
+    except Exception as err:
+        logging.error("Error with finding instance metadata with instance 
name: "
+                      + instance_name + " : " + str(err) + "\n Traceback: " + 
traceback.print_exc(file=sys.stdout))
+        append_result(str({"error": "Error with finding instance metadata",
+                           "error_message": str(err) + "\n Traceback: " + 
traceback.print_exc(file=sys.stdout)}))
         traceback.print_exc(file=sys.stdout)
 
 
+
 def get_vpc_endpoints(vpc_id):
     try:
         # Returns LIST of Endpoint DICTIONARIES
@@ -107,26 +115,6 @@ def get_bucket_by_name(bucket_name):
         traceback.print_exc(file=sys.stdout)
 
 
-def get_instance_ip_address(tag_name, instance_name):
-    try:
-        ec2 = boto3.resource('ec2')
-        instances = ec2.instances.filter(
-            Filters=[{'Name': 'tag:{}'.format(tag_name), 'Values': 
[instance_name]},
-                     {'Name': 'instance-state-name', 'Values': ['running']}])
-        ips = {}
-        for instance in instances:
-            public = getattr(instance, 'public_ip_address')
-            private = getattr(instance, 'private_ip_address')
-            ips = {'Public': public, 'Private': private}
-        if ips == {}:
-            raise Exception("Unable to find instance IP addresses with 
instance name: " + instance_name)
-        return ips
-    except Exception as err:
-        logging.error("Error with getting ip address by name: " + str(err) + 
"\n Traceback: " + traceback.print_exc(file=sys.stdout))
-        append_result(str({"error": "Error with getting ip address by name", 
"error_message": str(err) + "\n Traceback: " + 
traceback.print_exc(file=sys.stdout)}))
-        traceback.print_exc(file=sys.stdout)
-
-
 def get_instance_ip_address_by_id(instance_id):
     try:
         ec2 = boto3.resource('ec2')
diff --git 
a/infrastructure-provisioning/src/general/scripts/aws/ssn_configure.py 
b/infrastructure-provisioning/src/general/scripts/aws/ssn_configure.py
index eceb451..b683ff6 100644
--- a/infrastructure-provisioning/src/general/scripts/aws/ssn_configure.py
+++ b/infrastructure-provisioning/src/general/scripts/aws/ssn_configure.py
@@ -33,57 +33,28 @@ import traceback
 import subprocess
 from fabric import *
 
+def cleanup_aws_cloud_resources(tag_name, service_base_name):
+    try:
+        params = "--tag_name {} --service_base_name {}".format(tag_name, 
service_base_name)
+        subprocess.run("~/scripts/{}.py 
{}".format('ssn_terminate_aws_resources', params), shell=True, check=True)
+    except:
+        traceback.print_exc()
+        raise Exception
+
 if __name__ == "__main__":
+    #configuring logs
     local_log_filename = "{}_{}.log".format(os.environ['conf_resource'], 
os.environ['request_id'])
     local_log_filepath = "/logs/" + os.environ['conf_resource'] + "/" + 
local_log_filename
     logging.basicConfig(format='%(levelname)-8s [%(asctime)s]  %(message)s',
                         level=logging.DEBUG,
-                        filename=local_log_filepath)
-
-    ssn_conf = dict()
-    ssn_conf['instance'] = 'ssn'
-
-    def clear_resources():
-        if ssn_conf['domain_created']:
-            
datalab.actions_lib.remove_route_53_record(os.environ['ssn_hosted_zone_id'],
-                                                       
os.environ['ssn_hosted_zone_name'],
-                                                       
os.environ['ssn_subdomain'])
-        datalab.actions_lib.remove_ec2(ssn_conf['tag_name'], 
ssn_conf['instance_name'])
-        datalab.actions_lib.remove_all_iam_resources(ssn_conf['instance'])
-        datalab.actions_lib.remove_s3(ssn_conf['instance'])
-        if ssn_conf['pre_defined_sg']:
-            datalab.actions_lib.remove_sgroups(ssn_conf['tag_name'])
-        if ssn_conf['pre_defined_subnet']:
-            
datalab.actions_lib.remove_internet_gateways(os.environ['aws_vpc_id'], 
ssn_conf['tag_name'],
-                                                         
ssn_conf['service_base_name'])
-            datalab.actions_lib.remove_subnets(ssn_conf['subnet_name'])
-        if ssn_conf['pre_defined_vpc']:
-            datalab.actions_lib.remove_vpc_endpoints(os.environ['aws_vpc_id'])
-            datalab.actions_lib.remove_route_tables(ssn_conf['tag_name'], True)
-            datalab.actions_lib.remove_vpc(os.environ['aws_vpc_id'])
-        if ssn_conf['pre_defined_vpc2']:
-            datalab.actions_lib.remove_peering('*')
-            try:
-                
datalab.actions_lib.remove_vpc_endpoints(os.environ['aws_vpc2_id'])
-            except:
-                print("There are no VPC Endpoints")
-            datalab.actions_lib.remove_route_tables(ssn_conf['tag2_name'], 
True)
-            datalab.actions_lib.remove_vpc(os.environ['aws_vpc2_id'])
+                        handlers=[logging.StreamHandler(), 
logging.FileHandler(local_log_filepath)])
 
+    # deriving variables for ssn node deployment
     try:
         logging.info('[DERIVING NAMES]')
-        print('[DERIVING NAMES]')
+        ssn_conf = dict()
         ssn_conf['service_base_name'] = os.environ['conf_service_base_name'] = 
datalab.fab.replace_multi_symbols(
-            os.environ['conf_service_base_name'][:20], '-', True)
-        if 'ssn_hosted_zone_id' in os.environ and 'ssn_hosted_zone_name' in 
os.environ and \
-                'ssn_subdomain' in os.environ:
-            ssn_conf['domain_created'] = True
-        else:
-            ssn_conf['domain_created'] = False
-        ssn_conf['pre_defined_vpc'] = False
-        ssn_conf['pre_defined_subnet'] = False
-        ssn_conf['pre_defined_sg'] = False
-        ssn_conf['billing_enabled'] = True
+                    os.environ['conf_service_base_name'][:20], '-', True)
         ssn_conf['role_name'] = 
'{}-ssn-role'.format(ssn_conf['service_base_name'])
         ssn_conf['role_profile_name'] = 
'{}-ssn-profile'.format(ssn_conf['service_base_name'])
         ssn_conf['policy_name'] = 
'{}-ssn-policy'.format(ssn_conf['service_base_name'])
@@ -97,151 +68,94 @@ if __name__ == "__main__":
         ssn_conf['sg_name'] = '{}-ssn-sg'.format(ssn_conf['service_base_name'])
         ssn_conf['network_type'] = os.environ['conf_network_type']
         ssn_conf['datalab_ssh_user'] = os.environ['conf_os_user']
+        ssn_conf['ssn_datalab_path'] = os.environ['ssn_datalab_path']
+        ssn_conf['conf_tag_resource_id'] = os.environ['conf_tag_resource_id']
+        ssn_conf['instance_hostname'] = (lambda x: 
datalab.meta_lib.get_instance_metadata(
+            ssn_conf['tag_name'], ssn_conf['instance_name'], 'ip_address').get(
+            'Private') if x == 'private' else 
datalab.meta_lib.get_instance_metadata(
+            ssn_conf['tag_name'], ssn_conf['instance_name'], 
'hostname'))(ssn_conf['network_type'])
+        ssn_conf['initial_user'] = (lambda x: 'ubuntu' if x == 'debian' else 
'ec2-user')(os.environ['conf_os_family'])
+        ssn_conf['sudo_group'] = (lambda x: 'sudo' if x == 'debian' else 
'wheel')(os.environ['conf_os_family'])
+        ssn_conf['step_cert_sans'] = (lambda x: (lambda x: ' --san {0} --san 
{1}'.format(
+            datalab.meta_lib.get_instance_metadata(ssn_conf['tag_name'], 
ssn_conf['instance_name'], 'hostname'),
+            datalab.meta_lib.get_instance_metadata(ssn_conf['tag_name'], 
ssn_conf['instance_name'], 'ip_address').get(
+                'Public')) if x == 'public' else ' --san 
{0}'.format(datalab.meta_lib.get_instance_metadata(
+            ssn_conf['tag_name'], ssn_conf['instance_name'], 
'ip_address').get('Private')))(
+            ssn_conf['network_type']) if x == 'true' else 
'')(os.environ['conf_stepcerts_enabled'])
 
-        try:
-            if os.environ['aws_vpc_id'] == '':
-                raise KeyError
-        except KeyError:
-            ssn_conf['tag'] = {"Key": ssn_conf['tag_name'], "Value": 
"{}-subnet".format(ssn_conf['service_base_name'])}
-            os.environ['aws_vpc_id'] = 
datalab.meta_lib.get_vpc_by_tag(ssn_conf['tag_name'],
-                                                                       
ssn_conf['service_base_name'])
-            ssn_conf['pre_defined_vpc'] = True
-        try:
-            if os.environ['aws_subnet_id'] == '':
-                raise KeyError
-        except KeyError:
-            ssn_conf['tag'] = {"Key": ssn_conf['tag_name'], "Value": 
"{}-subnet".format(ssn_conf['service_base_name'])}
-            os.environ['aws_subnet_id'] = 
datalab.meta_lib.get_subnet_by_tag(ssn_conf['tag'], True)
-            ssn_conf['pre_defined_subnet'] = True
-        try:
-            if os.environ['conf_duo_vpc_enable'] == 'true' and not 
os.environ['aws_vpc2_id']:
-                raise KeyError
-        except KeyError:
-            ssn_conf['tag'] = {"Key": ssn_conf['tag2_name'], "Value": 
"{}-subnet".format(ssn_conf['service_base_name'])}
-            os.environ['aws_vpc2_id'] = 
datalab.meta_lib.get_vpc_by_tag(ssn_conf['tag2_name'],
-                                                                        
ssn_conf['service_base_name'])
-            ssn_conf['pre_defined_vpc2'] = True
-        try:
-            if os.environ['conf_duo_vpc_enable'] == 'true' and not 
os.environ['aws_peering_id']:
-                raise KeyError
-        except KeyError:
-            os.environ['aws_peering_id'] = 
datalab.meta_lib.get_peering_by_tag(ssn_conf['tag_name'],
-                                                                               
ssn_conf['service_base_name'])
-            ssn_conf['pre_defined_peering'] = True
-        try:
-            if os.environ['aws_security_groups_ids'] == '':
-                raise KeyError
-        except KeyError:
-            os.environ['aws_security_groups_ids'] = 
datalab.meta_lib.get_security_group_by_name(ssn_conf['sg_name'])
-            ssn_conf['pre_defined_sg'] = True
-        try:
-            if os.environ['aws_account_id'] == '':
-                raise KeyError
-            if os.environ['aws_billing_bucket'] == '':
-                raise KeyError
-        except KeyError:
-            ssn_conf['billing_enabled'] = False
-        if not ssn_conf['billing_enabled']:
-            os.environ['aws_account_id'] = 'None'
-            os.environ['aws_billing_bucket'] = 'None'
-        try:
-            if not os.environ['aws_report_path']:
-                raise KeyError
-        except KeyError:
-            os.environ['aws_report_path'] = ''
     except Exception as err:
+        logging.error('Error: {0}'.format(err))
         datalab.fab.append_result("Failed to generate variables dictionary.", 
str(err))
-        clear_resources()
+        traceback.print_exc()
         sys.exit(1)
 
+    #creating datalab ssh user
     try:
-        if os.environ['conf_os_family'] == 'debian':
-            ssn_conf['initial_user'] = 'ubuntu'
-            ssn_conf['sudo_group'] = 'sudo'
-        if os.environ['conf_os_family'] == 'redhat':
-            ssn_conf['initial_user'] = 'ec2-user'
-            ssn_conf['sudo_group'] = 'wheel'
-
-        if ssn_conf['network_type'] == 'private':
-            ssn_conf['instance_hostname'] = 
datalab.meta_lib.get_instance_ip_address(
-                ssn_conf['tag_name'], ssn_conf['instance_name']).get('Private')
-        else:
-            ssn_conf['instance_hostname'] = 
datalab.meta_lib.get_instance_hostname(
-                ssn_conf['tag_name'], ssn_conf['instance_name'])
-
-        if os.environ['conf_stepcerts_enabled'] == 'true':
-            ssn_conf['step_cert_sans'] = ' --san {0} 
'.format(datalab.meta_lib.get_instance_ip_address(
-                ssn_conf['tag_name'], 
ssn_conf['instance_name']).get('Private'))
-            if ssn_conf['network_type'] == 'public':
-                ssn_conf['step_cert_sans'] += ' --san {0} --san {1}'.format(
-                    
datalab.meta_lib.get_instance_hostname(ssn_conf['tag_name'], 
ssn_conf['instance_name']),
-                    
datalab.meta_lib.get_instance_ip_address(ssn_conf['tag_name'],
-                                                             
ssn_conf['instance_name']).get('Public'))
-        else:
-            ssn_conf['step_cert_sans'] = ''
-
         logging.info('[CREATING DATALAB SSH USER]')
-        print('[CREATING DATALAB SSH USER]')
         params = "--hostname {} --keyfile {} --initial_user {} --os_user {} 
--sudo_group {}".format(
             ssn_conf['instance_hostname'], os.environ['conf_key_dir'] + 
os.environ['conf_key_name'] + ".pem",
             ssn_conf['initial_user'], ssn_conf['datalab_ssh_user'], 
ssn_conf['sudo_group'])
-
         try:
             subprocess.run("~/scripts/{}.py {}".format('create_ssh_user', 
params), shell=True, check=True)
         except:
             traceback.print_exc()
             raise Exception
     except Exception as err:
-        datalab.fab.append_result("Failed creating ssh user 'datalab'.", 
str(err))
-        clear_resources()
+        logging.error('Error: {0}'.format(err))
+        datalab.fab.append_result("Failed creating ssh user", str(err))
+        remove_cloud_resources(ssn_conf['tag_name'], 
ssn_conf['service_base_name'])
         sys.exit(1)
 
+    #installing prerequisites to ssn instance
     try:
         logging.info('[INSTALLING PREREQUISITES TO SSN INSTANCE]')
-        print('[INSTALLING PREREQUISITES TO SSN INSTANCE]')
-        params = "--hostname {} --keyfile {} --pip_packages 'boto3 
bcrypt==3.1.7 backoff argparse fabric==1.14.0 awscli pymongo " \
-                 "pyyaml jinja2' --user {} --region {}". \
-            format(ssn_conf['instance_hostname'], os.environ['conf_key_dir'] + 
os.environ['conf_key_name'] + ".pem",
-                   ssn_conf['datalab_ssh_user'], os.environ['aws_region'])
-
+        pip_packages = 'boto3=={} bcrypt=={} backoff=={} argparse=={} 
fabric=={} awscli=={} pymongo=={} pyyaml=={}' \
+                       ' jinja2=={}'.format(os.environ['pip_packages_boto3'], 
os.environ['pip_packages_bcrypt'],
+                                            
os.environ['pip_packages_backoff'], os.environ['pip_packages_argparse'],
+                                            os.environ['pip_packages_fabric'], 
os.environ['pip_packages_awscli'],
+                                            
os.environ['pip_packages_pymongo'], os.environ['pip_packages_pyyaml'],
+                                            os.environ['pip_packages_jinja2'])
+        params = "--hostname {} --keyfile {} --pip_packages {} --user {} 
--region {}".format(
+            ssn_conf['instance_hostname'], 
"{}{}.pem".format(os.environ['conf_key_dir'], os.environ['conf_key_name']),
+            pip_packages, ssn_conf['datalab_ssh_user'], ssn_conf['region'])
         try:
             subprocess.run("~/scripts/{}.py 
{}".format('install_prerequisites', params), shell=True, check=True)
         except:
             traceback.print_exc()
             raise Exception
     except Exception as err:
+        logging.error('Error: {0}'.format(err))
         datalab.fab.append_result("Failed installing software: pip, 
packages.", str(err))
-        clear_resources()
+        remove_cloud_resources(ssn_conf['tag_name'], 
ssn_conf['service_base_name'])
         sys.exit(1)
 
+    #configuring ssn instance
     try:
         logging.info('[CONFIGURE SSN INSTANCE]')
-        print('[CONFIGURE SSN INSTANCE]')
-        additional_config = {"nginx_template_dir": "/root/templates/", 
"service_base_name":
-            ssn_conf['service_base_name'],
+        additional_config = {"nginx_template_dir": "/root/templates/",
+                             "service_base_name": 
ssn_conf['service_base_name'],
                              "security_group_id": 
os.environ['aws_security_groups_ids'],
                              "vpc_id": os.environ['aws_vpc_id'], "subnet_id": 
os.environ['aws_subnet_id'],
                              "admin_key": os.environ['conf_key_name']}
-        params = "--hostname {} --keyfile {} --additional_config '{}' 
--os_user {} --datalab_path {} " \
-                 "--tag_resource_id {} --step_cert_sans '{}' ".format(
-            ssn_conf['instance_hostname'],
-            "{}{}.pem".format(os.environ['conf_key_dir'], 
os.environ['conf_key_name']),
-            json.dumps(additional_config), ssn_conf['datalab_ssh_user'], 
os.environ['ssn_datalab_path'],
-            os.environ['conf_tag_resource_id'], ssn_conf['step_cert_sans'])
-
+        params = "--hostname {} --keyfile {} --additional_config '{}' 
--os_user {} --datalab_path {}" \
+                 " --tag_resource_id {} --step_cert_sans '{}' ".format(
+            ssn_conf['instance_hostname'], 
"{}{}.pem".format(os.environ['conf_key_dir'], os.environ['conf_key_name']),
+            json.dumps(additional_config), ssn_conf['datalab_ssh_user'], 
ssn_conf['ssn_datalab_path'],
+            ssn_conf['conf_tag_resource_id'], ssn_conf['step_cert_sans'])
         try:
             subprocess.run("~/scripts/{}.py {}".format('configure_ssn_node', 
params), shell=True, check=True)
         except:
             traceback.print_exc()
             raise Exception
     except Exception as err:
-        datalab.fab.append_result("Failed configuring ssn.", str(err))
-        clear_resources()
+        logging.error('Error: {0}'.format(err))
+        datalab.fab.append_result("Failed to configure SSN node.", str(err))
+        remove_cloud_resources(ssn_conf['tag_name'], 
ssn_conf['service_base_name'])
         sys.exit(1)
 
+    #configuring docker at ssn instance
     try:
         logging.info('[CONFIGURING DOCKER AT SSN INSTANCE]')
-        print('[CONFIGURING DOCKER AT SSN INSTANCE]')
         additional_config = [{"name": "base", "tag": "latest"},
                              {"name": "edge", "tag": "latest"},
                              {"name": "project", "tag": "latest"},
@@ -268,11 +182,23 @@ if __name__ == "__main__":
             traceback.print_exc()
             raise Exception
     except Exception as err:
-        datalab.fab.append_result("Unable to configure docker.", str(err))
-        clear_resources()
+        logging.error('Error: {0}'.format(err))
+        datalab.fab.append_result("Failed to configure docker.", str(err))
+        remove_cloud_resources(ssn_conf['tag_name'], 
ssn_conf['service_base_name'])
         sys.exit(1)
 
+    #configuring keycloak client for ui
     try:
+        logging.info('[CONFIGURE KEYCLOAK CLIENT FOR DATALAB UI]')
+    except Exception as err:
+        logging.error('Error: {0}'.format(err))
+        datalab.fab.append_result("Failed to configure Keycloak client for 
DataLab UI.", str(err))
+        remove_cloud_resources(ssn_conf['tag_name'], 
ssn_conf['service_base_name'])
+        sys.exit(1)
+
+    #configuring UI
+    try:
+        logging.info('[CONFIGURE SSN INSTANCE UI]')
         cloud_params = [
             {
                 'key': 'KEYCLOAK_REDIRECT_URI',
@@ -348,26 +274,6 @@ if __name__ == "__main__":
                 'value': os.environ['conf_key_dir']
             },
             {
-                'key': 'LDAP_HOST',
-                'value': os.environ['ldap_hostname']
-            },
-            {
-                'key': 'LDAP_DN',
-                'value': os.environ['ldap_dn']
-            },
-            {
-                'key': 'LDAP_OU',
-                'value': os.environ['ldap_ou']
-            },
-            {
-                'key': 'LDAP_USER_NAME',
-                'value': os.environ['ldap_service_username']
-            },
-            {
-                'key': 'LDAP_USER_PASSWORD',
-                'value': os.environ['ldap_service_password']
-            },
-            {
                 'key': 'AZURE_RESOURCE_GROUP_NAME',
                 'value': ''
             },
@@ -430,7 +336,7 @@ if __name__ == "__main__":
             cloud_params.append(
                 {
                     'key': 'PEERING_ID',
-                    'value': ''
+                    'value': os.environ['aws_peering_id']
                 })
         if os.environ['conf_stepcerts_enabled'] == 'true':
             cloud_params.append(
@@ -621,41 +527,31 @@ if __name__ == "__main__":
             traceback.print_exc()
             raise Exception
     except Exception as err:
-        datalab.fab.append_result("Unable to configure UI.", str(err))
-        clear_resources()
+        logging.error('Error: {0}'.format(err))
+        datalab.fab.append_result("Failed to configure Datalab UI.", str(err))
+        remove_cloud_resources(ssn_conf['tag_name'], 
ssn_conf['service_base_name'])
         sys.exit(1)
 
+    #ssn deployment summary
     try:
         logging.info('[SUMMARY]')
-        print('[SUMMARY]')
-        print("Service base name: {}".format(ssn_conf['service_base_name']))
-        print("SSN Name: {}".format(ssn_conf['instance_name']))
-        print("SSN Hostname: {}".format(ssn_conf['instance_hostname']))
-        print("Role name: {}".format(ssn_conf['role_name']))
-        print("Role profile name: {}".format(ssn_conf['role_profile_name']))
-        print("Policy name: {}".format(ssn_conf['policy_name']))
-        print("Key name: {}".format(os.environ['conf_key_name']))
-        print("VPC ID: {}".format(os.environ['aws_vpc_id']))
-        print("Subnet ID: {}".format(os.environ['aws_subnet_id']))
-        print("Security IDs: {}".format(os.environ['aws_security_groups_ids']))
-        print("SSN instance shape: 
{}".format(os.environ['aws_ssn_instance_size']))
-        print("SSN AMI name: {}".format(ssn_conf['ssn_image_name']))
-        print("Region: {}".format(ssn_conf['region']))
-        ssn_conf['jenkins_url'] = 
"http://{}/jenkins".format(datalab.meta_lib.get_instance_hostname(
-            ssn_conf['tag_name'], ssn_conf['instance_name']))
-        ssn_conf['jenkins_url_https'] = 
"https://{}/jenkins".format(datalab.meta_lib.get_instance_hostname(
-            ssn_conf['tag_name'], ssn_conf['instance_name']))
-        print("Jenkins URL: {}".format(ssn_conf['jenkins_url']))
-        print("Jenkins URL HTTPS: {}".format(ssn_conf['jenkins_url_https']))
-        print("DataLab UI HTTP URL: 
http://{}".format(datalab.meta_lib.get_instance_hostname(
+        logging.info("Service base name: 
{}".format(ssn_conf['service_base_name']))
+        logging.info("SSN Name: {}".format(ssn_conf['instance_name']))
+        logging.info("SSN Hostname: {}".format(ssn_conf['instance_hostname']))
+        logging.info("Role name: {}".format(ssn_conf['role_name']))
+        logging.info("Role profile name: 
{}".format(ssn_conf['role_profile_name']))
+        logging.info("Policy name: {}".format(ssn_conf['policy_name']))
+        logging.info("Key name: {}".format(os.environ['conf_key_name']))
+        logging.info("VPC ID: {}".format(os.environ['aws_vpc_id']))
+        logging.info("Subnet ID: {}".format(os.environ['aws_subnet_id']))
+        logging.info("Security IDs: 
{}".format(os.environ['aws_security_groups_ids']))
+        logging.info("SSN instance shape: 
{}".format(os.environ['aws_ssn_instance_size']))
+        logging.info("SSN AMI name: {}".format(ssn_conf['ssn_image_name']))
+        logging.info("Region: {}".format(ssn_conf['region']))
+        logging.info("DataLab UI HTTP URL: 
http://{}".format(datalab.meta_lib.get_instance_hostname(
             ssn_conf['tag_name'], ssn_conf['instance_name'])))
-        print("DataLab UI HTTPS URL: 
https://{}".format(datalab.meta_lib.get_instance_hostname(
+        logging.info("DataLab UI HTTPS URL: 
https://{}".format(datalab.meta_lib.get_instance_hostname(
             ssn_conf['tag_name'], ssn_conf['instance_name'])))
-        try:
-            with open('jenkins_creds.txt') as f:
-                print(f.read())
-        except:
-            print("Jenkins is either configured already or have issues in 
configuration routine.")
 
         with open("/root/result.json", 'w') as f:
             res = {"service_base_name": ssn_conf['service_base_name'],
@@ -674,19 +570,19 @@ if __name__ == "__main__":
                    "action": "Create SSN instance"}
             f.write(json.dumps(res))
 
-        print('Upload response file')
+        logging.info('Upload response file')
         params = "--instance_name {} --local_log_filepath {} --os_user {} 
--instance_hostname {}". \
             format(ssn_conf['instance_name'], local_log_filepath, 
ssn_conf['datalab_ssh_user'],
                    ssn_conf['instance_hostname'])
         subprocess.run("~/scripts/{}.py {}".format('upload_response_file', 
params), shell=True, check=True)
 
         logging.info('[FINALIZE]')
-        print('[FINALIZE]')
         params = ""
         if os.environ['conf_lifecycle_stage'] == 'prod':
             params += "--key_id {}".format(os.environ['aws_access_key'])
             subprocess.run("~/scripts/{}.py {}".format('ssn_finalize', 
params), shell=True, check=True)
     except Exception as err:
+        logging.error('Error: {0}'.format(err))
         datalab.fab.append_result("Error with writing results.", str(err))
-        clear_resources()
-        sys.exit(1)
+        remove_cloud_resources(ssn_conf['tag_name'], 
ssn_conf['service_base_name'])
+        sys.exit(1)
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/general/scripts/aws/ssn_prepare.py 
b/infrastructure-provisioning/src/general/scripts/aws/ssn_prepare.py
index 5f6a36e..2ada46c 100644
--- a/infrastructure-provisioning/src/general/scripts/aws/ssn_prepare.py
+++ b/infrastructure-provisioning/src/general/scripts/aws/ssn_prepare.py
@@ -111,7 +111,7 @@ if __name__ == "__main__":
     #creating aws vpc
     try:
         if 'aws_vpc_id' in os.environ and os.environ['aws_vpc_id'] != '':
-            ssn_conf['aws_vpc_id'] = os.environ['aws_vpc_id']
+            ssn_conf['predefined_aws_vpc'] = 'true'
         else:
             logging.info('[CREATE VPC AND ROUTE TABLE]')
             params = "--vpc {} --region {} --infra_tag_name {} 
--infra_tag_value {} --vpc_name {}".format(
@@ -122,9 +122,9 @@ if __name__ == "__main__":
             except:
                 traceback.print_exc()
                 raise Exception
-            ssn_conf['aws_vpc_id'] = 
datalab.meta_lib.get_vpc_by_tag(ssn_conf['tag_name'],
+            os.environ['aws_vpc_id'] = 
datalab.meta_lib.get_vpc_by_tag(ssn_conf['tag_name'],
                                                                        
ssn_conf['service_base_name'])
-        for cidr in 
datalab.meta_lib.get_vpc_cidr_by_id(ssn_conf['aws_vpc_id']):
+        for cidr in 
datalab.meta_lib.get_vpc_cidr_by_id(os.environ['aws_vpc_id']):
             ssn_conf['allowed_vpc_cidr_ip_ranges'].append({"CidrIp": cidr})
     except Exception as err:
         logging.error('Error: {0}'.format(err))
@@ -146,7 +146,7 @@ if __name__ == "__main__":
             except:
                 traceback.print_exc()
                 raise Exception
-            ssn_conf['aws_vpc2_id'] = 
datalab.meta_lib.get_vpc_by_tag(ssn_conf['tag2_name'],
+            os.environ['aws_vpc2_id'] = 
datalab.meta_lib.get_vpc_by_tag(ssn_conf['tag2_name'],
                                                                 
ssn_conf['service_base_name'])
     except Exception as err:
         logging.error('Error: {0}'.format(err))
@@ -157,11 +157,11 @@ if __name__ == "__main__":
     #creating subnet
     try:
         if 'aws_subnet_id' in os.environ and os.environ['aws_subnet_id'] != '':
-            ssn_conf['aws_subnet_id'] = os.environ['aws_subnet_id']
+            ssn_conf['predefined_aws_subnet'] = 'true'
         else:
             logging.info('[CREATE SUBNET]')
             params = "--vpc_id {0} --username {1} --infra_tag_name {2} 
--infra_tag_value {3} --prefix {4} " \
-                     "--ssn {5} --zone {6} --subnet_name 
{7}".format(ssn_conf['aws_vpc_id'], 'ssn',
+                     "--ssn {5} --zone {6} --subnet_name 
{7}".format(os.environ['aws_vpc_id'], 'ssn',
                                                                      
ssn_conf['tag_name'],
                                                                      
ssn_conf['service_base_name'],
                                                                      '20', 
True,
@@ -171,9 +171,9 @@ if __name__ == "__main__":
             except:
                 traceback.print_exc()
                 raise Exception
-            ssn_conf['aws_subnet_id'] = 
datalab.meta_lib.get_subnet_by_tag(ssn_conf['subnet_tag'], True,
-                                                                           
ssn_conf['aws_vpc_id'])
-            
datalab.actions_lib.enable_auto_assign_ip(ssn_conf['aws_subnet_id'])
+            os.environ['aws_subnet_id'] = 
datalab.meta_lib.get_subnet_by_tag(ssn_conf['subnet_tag'], True,
+                                                                           
os.environ['aws_vpc_id'])
+            
datalab.actions_lib.enable_auto_assign_ip(os.environ['aws_subnet_id'])
     except Exception as err:
         logging.error('Error: {0}'.format(err))
         datalab.fab.append_result("Failed to create Subnet", str(err))
@@ -182,14 +182,14 @@ if __name__ == "__main__":
 
     #creating peering connection
     try:
-        if os.environ['conf_duo_vpc_enable'] == 'true' and 
ssn_conf['aws_vpc_id'] and ssn_conf['aws_vpc2_id']:
+        if os.environ['conf_duo_vpc_enable'] == 'true' and 
os.environ['aws_vpc_id'] and os.environ['aws_vpc2_id']:
             logging.info('[CREATE PEERING CONNECTION]')
-            ssn_conf['aws_peering_id'] = 
datalab.actions_lib.create_peering_connection(
-                ssn_conf['aws_vpc_id'], ssn_conf['aws_vpc2_id'], 
ssn_conf['service_base_name'])
-            logging.info('PEERING CONNECTION ID:' + 
ossn_conf['aws_peering_id'])
-            datalab.actions_lib.create_route_by_id(ssn_conf['aws_subnet_id'], 
ssn_conf['aws_vpc_id'],
-                                                   ssn_conf['aws_peering_id'],
-                                                   
datalab.meta_lib.get_cidr_by_vpc(ssn_conf['aws_vpc2_id']))
+            os.environ['aws_peering_id'] = 
datalab.actions_lib.create_peering_connection(
+                os.environ['aws_vpc_id'], os.environ['aws_vpc2_id'], 
ssn_conf['service_base_name'])
+            logging.info('PEERING CONNECTION ID:' + 
os.environ['aws_peering_id'])
+            
datalab.actions_lib.create_route_by_id(os.environ['aws_subnet_id'], 
os.environ['aws_vpc_id'],
+                                                   
os.environ['aws_peering_id'],
+                                                   
datalab.meta_lib.get_cidr_by_vpc(os.environ['aws_vpc2_id']))
     except Exception as err:
         logging.error('Error: {0}'.format(err))
         datalab.fab.append_result("Failed to create peering connection", 
str(err))
@@ -199,7 +199,7 @@ if __name__ == "__main__":
     #creating security groups
     try:
         if 'aws_security_groups_ids' in os.environ and 
os.environ['aws_security_groups_ids'] != '':
-            ssn_conf['aws_security_groups_ids'] = 
os.environ['aws_security_groups_ids']
+            ssn_conf['predefined_security_groups'] = 'true'
         else:
             logging.info('[CREATE SG FOR SSN]')
             ssn_conf['ingress_sg_rules_template'] = 
datalab.meta_lib.format_sg([
@@ -246,7 +246,7 @@ if __name__ == "__main__":
             ])
             params = "--name {} --vpc_id {} --security_group_rules '{}' 
--egress '{}' --infra_tag_name {} " \
                      "--infra_tag_value {} --force {} --ssn {}". \
-                format(ssn_conf['sg_name'], ssn_conf['aws_vpc_id'],
+                format(ssn_conf['sg_name'], os.environ['aws_vpc_id'],
                        json.dumps(ssn_conf['ingress_sg_rules_template']), 
json.dumps(egress_sg_rules_template),
                        ssn_conf['service_base_name'], ssn_conf['tag_name'], 
False, True)
             try:
@@ -254,7 +254,7 @@ if __name__ == "__main__":
             except:
                 traceback.print_exc()
                 raise Exception
-            ssn_conf['aws_security_groups_ids'] = 
datalab.meta_lib.get_security_group_by_name(ssn_conf['sg_name'])
+            os.environ['aws_security_groups_ids'] = 
datalab.meta_lib.get_security_group_by_name(ssn_conf['sg_name'])
     except Exception as err:
         logging.error('Error: {0}'.format(err))
         datalab.fab.append_result("Failed to create security group for SSN", 
str(err))
@@ -284,7 +284,7 @@ if __name__ == "__main__":
     try:
         logging.info('[CREATE ENDPOINT AND ROUTE-TABLE]')
         params = "--vpc_id {} --region {} --infra_tag_name {} 
--infra_tag_value {}".format(
-            ssn_conf['aws_vpc_id'], ssn_conf['region'], ssn_conf['tag_name'], 
ssn_conf['service_base_name'])
+            os.environ['aws_vpc_id'], ssn_conf['region'], 
ssn_conf['tag_name'], ssn_conf['service_base_name'])
         try:
             subprocess.run("~/scripts/{}.py {}".format('ssn_create_endpoint', 
params), shell=True, check=True)
         except:
@@ -301,7 +301,7 @@ if __name__ == "__main__":
         if os.environ['conf_duo_vpc_enable'] == 'true':
             logging.info('[CREATE ENDPOINT AND ROUTE-TABLE FOR NOTEBOOK VPC]')
             params = "--vpc_id {} --region {} --infra_tag_name {} 
--infra_tag_value {}".format(
-                ssn_conf['aws_vpc2_id'], ssn_conf['aws_region'], 
ssn_conf['tag2_name'],
+                os.environ['aws_vpc2_id'], ssn_conf['aws_region'], 
ssn_conf['tag2_name'],
                 ssn_conf['service_base_name'])
             try:
                 subprocess.run("~/scripts/{}.py 
{}".format('ssn_create_endpoint', params), shell=True, check=True)
@@ -321,7 +321,7 @@ if __name__ == "__main__":
                  "--subnet_id {5} --iam_profile {6} --infra_tag_name {7} 
--infra_tag_value {8} --instance_class {9} " \
                  "--primary_disk_size {10}".\
             format(ssn_conf['instance_name'], ssn_conf['ssn_ami_id'], 
os.environ['aws_ssn_instance_size'],
-                   os.environ['conf_key_name'], 
ssn_conf['aws_security_groups_ids'], ssn_conf['aws_subnet_id'],
+                   os.environ['conf_key_name'], 
os.environ['aws_security_groups_ids'], os.environ['aws_subnet_id'],
                    ssn_conf['role_profile_name'], ssn_conf['tag_name'], 
ssn_conf['instance_name'], 'ssn', '20')
 
         try:

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to