You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datalab.apache.org by lf...@apache.org on 2021/02/02 15:06:17 UTC

[incubator-datalab] branch DATALAB-2091 updated (bd802e5 -> d72db0a)

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

lfrolov pushed a change to branch DATALAB-2091
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git.


    from bd802e5  Merge pull request #1053 from apache/DATALAB-2246
     new 0b20fa9  [DATALAB-2091]: remade connection for new fabric
     new b4ea1a4  [DATALAB-2091]: replaced fab-classic with fabric
     new d72db0a  Merge branch 'DATALAB-2091' of https://github.com/apache/incubator-dlab into DATALAB-2091

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../scripts/deploy_repository/deploy_repository.py |  6 +--
 .../src/base/scripts/create_ssh_user.py            |  7 ++--
 .../src/base/scripts/install_prerequisites.py      |  8 ++--
 .../src/base/scripts/install_user_key.py           |  5 +--
 .../src/dataengine/scripts/configure_dataengine.py |  5 +--
 .../scripts/configure_deep_learning_node.py        |  8 ++--
 .../src/edge/scripts/configure_http_proxy.py       |  6 +--
 .../edge/scripts/configure_nginx_reverse_proxy.py  |  7 ++--
 .../src/general/files/gcp/base_Dockerfile          |  2 +-
 .../src/general/lib/azure/actions_lib.py           | 12 +++---
 .../src/general/lib/os/debian/notebook_lib.py      |  2 -
 .../src/general/lib/os/fab.py                      | 43 +++++++++++++++-------
 .../scripts/aws/common_download_git_certfile.py    |  8 ++--
 .../scripts/aws/common_remove_remote_kernels.py    |  8 ++--
 .../scripts/aws/dataengine-service_configure.py    |  5 +--
 .../scripts/azure/common_download_git_certfile.py  |  8 ++--
 .../scripts/azure/common_remove_remote_kernels.py  |  5 +--
 .../general/scripts/azure/rstudio_change_pass.py   |  5 +--
 .../scripts/gcp/common_download_git_certfile.py    |  8 ++--
 .../scripts/gcp/dataengine-service_configure.py    |  4 +-
 .../src/general/scripts/gcp/ssn_configure.py       |  2 +-
 .../src/general/scripts/gcp/ssn_prepare.py         |  4 +-
 .../src/general/scripts/os/check_inactivity.py     |  6 +--
 .../general/scripts/os/common_clean_instance.py    |  6 +--
 .../general/scripts/os/common_configure_proxy.py   |  6 +--
 .../scripts/os/common_configure_reverse_proxy.py   |  6 +--
 .../general/scripts/os/common_configure_spark.py   |  6 +--
 .../scripts/os/configure_proxy_for_docker.py       |  5 +--
 .../general/scripts/os/get_list_available_pkgs.py  |  6 +--
 .../general/scripts/os/install_additional_libs.py  |  8 +---
 .../scripts/os/jupyterlab_container_start.py       |  6 +--
 .../src/general/scripts/os/manage_git_creds.py     |  8 ++--
 .../src/general/scripts/os/reconfigure_spark.py    |  5 +--
 .../src/general/scripts/os/superset_start.py       |  5 +--
 .../scripts/os/update_inactivity_on_start.py       |  8 ++--
 .../src/jupyter/scripts/configure_jupyter_node.py  |  7 +---
 .../scripts/configure_jupyterlab_node.py           |  8 ++--
 .../src/project/scripts/configure_http_proxy.py    |  6 +--
 .../src/project/scripts/configure_nftables.py      |  5 +--
 .../scripts/configure_nginx_reverse_proxy.py       |  5 +--
 .../src/rstudio/scripts/configure_rstudio_node.py  |  8 ++--
 .../src/ssn/scripts/configure_docker.py            |  5 +--
 .../src/ssn/scripts/configure_gitlab.py            | 18 +++------
 .../src/ssn/scripts/configure_ssn_node.py          | 11 +++---
 .../src/ssn/scripts/configure_ui.py                | 21 ++++++-----
 .../src/ssn/scripts/upload_response_file.py        |  7 ++--
 .../superset/scripts/configure_superset_node.py    |  6 +--
 .../scripts/configure_tensor-rstudio_node.py       |  8 ++--
 .../src/tensor/scripts/configure_tensor_node.py    |  8 ++--
 .../zeppelin/scripts/configure_zeppelin_node.py    |  8 ++--
 50 files changed, 171 insertions(+), 209 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org


[incubator-datalab] 02/03: [DATALAB-2091]: replaced fab-classic with fabric

Posted by lf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit b4ea1a402e9c2cbb72d65e29a59d3f73c0506ca0
Author: leonidfrolov <fr...@gmail.com>
AuthorDate: Tue Feb 2 17:05:42 2021 +0200

    [DATALAB-2091]: replaced fab-classic with fabric
---
 infrastructure-provisioning/src/base/scripts/install_prerequisites.py | 2 +-
 infrastructure-provisioning/src/general/files/gcp/base_Dockerfile     | 2 +-
 infrastructure-provisioning/src/general/lib/os/debian/notebook_lib.py | 2 --
 infrastructure-provisioning/src/general/scripts/gcp/ssn_configure.py  | 2 +-
 4 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/infrastructure-provisioning/src/base/scripts/install_prerequisites.py b/infrastructure-provisioning/src/base/scripts/install_prerequisites.py
index 371f6b7..44b8a8c 100644
--- a/infrastructure-provisioning/src/base/scripts/install_prerequisites.py
+++ b/infrastructure-provisioning/src/base/scripts/install_prerequisites.py
@@ -33,7 +33,7 @@ parser = argparse.ArgumentParser()
 parser.add_argument('--hostname', type=str, default='')
 parser.add_argument('--keyfile', type=str, default='')
 parser.add_argument('--pip_packages', type=str,
-                    default='boto3 argparse fab-classic awscli google-api-python-client google-auth-httplib2 google-cloud-storage pycryptodome azure==2.0.0')
+                    default='boto3 argparse fabric awscli google-api-python-client google-auth-httplib2 google-cloud-storage pycryptodome azure==2.0.0')
 parser.add_argument('--additional_config', type=str, default='{"empty":"string"}')
 parser.add_argument('--user', type=str, default='')
 parser.add_argument('--edge_private_ip', type=str, default='')
diff --git a/infrastructure-provisioning/src/general/files/gcp/base_Dockerfile b/infrastructure-provisioning/src/general/files/gcp/base_Dockerfile
index 03b0ce4..5f60620 100644
--- a/infrastructure-provisioning/src/general/files/gcp/base_Dockerfile
+++ b/infrastructure-provisioning/src/general/files/gcp/base_Dockerfile
@@ -42,7 +42,7 @@ ENV LC_ALL en_US.UTF-8
 
 # Install any python dependencies
 RUN python3 -m pip install -UI pip==20.1 && \
-    python3 -m pip install -U six configparser boto3 backoff fab-classic fabvenv argparse ujson jupyter pycryptodome google-api-python-client google-cloud-storage \
+    python3 -m pip install -U six configparser boto3 backoff fabric fabvenv argparse ujson jupyter pycryptodome google-api-python-client google-cloud-storage \
     pyyaml google-auth-httplib2 oauth2client
 
 # Configuring ssh for user
diff --git a/infrastructure-provisioning/src/general/lib/os/debian/notebook_lib.py b/infrastructure-provisioning/src/general/lib/os/debian/notebook_lib.py
index 978ddbe..94cbd78 100644
--- a/infrastructure-provisioning/src/general/lib/os/debian/notebook_lib.py
+++ b/infrastructure-provisioning/src/general/lib/os/debian/notebook_lib.py
@@ -262,8 +262,6 @@ def ensure_python3_libraries(os_user):
             sudo('pip3 install -U pip=={} --no-cache-dir'.format(os.environ['conf_pip_version']))
             sudo('pip3 install boto3 --no-cache-dir')
             sudo('pip3 install fabvenv fabric-virtualenv future --no-cache-dir')
-            sudo('pip3 uninstall -y fabric fab-classic')
-            sudo('pip3 install fab-classic')
             sudo('touch /home/' + os_user + '/.ensure_dir/python3_libraries_ensured')
         except:
             sys.exit(1)
diff --git a/infrastructure-provisioning/src/general/scripts/gcp/ssn_configure.py b/infrastructure-provisioning/src/general/scripts/gcp/ssn_configure.py
index bd7d414..86de1fe 100644
--- a/infrastructure-provisioning/src/general/scripts/gcp/ssn_configure.py
+++ b/infrastructure-provisioning/src/general/scripts/gcp/ssn_configure.py
@@ -161,7 +161,7 @@ if __name__ == "__main__":
         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 fab-classic awscli pymongo pyyaml " \
+                 "'boto3 bcrypt==3.1.7 backoff argparse fabric awscli pymongo pyyaml " \
                  "google-api-python-client google-cloud-storage pycryptodome' --user {} --region {}". \
             format(ssn_conf['instance_hostname'], ssn_conf['ssh_key_path'],
                    ssn_conf['datalab_ssh_user'], ssn_conf['region'])


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org


[incubator-datalab] 01/03: [DATALAB-2091]: remade connection for new fabric

Posted by lf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0b20fa94097afebfbd143123211ecca9a7aa2f14
Author: leonidfrolov <fr...@gmail.com>
AuthorDate: Tue Feb 2 17:04:41 2021 +0200

    [DATALAB-2091]: remade connection for new fabric
---
 .../scripts/deploy_repository/deploy_repository.py |  6 +--
 .../src/base/scripts/create_ssh_user.py            |  7 ++--
 .../src/base/scripts/install_prerequisites.py      |  6 +--
 .../src/base/scripts/install_user_key.py           |  5 +--
 .../src/dataengine/scripts/configure_dataengine.py |  5 +--
 .../scripts/configure_deep_learning_node.py        |  8 ++--
 .../src/edge/scripts/configure_http_proxy.py       |  6 +--
 .../edge/scripts/configure_nginx_reverse_proxy.py  |  7 ++--
 .../src/general/lib/azure/actions_lib.py           | 12 +++---
 .../src/general/lib/os/fab.py                      | 43 +++++++++++++++-------
 .../scripts/aws/common_download_git_certfile.py    |  8 ++--
 .../scripts/aws/common_remove_remote_kernels.py    |  8 ++--
 .../scripts/aws/dataengine-service_configure.py    |  5 +--
 .../scripts/azure/common_download_git_certfile.py  |  8 ++--
 .../scripts/azure/common_remove_remote_kernels.py  |  5 +--
 .../general/scripts/azure/rstudio_change_pass.py   |  5 +--
 .../scripts/gcp/common_download_git_certfile.py    |  8 ++--
 .../scripts/gcp/dataengine-service_configure.py    |  4 +-
 .../src/general/scripts/gcp/ssn_prepare.py         |  4 +-
 .../src/general/scripts/os/check_inactivity.py     |  6 +--
 .../general/scripts/os/common_clean_instance.py    |  6 +--
 .../general/scripts/os/common_configure_proxy.py   |  6 +--
 .../scripts/os/common_configure_reverse_proxy.py   |  6 +--
 .../general/scripts/os/common_configure_spark.py   |  6 +--
 .../scripts/os/configure_proxy_for_docker.py       |  5 +--
 .../general/scripts/os/get_list_available_pkgs.py  |  6 +--
 .../general/scripts/os/install_additional_libs.py  |  8 +---
 .../scripts/os/jupyterlab_container_start.py       |  6 +--
 .../src/general/scripts/os/manage_git_creds.py     |  8 ++--
 .../src/general/scripts/os/reconfigure_spark.py    |  5 +--
 .../src/general/scripts/os/superset_start.py       |  5 +--
 .../scripts/os/update_inactivity_on_start.py       |  8 ++--
 .../src/jupyter/scripts/configure_jupyter_node.py  |  7 +---
 .../scripts/configure_jupyterlab_node.py           |  8 ++--
 .../src/project/scripts/configure_http_proxy.py    |  6 +--
 .../src/project/scripts/configure_nftables.py      |  5 +--
 .../scripts/configure_nginx_reverse_proxy.py       |  5 +--
 .../src/rstudio/scripts/configure_rstudio_node.py  |  8 ++--
 .../src/ssn/scripts/configure_docker.py            |  5 +--
 .../src/ssn/scripts/configure_gitlab.py            | 18 +++------
 .../src/ssn/scripts/configure_ssn_node.py          | 11 +++---
 .../src/ssn/scripts/configure_ui.py                | 21 ++++++-----
 .../src/ssn/scripts/upload_response_file.py        |  7 ++--
 .../superset/scripts/configure_superset_node.py    |  6 +--
 .../scripts/configure_tensor-rstudio_node.py       |  8 ++--
 .../src/tensor/scripts/configure_tensor_node.py    |  8 ++--
 .../zeppelin/scripts/configure_zeppelin_node.py    |  8 ++--
 47 files changed, 168 insertions(+), 204 deletions(-)

diff --git a/infrastructure-provisioning/scripts/deploy_repository/deploy_repository.py b/infrastructure-provisioning/scripts/deploy_repository/deploy_repository.py
index c6f8d5e..e267ced 100644
--- a/infrastructure-provisioning/scripts/deploy_repository/deploy_repository.py
+++ b/infrastructure-provisioning/scripts/deploy_repository/deploy_repository.py
@@ -1690,9 +1690,7 @@ if __name__ == "__main__":
                 sys.exit(1)
 
         print("CONFIGURE CONNECTIONS")
-        env['connection_attempts'] = 100
-        env.key_filename = [args.key_path + args.key_name + '.pem']
-        env.host_string = 'ubuntu@' + ec2_ip_address
+        datalab.fab.init_datalab_connection(ec2_ip_address, 'ubuntu', key_filename)
         print("CONFIGURE LOCAL REPOSITORY")
         try:
             print('CREATING DATALAB USER')
@@ -1784,6 +1782,6 @@ if __name__ == "__main__":
                 remove_route_tables()
                 remove_vpc(args.vpc_id)
             sys.exit(1)
-
+        datalab.fab.close_connection()
     else:
         print('Invalid action: {}'.format(args.action))
diff --git a/infrastructure-provisioning/src/base/scripts/create_ssh_user.py b/infrastructure-provisioning/src/base/scripts/create_ssh_user.py
index fb9dfbb..bede833 100644
--- a/infrastructure-provisioning/src/base/scripts/create_ssh_user.py
+++ b/infrastructure-provisioning/src/base/scripts/create_ssh_user.py
@@ -23,6 +23,7 @@
 
 from fabric.api import *
 from fabric.contrib.files import exists
+from datalab.fab import *
 import argparse
 import sys
 
@@ -51,9 +52,7 @@ def ensure_ssh_user(initial_user, os_user, sudo_group):
 
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = '{}@{}'.format(args.initial_user, args.hostname)
+    datalab.fab.init_datalab_connection(args.hostname, args.initial_user, args.keyfile)
 
     print("Creating ssh user: {}".format(args.os_user))
     try:
@@ -61,4 +60,4 @@ if __name__ == "__main__":
     except Exception as err:
         print('Failed to create ssh user', str(err))
         sys.exit(1)
-
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/base/scripts/install_prerequisites.py b/infrastructure-provisioning/src/base/scripts/install_prerequisites.py
index 88611ee..371f6b7 100644
--- a/infrastructure-provisioning/src/base/scripts/install_prerequisites.py
+++ b/infrastructure-provisioning/src/base/scripts/install_prerequisites.py
@@ -53,9 +53,7 @@ def create_china_pip_conf_file():
 
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = '{}@{}'.format(args.user, args.hostname)
+    datalab.fab.init_datalab_connection(args.hostname, args.user, args.keyfile)
     deeper_config = json.loads(args.additional_config)
 
     if args.region == 'cn-north-1':
@@ -74,4 +72,4 @@ if __name__ == "__main__":
     print("Installing NTPd")
     ensure_ntpd(args.user, args.edge_private_ip)
 
-
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/base/scripts/install_user_key.py b/infrastructure-provisioning/src/base/scripts/install_user_key.py
index baace81..013a5e1 100644
--- a/infrastructure-provisioning/src/base/scripts/install_user_key.py
+++ b/infrastructure-provisioning/src/base/scripts/install_user_key.py
@@ -59,9 +59,7 @@ def copy_key(config):
 if __name__ == "__main__":
     print("Configure connections")
     try:
-        env['connection_attempts'] = 100
-        env.key_filename = [args.keyfile]
-        env.host_string = '{}@{}'.format(args.user, args.hostname)
+        datalab.fab.init_datalab_connection(args.hostname, args.user, args.keyfile)
         deeper_config = json.loads(args.additional_config)
     except:
         print('Fail connection')
@@ -73,6 +71,7 @@ if __name__ == "__main__":
     print("Installing users key...")
     try:
         copy_key(deeper_config)
+        datalab.fab.close_connection()
     except:
         print("Users keyfile {0} could not be found at {1}/{0}".format(args.keyfile, deeper_config['user_keydir']))
         sys.exit(1)
diff --git a/infrastructure-provisioning/src/dataengine/scripts/configure_dataengine.py b/infrastructure-provisioning/src/dataengine/scripts/configure_dataengine.py
index 8b576a7..daaa2a1 100644
--- a/infrastructure-provisioning/src/dataengine/scripts/configure_dataengine.py
+++ b/infrastructure-provisioning/src/dataengine/scripts/configure_dataengine.py
@@ -117,9 +117,7 @@ def start_spark(os_user, master_ip, node):
 
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
 
     # PREPARE DISK
     print("Prepare .ensure directory")
@@ -220,3 +218,4 @@ if __name__ == "__main__":
         sudo('systemctl start livy.service')
         sudo('touch /home/{0}/.ensure_dir/livy_ensured'.format(args.os_user))
 
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/deeplearning/scripts/configure_deep_learning_node.py b/infrastructure-provisioning/src/deeplearning/scripts/configure_deep_learning_node.py
index 142ecc6..ad6ac5a 100644
--- a/infrastructure-provisioning/src/deeplearning/scripts/configure_deep_learning_node.py
+++ b/infrastructure-provisioning/src/deeplearning/scripts/configure_deep_learning_node.py
@@ -93,9 +93,7 @@ def install_itorch(os_user):
 
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
 
     # PREPARE DISK
     print("Prepare .ensure directory")
@@ -172,4 +170,6 @@ if __name__ == "__main__":
 
     #POST INSTALLATION PROCESS
     print("Updating pyOpenSSL library")
-    update_pyopenssl_lib(args.os_user)
\ No newline at end of file
+    update_pyopenssl_lib(args.os_user)
+
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/edge/scripts/configure_http_proxy.py b/infrastructure-provisioning/src/edge/scripts/configure_http_proxy.py
index 3d49a2d..e1d28ab 100644
--- a/infrastructure-provisioning/src/edge/scripts/configure_http_proxy.py
+++ b/infrastructure-provisioning/src/edge/scripts/configure_http_proxy.py
@@ -26,6 +26,7 @@ import json
 import sys
 from datalab.edge_lib import configure_http_proxy_server
 from fabric.api import *
+from datalab.fab import *
 
 parser = argparse.ArgumentParser()
 parser.add_argument('--hostname', type=str, default='')
@@ -40,12 +41,11 @@ args = parser.parse_args()
 if __name__ == "__main__":
     print("Configure connections")
     try:
-        env['connection_attempts'] = 100
-        env.key_filename = [args.keyfile]
-        env.host_string = '{}@{}'.format(args.user, args.hostname)
+        datalab.fab.init_datalab_connection(args.hostname, args.user, args.keyfile)
         deeper_config = json.loads(args.additional_config)
     except:
         sys.exit(2)
 
     print("Installing proxy for notebooks.")
     configure_http_proxy_server(deeper_config)
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/edge/scripts/configure_nginx_reverse_proxy.py b/infrastructure-provisioning/src/edge/scripts/configure_nginx_reverse_proxy.py
index cefaffe..94e65dd 100644
--- a/infrastructure-provisioning/src/edge/scripts/configure_nginx_reverse_proxy.py
+++ b/infrastructure-provisioning/src/edge/scripts/configure_nginx_reverse_proxy.py
@@ -27,6 +27,7 @@ import os
 import sys
 from datalab.edge_lib import install_nginx_ldap
 from fabric.api import *
+from datalab.fab import *
 
 parser = argparse.ArgumentParser()
 parser.add_argument('--hostname', type=str, default='')
@@ -45,9 +46,7 @@ if __name__ == "__main__":
 
     print("Configure connections")
     try:
-        env['connection_attempts'] = 100
-        env.key_filename = [args.keyfile]
-        env.host_string = '{}@{}'.format(args.user, args.hostname)
+        datalab.fab.init_datalab_connection(args.hostname, args.user, args.keyfile)
     except Exception as err:
         print("Failed establish connection. Excpeption: " + str(err))
         sys.exit(1)
@@ -60,4 +59,4 @@ if __name__ == "__main__":
     except Exception as err:
         print("Failed install nginx reverse proxy: " + str(err))
         sys.exit(1)
-
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/general/lib/azure/actions_lib.py b/infrastructure-provisioning/src/general/lib/azure/actions_lib.py
index efea3b4..2c51b51 100644
--- a/infrastructure-provisioning/src/general/lib/azure/actions_lib.py
+++ b/infrastructure-provisioning/src/general/lib/azure/actions_lib.py
@@ -1221,20 +1221,20 @@ def configure_dataengine_spark(cluster_name, jars_dir, cluster_dir, datalake_ena
 
 def remount_azure_disk(creds=False, os_user='', hostname='', keyfile=''):
     if creds:
-        env['connection_attempts'] = 100
-        env.key_filename = [keyfile]
-        env.host_string = os_user + '@' + hostname
+        datalab.fab.init_datalab_connection(hostname, os_user, keyfile)
     sudo('sed -i "/azure_resource-part1/ s|/mnt|/media|g" /etc/fstab')
     sudo('grep "azure_resource-part1" /etc/fstab > /dev/null &&  umount -f /mnt/ || true')
     sudo('mount -a')
+    if creds:
+        datalab.fab.close_connection()
 
 
 def prepare_vm_for_image(creds=False, os_user='', hostname='', keyfile=''):
     if creds:
-        env['connection_attempts'] = 100
-        env.key_filename = [keyfile]
-        env.host_string = os_user + '@' + hostname
+        datalab.fab.init_datalab_connection(hostname, os_user, keyfile)
     sudo('waagent -deprovision -force')
+    if creds:
+        datalab.fab.close_connection()
 
 
 def prepare_disk(os_user):
diff --git a/infrastructure-provisioning/src/general/lib/os/fab.py b/infrastructure-provisioning/src/general/lib/os/fab.py
index ea42c4e..c699b17 100644
--- a/infrastructure-provisioning/src/general/lib/os/fab.py
+++ b/infrastructure-provisioning/src/general/lib/os/fab.py
@@ -182,11 +182,10 @@ def append_result(error, exception=''):
 
 
 def put_resource_status(resource, status, datalab_path, os_user, hostname):
-    env['connection_attempts'] = 100
     keyfile = os.environ['conf_key_dir'] + os.environ['conf_key_name'] + ".pem"
-    env.key_filename = [keyfile]
-    env.host_string = os_user + '@' + hostname
+    init_datalab_connection(hostname, os_user, keyfile)
     sudo('python3 ' + datalab_path + 'tmp/resource_status.py --resource {} --status {}'.format(resource, status))
+    close_connection()
 
 
 def configure_jupyter(os_user, jupyter_conf_file, templates_dir, jupyter_version, exploratory_name):
@@ -673,11 +672,10 @@ def install_inactivity_checker(os_user, ip_address, rstudio=False):
 
 
 def set_git_proxy(os_user, hostname, keyfile, proxy_host):
-    env['connection_attempts'] = 100
-    env.key_filename = [keyfile]
-    env.host_string = os_user + '@' + hostname
+    init_datalab_connection(hostname, os_user, keyfile)
     run('git config --global http.proxy {}'.format(proxy_host))
     run('git config --global https.proxy {}'.format(proxy_host))
+    close_connection()
 
 
 def set_mongo_parameters(client, mongo_parameters):
@@ -725,9 +723,7 @@ def add_breeze_library_local(os_user):
 
 
 def configure_data_engine_service_pip(hostname, os_user, keyfile, emr=False):
-    env['connection_attempts'] = 100
-    env.key_filename = [keyfile]
-    env.host_string = os_user + '@' + hostname
+    init_datalab_connection(hostname, os_user, keyfile)
     manage_pkg('-y install', 'remote', 'python3-pip')
     if not exists('/usr/bin/pip3') and sudo("python3.4 -V 2>/dev/null | awk '{print $2}'"):
         sudo('ln -s /usr/bin/pip-3.4 /usr/bin/pip3')
@@ -745,6 +741,7 @@ def configure_data_engine_service_pip(hostname, os_user, keyfile, emr=False):
     sudo('echo "export PATH=$PATH:/usr/local/bin" >> /etc/profile')
     sudo('source /etc/profile')
     run('source /etc/profile')
+    close_connection()
 
 
 def remove_rstudio_dataengines_kernel(cluster_name, os_user):
@@ -798,12 +795,11 @@ def remove_rstudio_dataengines_kernel(cluster_name, os_user):
 
 def restart_zeppelin(creds=False, os_user='', hostname='', keyfile=''):
     if creds:
-        env['connection_attempts'] = 100
-        env.key_filename = [keyfile]
-        env.host_string = os_user + '@' + hostname
+        init_datalab_connection(hostname, os_user, keyfile)
     sudo("systemctl daemon-reload")
     sudo("systemctl restart zeppelin-notebook")
-
+    if creds:
+        close_connection()
 
 def get_spark_memory(creds=False, os_user='', hostname='', keyfile=''):
     if creds:
@@ -1004,4 +1000,23 @@ def manage_npm_pkg(command):
                     npm_count += 1
                     time.sleep(50)
     except:
-        sys.exit(1)
\ No newline at end of file
+        sys.exit(1)
+
+def close_connection():
+    global conn
+    conn.close()
+
+def init_datalab_connection(ip, user, pkey):
+    global conn
+    attempt = 0
+    while attempt < 100:
+        logging.info('connection attempt {}'.format(attempt))
+        conn = Connection(ip, user, connect_kwargs={'key_filename': pkey})
+        try:
+            conn.run('ls')
+            return conn
+        except Exception as ex:
+            logging.error(ex)
+            traceback.print_exc()
+            attempt += 1
+            time.sleep(10)
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/general/scripts/aws/common_download_git_certfile.py b/infrastructure-provisioning/src/general/scripts/aws/common_download_git_certfile.py
index 70df84a..f68d530 100644
--- a/infrastructure-provisioning/src/general/scripts/aws/common_download_git_certfile.py
+++ b/infrastructure-provisioning/src/general/scripts/aws/common_download_git_certfile.py
@@ -34,11 +34,7 @@ args = parser.parse_args()
 
 if __name__ == "__main__":
     create_aws_config_files()
-    env.hosts = "{}".format(args.notebook_ip)
-    env['connection_attempts'] = 100
-    env.user = args.os_user
-    env.key_filename = "{}".format(args.keyfile)
-    env.host_string = env.user + "@" + env.hosts
+    datalab.fab.init_datalab_connection(args.notebook_ip, args.os_user, args.keyfile)
 
     service_base_name = os.environ['conf_service_base_name'] = replace_multi_symbols(
         os.environ['conf_service_base_name'][:20], '-', True)
@@ -53,3 +49,5 @@ if __name__ == "__main__":
         print('{} has been downloaded'.format(gitlab_certfile))
     else:
         print('There is no {} to download'.format(gitlab_certfile))
+
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/general/scripts/aws/common_remove_remote_kernels.py b/infrastructure-provisioning/src/general/scripts/aws/common_remove_remote_kernels.py
index d8c438d..8fa9800 100644
--- a/infrastructure-provisioning/src/general/scripts/aws/common_remove_remote_kernels.py
+++ b/infrastructure-provisioning/src/general/scripts/aws/common_remove_remote_kernels.py
@@ -24,7 +24,7 @@
 import argparse
 import sys
 from datalab.actions_lib import *
-from datalab.fab import find_cluster_kernels
+from datalab.fab import *
 from fabric.api import *
 
 parser = argparse.ArgumentParser()
@@ -38,9 +38,7 @@ args = parser.parse_args()
 
 if __name__ == "__main__":
     print('Configure connections')
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
 
     try:
         de_clusters, des_clusters = find_cluster_kernels()
@@ -52,5 +50,5 @@ if __name__ == "__main__":
     except Exception as err:
         print('Failed to remove cluster kernels.', str(err))
         sys.exit(1)
-
+    datalab.fab.close_connection()
     sys.exit(0)
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/general/scripts/aws/dataengine-service_configure.py b/infrastructure-provisioning/src/general/scripts/aws/dataengine-service_configure.py
index ef5d0ac..58648ee 100644
--- a/infrastructure-provisioning/src/general/scripts/aws/dataengine-service_configure.py
+++ b/infrastructure-provisioning/src/general/scripts/aws/dataengine-service_configure.py
@@ -81,12 +81,11 @@ def configure_dataengine_service(instance, emr_conf):
         try:
             datalab.fab.configure_data_engine_service_pip(emr_conf['instance_ip'], emr_conf['os_user'],
                                                           emr_conf['key_path'], True)
-            env['connection_attempts'] = 100
-            env.key_filename = emr_conf['key_path']
-            env.host_string = emr_conf['os_user'] + '@' + emr_conf['instance_ip']
+            datalab.fab.init_datalab_connection(emr_conf['instance_ip'], emr_conf['os_user'], emr_conf['key_path'])
             sudo('echo "[main]" > /etc/yum/pluginconf.d/priorities.conf ; echo "enabled = 0" >> '
                  '/etc/yum/pluginconf.d/priorities.conf')
             manage_pkg('-y install', 'remote', 'R-devel')
+            datalab.fab.close_connection()
         except:
             traceback.print_exc()
             raise Exception
diff --git a/infrastructure-provisioning/src/general/scripts/azure/common_download_git_certfile.py b/infrastructure-provisioning/src/general/scripts/azure/common_download_git_certfile.py
index 718fb71..7a2e16d 100644
--- a/infrastructure-provisioning/src/general/scripts/azure/common_download_git_certfile.py
+++ b/infrastructure-provisioning/src/general/scripts/azure/common_download_git_certfile.py
@@ -40,11 +40,7 @@ container_name = ('{}-ssn-bucket'.format(os.environ['conf_service_base_name'])).
 gitlab_certfile = os.environ['conf_gitlab_certfile']
 
 if __name__ == "__main__":
-    env.hosts = "{}".format(args.notebook_ip)
-    env['connection_attempts'] = 100
-    env.user = args.os_user
-    env.key_filename = "{}".format(args.keyfile)
-    env.host_string = env.user + "@" + env.hosts
+    datalab.fab.init_datalab_connection(args.notebook_ip, args.os_user, args.keyfile)
 
     for storage_account in AzureMeta().list_storage_accounts(resource_group_name):
         if ssn_storage_account_tag == storage_account.tags["Name"]:
@@ -55,3 +51,5 @@ if __name__ == "__main__":
         print('{} has been downloaded'.format(gitlab_certfile))
     else:
         print('There is no {} to download'.format(gitlab_certfile))
+
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/general/scripts/azure/common_remove_remote_kernels.py b/infrastructure-provisioning/src/general/scripts/azure/common_remove_remote_kernels.py
index a6e4696..69cd276 100644
--- a/infrastructure-provisioning/src/general/scripts/azure/common_remove_remote_kernels.py
+++ b/infrastructure-provisioning/src/general/scripts/azure/common_remove_remote_kernels.py
@@ -38,9 +38,7 @@ args = parser.parse_args()
 
 if __name__ == "__main__":
     print('Configure connections')
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
 
     try:
         de_clusters, des_clusters = find_cluster_kernels()
@@ -50,3 +48,4 @@ if __name__ == "__main__":
     except Exception as err:
         print('Failed to remove cluster kernels.', str(err))
         sys.exit(1)
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/general/scripts/azure/rstudio_change_pass.py b/infrastructure-provisioning/src/general/scripts/azure/rstudio_change_pass.py
index 2e57e90..e217ab3 100644
--- a/infrastructure-provisioning/src/general/scripts/azure/rstudio_change_pass.py
+++ b/infrastructure-provisioning/src/general/scripts/azure/rstudio_change_pass.py
@@ -35,13 +35,12 @@ args = parser.parse_args()
 
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = '{}@{}'.format(args.os_user, args.hostname)
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
 
     print("Setting password for Rstudio user.")
     try:
         sudo('echo "{0}:{1}" | chpasswd'.format(args.os_user, args.rstudio_pass))
+        datalab.fab.close_connection()
     except Exception as err:
         print('Error: {0}'.format(err))
         sys.exit(1)
diff --git a/infrastructure-provisioning/src/general/scripts/gcp/common_download_git_certfile.py b/infrastructure-provisioning/src/general/scripts/gcp/common_download_git_certfile.py
index 256a65f..c8714cc 100644
--- a/infrastructure-provisioning/src/general/scripts/gcp/common_download_git_certfile.py
+++ b/infrastructure-provisioning/src/general/scripts/gcp/common_download_git_certfile.py
@@ -33,11 +33,7 @@ parser.add_argument('--os_user', type=str, default='')
 args = parser.parse_args()
 
 if __name__ == "__main__":
-    env.hosts = "{}".format(args.notebook_ip)
-    env['connection_attempts'] = 100
-    env.user = args.os_user
-    env.key_filename = "{}".format(args.keyfile)
-    env.host_string = env.user + "@" + env.hosts
+    datalab.fab.init_datalab_connection(args.notebook_ip, args.os_user, args.keyfile)
 
     bucket_name = ('{0}-{1}-{2}-bucket'.format(os.environ['conf_service_base_name'], os.environ['project_name'],
                                                os.environ['endpoint_name'])).lower().replace('_', '-')
@@ -48,3 +44,5 @@ if __name__ == "__main__":
         print('{} has been downloaded'.format(gitlab_certfile))
     else:
         print('There is no {} to download'.format(gitlab_certfile))
+
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/general/scripts/gcp/dataengine-service_configure.py b/infrastructure-provisioning/src/general/scripts/gcp/dataengine-service_configure.py
index 7008175..a3b60c6 100644
--- a/infrastructure-provisioning/src/general/scripts/gcp/dataengine-service_configure.py
+++ b/infrastructure-provisioning/src/general/scripts/gcp/dataengine-service_configure.py
@@ -58,9 +58,7 @@ def configure_dataengine_service(instance, dataproc_conf):
         logging.info('[CONFIGURE DATAENGINE SERVICE]')
         print('[CONFIGURE DATAENGINE SERVICE]')
         try:
-            env['connection_attempts'] = 100
-            env.key_filename = "{}".format(dataproc_conf['key_path'])
-            env.host_string = dataproc_conf['datalab_ssh_user'] + '@' + dataproc_conf['instance_ip']
+            datalab.fab.init_datalab_connection(dataproc_conf['instance_ip'], dataproc_conf['datalab_ssh_user'], dataproc_conf['key_path'])
             datalab.notebook_lib.install_os_pkg([['python3-pip', 'N/A']])
             datalab.fab.configure_data_engine_service_pip(dataproc_conf['instance_ip'],
                                                           dataproc_conf['datalab_ssh_user'],
diff --git a/infrastructure-provisioning/src/general/scripts/gcp/ssn_prepare.py b/infrastructure-provisioning/src/general/scripts/gcp/ssn_prepare.py
index e95372f..7158b8e 100644
--- a/infrastructure-provisioning/src/general/scripts/gcp/ssn_prepare.py
+++ b/infrastructure-provisioning/src/general/scripts/gcp/ssn_prepare.py
@@ -77,11 +77,11 @@ if __name__ == "__main__":
                                        os.environ['conf_billing_tag_key']: os.environ['conf_billing_tag_value']}
         ssn_conf['allowed_ip_cidr'] = os.environ['conf_allowed_ip_cidr']
     except Exception as err:
-        datalab.fab.datalab.fab.append_result("Failed to generate variables dictionary.", str(err))
+        datalab.fab.append_result("Failed to generate variables dictionary.", str(err))
         sys.exit(1)
 
     if GCPMeta.get_instance(ssn_conf['instance_name']):
-        datalab.fab.datalab.fab.append_result("Service base name should be unique and less or equal 20 symbols. "
+        datalab.fab.append_result("Service base name should be unique and less or equal 20 symbols. "
                                               "Please try again.")
         sys.exit(1)
 
diff --git a/infrastructure-provisioning/src/general/scripts/os/check_inactivity.py b/infrastructure-provisioning/src/general/scripts/os/check_inactivity.py
index 8f079c9..8eeb200 100644
--- a/infrastructure-provisioning/src/general/scripts/os/check_inactivity.py
+++ b/infrastructure-provisioning/src/general/scripts/os/check_inactivity.py
@@ -38,9 +38,7 @@ args = parser.parse_args()
 
 
 if __name__ == "__main__":
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = '{}@{}'.format(args.os_user, args.instance_ip)
+    datalab.fab.init_datalab_connection(args.instance_ip, args.os_user, args.keyfile)
 
     inactivity_dir = '/opt/inactivity/'
     if args.resource_type == 'dataengine':
@@ -57,3 +55,5 @@ if __name__ == "__main__":
 
     with open('/root/result.json', 'w') as outfile:
         json.dump(timestamp, outfile)
+
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/general/scripts/os/common_clean_instance.py b/infrastructure-provisioning/src/general/scripts/os/common_clean_instance.py
index 6053071..bc751fa 100644
--- a/infrastructure-provisioning/src/general/scripts/os/common_clean_instance.py
+++ b/infrastructure-provisioning/src/general/scripts/os/common_clean_instance.py
@@ -117,9 +117,7 @@ def clean_tensor_rstudio():
 
 if __name__ == "__main__":
     print('Configure connections')
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
 
     if os.environ['conf_cloud_provider'] == 'azure':
         de_master_name = '{}-{}-{}-de-{}-m'.format(
@@ -155,5 +153,5 @@ if __name__ == "__main__":
                 clean_tensor_rstudio()
     else:
         print('Found default ami, do not make clean')
-
+    datalab.fab.close_connection()
     sys.exit(0)
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/general/scripts/os/common_configure_proxy.py b/infrastructure-provisioning/src/general/scripts/os/common_configure_proxy.py
index da04351..b899322 100644
--- a/infrastructure-provisioning/src/general/scripts/os/common_configure_proxy.py
+++ b/infrastructure-provisioning/src/general/scripts/os/common_configure_proxy.py
@@ -40,12 +40,10 @@ args = parser.parse_args()
 ##############
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
     deeper_config = json.loads(args.additional_config)
 
     print("Enabling proxy for notebook server for repositories access.")
     enable_proxy(deeper_config['proxy_host'], deeper_config['proxy_port'])
 
-
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/general/scripts/os/common_configure_reverse_proxy.py b/infrastructure-provisioning/src/general/scripts/os/common_configure_reverse_proxy.py
index e7c644e..b6b5710 100644
--- a/infrastructure-provisioning/src/general/scripts/os/common_configure_reverse_proxy.py
+++ b/infrastructure-provisioning/src/general/scripts/os/common_configure_reverse_proxy.py
@@ -103,11 +103,9 @@ if __name__ == "__main__":
         sys.exit(1)
 
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.edge_hostname
+    datalab.fab.init_datalab_connection(args.edge_hostname, args.os_user, args.keyfile)
     put('/tmp/{}.conf'.format(conf_file_name), '/usr/local/openresty/nginx/conf/locations', use_sudo=True)
     sudo('service openresty reload')
 
-
+    datalab.fab.close_connection()
 
diff --git a/infrastructure-provisioning/src/general/scripts/os/common_configure_spark.py b/infrastructure-provisioning/src/general/scripts/os/common_configure_spark.py
index b48aa57..4574e63 100644
--- a/infrastructure-provisioning/src/general/scripts/os/common_configure_spark.py
+++ b/infrastructure-provisioning/src/general/scripts/os/common_configure_spark.py
@@ -82,9 +82,7 @@ def add_custom_spark_properties(cluster_name):
 
 if __name__ == "__main__":
     print('Configure connections')
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
 
     if (args.spark_conf != ''):
         update_spark_defaults_conf(args.spark_conf)
@@ -93,3 +91,5 @@ if __name__ == "__main__":
 
     if 'spark_configurations' in os.environ:
         add_custom_spark_properties(args.cluster_name)
+
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/general/scripts/os/configure_proxy_for_docker.py b/infrastructure-provisioning/src/general/scripts/os/configure_proxy_for_docker.py
index 68c9a18..3f67db0 100644
--- a/infrastructure-provisioning/src/general/scripts/os/configure_proxy_for_docker.py
+++ b/infrastructure-provisioning/src/general/scripts/os/configure_proxy_for_docker.py
@@ -36,9 +36,7 @@ https_file = '/etc/systemd/system/docker.service.d/https-proxy.conf'
 
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
     print("Configuring proxy for docker")
     try:
         sudo('mkdir -p /etc/systemd/system/docker.service.d')
@@ -57,3 +55,4 @@ if __name__ == "__main__":
     except Exception as err:
         print('Error: {0}'.format(err))
         sys.exit(1)
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/general/scripts/os/get_list_available_pkgs.py b/infrastructure-provisioning/src/general/scripts/os/get_list_available_pkgs.py
index 67ca9c9..028a1c6 100644
--- a/infrastructure-provisioning/src/general/scripts/os/get_list_available_pkgs.py
+++ b/infrastructure-provisioning/src/general/scripts/os/get_list_available_pkgs.py
@@ -74,9 +74,7 @@ def get_uncategorised_pip_pkgs(all_pkgs_pip2, all_pkgs_pip3):
 
 
 if __name__ == "__main__":
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = '{}@{}'.format(args.os_user, args.instance_ip)
+    datalab.fab.init_datalab_connection(args.instance_ip, args.os_user, args.keyfile)
     all_pkgs = dict()
     if args.group == 'os_pkg':
         all_pkgs['os_pkg'] = get_available_os_pkgs()
@@ -100,3 +98,5 @@ if __name__ == "__main__":
 
     with open("/root/all_pkgs.json", 'w') as result:
         result.write(json.dumps(all_pkgs))
+
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/general/scripts/os/install_additional_libs.py b/infrastructure-provisioning/src/general/scripts/os/install_additional_libs.py
index 0cbbd11..14887b4 100644
--- a/infrastructure-provisioning/src/general/scripts/os/install_additional_libs.py
+++ b/infrastructure-provisioning/src/general/scripts/os/install_additional_libs.py
@@ -38,11 +38,7 @@ args = parser.parse_args()
 
 
 if __name__ == "__main__":
-    env.hosts = "{}".format(args.instance_ip)
-    env['connection_attempts'] = 100
-    env.user = args.os_user
-    env.key_filename = "{}".format(args.keyfile)
-    env.host_string = env.user + "@" + env.hosts
+    datalab.fab.init_datalab_connection(args.instance_ip, args.os_user, args.keyfile)
 
     print('Installing libraries: {}'.format(args.libs))
     general_status = list()
@@ -117,7 +113,7 @@ if __name__ == "__main__":
             general_status = general_status + status
         except KeyError:
             pass
-
+    datalab.fab.close_connection()
     with open("/root/result.json", 'w') as result:
         res = {"Action": "Install additional libs",
                "Libs": general_status}
diff --git a/infrastructure-provisioning/src/general/scripts/os/jupyterlab_container_start.py b/infrastructure-provisioning/src/general/scripts/os/jupyterlab_container_start.py
index 17db0ba..0a63f88 100644
--- a/infrastructure-provisioning/src/general/scripts/os/jupyterlab_container_start.py
+++ b/infrastructure-provisioning/src/general/scripts/os/jupyterlab_container_start.py
@@ -50,13 +50,11 @@ def start_jupyterlab_container(jupyterlab_dir):
 
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
     print("Starting Jupyter container")
     try:
         start_jupyterlab_container(jupyterlab_dir)
     except Exception as err:
         print('Error: {0}'.format(err))
         sys.exit(1)
-
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/general/scripts/os/manage_git_creds.py b/infrastructure-provisioning/src/general/scripts/os/manage_git_creds.py
index f0a73c0..a810588 100644
--- a/infrastructure-provisioning/src/general/scripts/os/manage_git_creds.py
+++ b/infrastructure-provisioning/src/general/scripts/os/manage_git_creds.py
@@ -37,11 +37,7 @@ parser.add_argument('--os_user', type=str, default='')
 args = parser.parse_args()
 
 if __name__ == "__main__":
-    env.hosts = "{}".format(args.notebook_ip)
-    env['connection_attempts'] = 100
-    env.user = args.os_user
-    env.key_filename = "{}".format(args.keyfile)
-    env.host_string = env.user + "@" + env.hosts
+    datalab.fab.init_datalab_connection(args.notebook_ip, args.os_user, args.keyfile)
 
     gitlab_certfile = os.environ['conf_gitlab_certfile']
     if exists('/home/{0}/{1}'.format(args.os_user, gitlab_certfile)):
@@ -89,3 +85,5 @@ if __name__ == "__main__":
         print('Error: {0}'.format(err))
         append_result("Failed to add host/login/(password/token) to config.", str(err))
         sys.exit(1)
+
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/general/scripts/os/reconfigure_spark.py b/infrastructure-provisioning/src/general/scripts/os/reconfigure_spark.py
index 2df08f0..c99da47 100644
--- a/infrastructure-provisioning/src/general/scripts/os/reconfigure_spark.py
+++ b/infrastructure-provisioning/src/general/scripts/os/reconfigure_spark.py
@@ -39,9 +39,7 @@ args = parser.parse_args()
 
 
 if __name__ == "__main__":
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = '{}@{}'.format(args.os_user, args.instance_ip)
+    datalab.fab.init_datalab_connection(args.instance_ip, args.os_user, args.keyfile)
 
     jars_dir = '/opt/jars/'
     templates_dir = '/root/templates/'
@@ -70,3 +68,4 @@ if __name__ == "__main__":
         sudo('/usr/bin/python3 /usr/local/bin/notebook_reconfigure_dataengine_spark.py --cluster_name {0} '
              '--jars_dir {1} --cluster_dir {2} --datalake_enabled {3} --spark_configurations "{4}"'.format(
               args.cluster_name, jars_dir, cluster_dir, datalake_enabled, os.environ['spark_configurations']))
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/general/scripts/os/superset_start.py b/infrastructure-provisioning/src/general/scripts/os/superset_start.py
index 5207dbb..c3f344b 100644
--- a/infrastructure-provisioning/src/general/scripts/os/superset_start.py
+++ b/infrastructure-provisioning/src/general/scripts/os/superset_start.py
@@ -49,9 +49,7 @@ def start_superset(superset_dir):
 
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
     print("Starting Superset")
     try:
         start_superset(superset_dir)
@@ -59,3 +57,4 @@ if __name__ == "__main__":
         print('Error: {0}'.format(err))
         sys.exit(1)
 
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/general/scripts/os/update_inactivity_on_start.py b/infrastructure-provisioning/src/general/scripts/os/update_inactivity_on_start.py
index 445c71e..0609a5d 100644
--- a/infrastructure-provisioning/src/general/scripts/os/update_inactivity_on_start.py
+++ b/infrastructure-provisioning/src/general/scripts/os/update_inactivity_on_start.py
@@ -36,11 +36,7 @@ args = parser.parse_args()
 
 
 if __name__ == "__main__":
-    env.hosts = "{}".format(args.notebook_ip)
-    env['connection_attempts'] = 100
-    env.user = args.os_user
-    env.key_filename = "{}".format(args.keyfile)
-    env.host_string = env.user + "@" + env.hosts
+    datalab.fab.init_datalab_connection(args.notebook_ip, args.os_user, args.keyfile)
 
     if args.cluster_ip == "none":
         kernel = 'local'
@@ -48,3 +44,5 @@ if __name__ == "__main__":
         kernel = args.cluster_ip.replace('.', '-')
 
     sudo("date +%s > /opt/inactivity/{}_inactivity".format(kernel))
+
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/jupyter/scripts/configure_jupyter_node.py b/infrastructure-provisioning/src/jupyter/scripts/configure_jupyter_node.py
index c7fcfe7..280dbf8 100644
--- a/infrastructure-provisioning/src/jupyter/scripts/configure_jupyter_node.py
+++ b/infrastructure-provisioning/src/jupyter/scripts/configure_jupyter_node.py
@@ -72,9 +72,7 @@ gitlab_certfile = os.environ['conf_gitlab_certfile']
 ##############
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
 
     # PREPARE DISK
     print("Prepare .ensure directory")
@@ -147,5 +145,4 @@ if __name__ == "__main__":
     print("Updating pyOpenSSL library")
     update_pyopenssl_lib(args.os_user)
 
-
-
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/jupyterlab/scripts/configure_jupyterlab_node.py b/infrastructure-provisioning/src/jupyterlab/scripts/configure_jupyterlab_node.py
index 0634fe2..5eab9ab 100644
--- a/infrastructure-provisioning/src/jupyterlab/scripts/configure_jupyterlab_node.py
+++ b/infrastructure-provisioning/src/jupyterlab/scripts/configure_jupyterlab_node.py
@@ -80,9 +80,7 @@ gitlab_certfile = os.environ['conf_gitlab_certfile']
 ##############
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
 
     # PREPARE DISK
     print("Prepare .ensure directory")
@@ -112,4 +110,6 @@ if __name__ == "__main__":
 
     # INSTALL INACTIVITY CHECKER
     print("Install inactivity checker")
-    install_inactivity_checker(args.os_user, args.ip_address)
\ No newline at end of file
+    install_inactivity_checker(args.os_user, args.ip_address)
+
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/project/scripts/configure_http_proxy.py b/infrastructure-provisioning/src/project/scripts/configure_http_proxy.py
index 3d49a2d..aa119aa 100644
--- a/infrastructure-provisioning/src/project/scripts/configure_http_proxy.py
+++ b/infrastructure-provisioning/src/project/scripts/configure_http_proxy.py
@@ -40,12 +40,12 @@ args = parser.parse_args()
 if __name__ == "__main__":
     print("Configure connections")
     try:
-        env['connection_attempts'] = 100
-        env.key_filename = [args.keyfile]
-        env.host_string = '{}@{}'.format(args.user, args.hostname)
+        datalab.fab.init_datalab_connection(args.hostname, args.user, args.keyfile)
         deeper_config = json.loads(args.additional_config)
     except:
         sys.exit(2)
 
     print("Installing proxy for notebooks.")
     configure_http_proxy_server(deeper_config)
+
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/project/scripts/configure_nftables.py b/infrastructure-provisioning/src/project/scripts/configure_nftables.py
index 872d3bd..0d53ea6 100644
--- a/infrastructure-provisioning/src/project/scripts/configure_nftables.py
+++ b/infrastructure-provisioning/src/project/scripts/configure_nftables.py
@@ -40,12 +40,11 @@ args = parser.parse_args()
 if __name__ == "__main__":
     print("Configure connections")
     try:
-        env['connection_attempts'] = 100
-        env.key_filename = [args.keyfile]
-        env.host_string = '{}@{}'.format(args.user, args.hostname)
+        datalab.fab.init_datalab_connection(args.hostname, args.user, args.keyfile)
         deeper_config = json.loads(args.additional_config)
     except:
         sys.exit(2)
 
     print("Configuring nftables on edge node.")
     configure_nftables(deeper_config)
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/project/scripts/configure_nginx_reverse_proxy.py b/infrastructure-provisioning/src/project/scripts/configure_nginx_reverse_proxy.py
index 322c642..218c899 100644
--- a/infrastructure-provisioning/src/project/scripts/configure_nginx_reverse_proxy.py
+++ b/infrastructure-provisioning/src/project/scripts/configure_nginx_reverse_proxy.py
@@ -49,9 +49,7 @@ if __name__ == "__main__":
 
     print("Configure connections")
     try:
-        env['connection_attempts'] = 100
-        env.key_filename = [args.keyfile]
-        env.host_string = '{}@{}'.format(args.user, args.hostname)
+        datalab.fab.init_datalab_connection(args.hostname, args.user, args.keyfile)
     except Exception as err:
         print("Failed establish connection. Excpeption: " + str(err))
         sys.exit(1)
@@ -71,3 +69,4 @@ if __name__ == "__main__":
         print("Failed install nginx reverse proxy: " + str(err))
         sys.exit(1)
 
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/rstudio/scripts/configure_rstudio_node.py b/infrastructure-provisioning/src/rstudio/scripts/configure_rstudio_node.py
index a383ff3..42e99a7 100644
--- a/infrastructure-provisioning/src/rstudio/scripts/configure_rstudio_node.py
+++ b/infrastructure-provisioning/src/rstudio/scripts/configure_rstudio_node.py
@@ -66,9 +66,7 @@ gitlab_certfile = os.environ['conf_gitlab_certfile']
 ##############
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
 
     # PREPARE DISK
     print("Prepare .ensure directory")
@@ -114,4 +112,6 @@ if __name__ == "__main__":
 
     #POST INSTALLATION PROCESS
     print("Updating pyOpenSSL library")
-    update_pyopenssl_lib(args.os_user)
\ No newline at end of file
+    update_pyopenssl_lib(args.os_user)
+
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/ssn/scripts/configure_docker.py b/infrastructure-provisioning/src/ssn/scripts/configure_docker.py
index d8d9794..667f727 100644
--- a/infrastructure-provisioning/src/ssn/scripts/configure_docker.py
+++ b/infrastructure-provisioning/src/ssn/scripts/configure_docker.py
@@ -189,9 +189,7 @@ def configure_guacamole():
 if __name__ == "__main__":
     print("Configure connections")
     try:
-        env['connection_attempts'] = 100
-        env.key_filename = [args.keyfile]
-        env.host_string = args.os_user + '@' + args.hostname
+        datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
         deeper_config = json.loads(args.additional_config)
     except:
         sys.exit(2)
@@ -223,4 +221,5 @@ if __name__ == "__main__":
     if not configure_guacamole():
         sys.exit(1)
 
+    datalab.fab.close_connection()
     sys.exit(0)
diff --git a/infrastructure-provisioning/src/ssn/scripts/configure_gitlab.py b/infrastructure-provisioning/src/ssn/scripts/configure_gitlab.py
index 1423734..2310c8a 100644
--- a/infrastructure-provisioning/src/ssn/scripts/configure_gitlab.py
+++ b/infrastructure-provisioning/src/ssn/scripts/configure_gitlab.py
@@ -26,6 +26,7 @@ import json
 import os
 import sys
 from fabric.api import *
+from datalab.fab import *
 
 parser = argparse.ArgumentParser()
 parser.add_argument('--keyfile', type=str, default='')
@@ -44,11 +45,7 @@ def create_user(os_user):
         initial_user = 'ec2-user'
         sudo_group = 'wheel'
 
-    env.hosts = '{}'.format(args.instance_ip)
-    env['connection_attempts'] = 100
-    env.key_filename = args.keyfile
-    env.user = initial_user
-    env.host_string = env.user + "@" + env.hosts
+    datalab.fab.init_datalab_connection(args.instance_ip, initial_user, args.keyfile)
 
     try:
         sudo('useradd -m -G {1} -s /bin/bash {0}'.format(os_user, sudo_group))
@@ -63,7 +60,7 @@ def create_user(os_user):
     except Exception as err:
         print('Failed to install gitlab.{}'.format(str(err)))
         sys.exit(1)
-
+    datalab.fab.close_connection()
 
 def prepare_config():
     try:
@@ -187,14 +184,11 @@ def summary():
 if __name__ == "__main__":
     create_user(os.environ['conf_os_user'])
 
-    env.hosts = '{}'.format(args.instance_ip)
-    env['connection_attempts'] = 100
-    env.key_filename = args.keyfile
-    env.user = os.environ['conf_os_user']
-    env.host_string = env.user + "@" + env.hosts
+    datalab.fab.init_datalab_connection(args.instance_ip, os.environ['conf_os_user'], args.keyfile)
 
     prepare_config()
     install_gitlab()
     configure_gitlab()
 
-    summary()
\ No newline at end of file
+    summary()
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/ssn/scripts/configure_ssn_node.py b/infrastructure-provisioning/src/ssn/scripts/configure_ssn_node.py
index f60632b..9e4bbc2 100644
--- a/infrastructure-provisioning/src/ssn/scripts/configure_ssn_node.py
+++ b/infrastructure-provisioning/src/ssn/scripts/configure_ssn_node.py
@@ -213,9 +213,8 @@ def docker_build_script():
 if __name__ == "__main__":
     print("Configure connections")
     try:
-        env['connection_attempts'] = 100
-        env.key_filename = [args.keyfile]
-        env.host_string = args.os_user + '@' + args.hostname
+        datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
+        host_string = args.os_user + '@' + args.hostname
         deeper_config = json.loads(args.additional_config)
     except:
         sys.exit(2)
@@ -268,7 +267,7 @@ if __name__ == "__main__":
     #configure_jenkins(args.datalab_path, args.os_user, deeper_config, args.tag_resource_id)
 
     print("Copying key")
-    cp_key(args.keyfile, env.host_string, args.os_user)
+    cp_key(args.keyfile, host_string, args.os_user)
 
     print("Copying backup scripts")
     cp_backup_scripts(args.datalab_path)
@@ -280,4 +279,6 @@ if __name__ == "__main__":
     ensure_ciphers()
 
     print("Configuring docker_build script")
-    docker_build_script()
\ No newline at end of file
+    docker_build_script()
+
+    datalab.fab.close_connection()
\ No newline at end of file
diff --git a/infrastructure-provisioning/src/ssn/scripts/configure_ui.py b/infrastructure-provisioning/src/ssn/scripts/configure_ui.py
index 081b1e3..6693f5a 100644
--- a/infrastructure-provisioning/src/ssn/scripts/configure_ui.py
+++ b/infrastructure-provisioning/src/ssn/scripts/configure_ui.py
@@ -92,7 +92,7 @@ def copy_ssn_libraries():
     try:
         sudo('mkdir -p /usr/lib/python3.8/datalab/')
         run('mkdir -p /tmp/datalab_libs/')
-        local('scp -i {} /usr/lib/python3.8/datalab/*.py {}:/tmp/datalab_libs/'.format(args.keyfile, env.host_string))
+        local('scp -i {} /usr/lib/python3.8/datalab/*.py {}:/tmp/datalab_libs/'.format(args.keyfile, host_string))
         run('chmod a+x /tmp/datalab_libs/*')
         sudo('mv /tmp/datalab_libs/* /usr/lib/python3.8/datalab/')
         if exists('/usr/lib64'):
@@ -112,23 +112,23 @@ def configure_mongo(mongo_passwd, default_endpoint_name):
             elif os.environ['conf_os_family'] == 'redhat':
                 local('sed -i "s/MONGO_USR/mongod/g" /root/templates/mongod.service_template')
             local('scp -i {} /root/templates/mongod.service_template {}:/tmp/mongod.service'.format(args.keyfile,
-                                                                                                    env.host_string))
+                                                                                                    host_string))
             sudo('mv /tmp/mongod.service /lib/systemd/system/mongod.service')
             sudo('systemctl daemon-reload')
             sudo('systemctl enable mongod.service')
         local('sed -i "s|PASSWORD|{}|g" /root/scripts/resource_status.py'.format(mongo_passwd))
         local('scp -i {} /root/scripts/resource_status.py {}:/tmp/resource_status.py'.format(args.keyfile,
-                                                                                             env.host_string))
+                                                                                             host_string))
         sudo('mv /tmp/resource_status.py ' + os.environ['ssn_datalab_path'] + 'tmp/')
         local('sed -i "s|PASSWORD|{}|g" /root/scripts/configure_mongo.py'.format(mongo_passwd))
         local('scp -i {} /root/scripts/configure_mongo.py {}:/tmp/configure_mongo.py'.format(args.keyfile,
-                                                                                             env.host_string))
+                                                                                             host_string))
         sudo('mv /tmp/configure_mongo.py ' + args.datalab_path + 'tmp/')
         local('scp -i {} /root/files/{}/mongo_roles.json {}:/tmp/mongo_roles.json'.format(args.keyfile,
                                                                                           args.cloud_provider,
-                                                                                          env.host_string))
+                                                                                          host_string))
         local('scp -i {} /root/files/local_endpoint.json {}:/tmp/local_endpoint.json'.format(args.keyfile,
-                                                                                             env.host_string))
+                                                                                             host_string))
         sudo('mv /tmp/mongo_roles.json ' + args.datalab_path + 'tmp/')
         sudo('sed -i "s|DEF_ENDPOINT_NAME|{0}|g" /tmp/local_endpoint.json'.format(default_endpoint_name))
         sudo('sed -i "s|CLOUD_PROVIDER|{0}|g" /tmp/local_endpoint.json'.format(
@@ -203,9 +203,8 @@ def build_ui():
 if __name__ == "__main__":
     print("Configure connections")
     try:
-        env['connection_attempts'] = 100
-        env.key_filename = [args.keyfile]
-        env.host_string = args.os_user + '@' + args.hostname
+        datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
+        host_string = args.os_user + '@' + args.hostname
         deeper_config = json.loads(args.additional_config)
     except:
         sys.exit(2)
@@ -232,7 +231,7 @@ if __name__ == "__main__":
     build_ui()
 
     print("Starting Self-Service(UI)")
-    start_ss(args.keyfile, env.host_string, datalab_conf_dir, web_path,
+    start_ss(args.keyfile, host_string, datalab_conf_dir, web_path,
              args.os_user, mongo_passwd, keystore_passwd, args.cloud_provider,
              args.service_base_name, args.tag_resource_id, args.billing_tag, args.account_id,
              args.billing_bucket, args.aws_job_enabled, args.datalab_path, args.billing_enabled, args.cloud_params,
@@ -242,3 +241,5 @@ if __name__ == "__main__":
              args.datalab_id, args.usage_date, args.product, args.usage_type,
              args.usage, args.cost, args.resource_id, args.tags, args.billing_dataset_name, args.keycloak_client_id,
              args.keycloak_client_secret, args.keycloak_auth_server_url)
+
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/ssn/scripts/upload_response_file.py b/infrastructure-provisioning/src/ssn/scripts/upload_response_file.py
index 4ad6cdd..cc884a5 100644
--- a/infrastructure-provisioning/src/ssn/scripts/upload_response_file.py
+++ b/infrastructure-provisioning/src/ssn/scripts/upload_response_file.py
@@ -25,6 +25,7 @@ import argparse
 import logging
 import sys
 from datalab.ssn_lib import *
+from datalab.fab import *
 
 parser = argparse.ArgumentParser()
 parser.add_argument('--instance_name', type=str, default='')
@@ -36,15 +37,15 @@ args = parser.parse_args()
 
 def upload_response_file(instance_name, local_log_filepath, os_user):
     print('Connect to SSN instance with hostname: {0} and name: {1}'.format(args.instance_hostname, instance_name))
-    env['connection_attempts'] = 100
-    env.key_filename = "{}{}.pem".format(os.environ['conf_key_dir'], os.environ['conf_key_name'])
-    env.host_string = '{}@{}'.format(os_user, args.instance_hostname)
+    pkey = "{}{}.pem".format(os.environ['conf_key_dir'], os.environ['conf_key_name'])
+    datalab.fab.init_datalab_connection(args.instance_hostname, os_user, pkey)
     try:
         put('/root/result.json', '/home/{}/{}.json'.format(os_user, os.environ['request_id']))
         sudo('mv /home/{}/{}.json {}tmp/result/'.format(os_user, os.environ['request_id'],
                                                         os.environ['ssn_datalab_path']))
         put(local_log_filepath, '/home/{}/ssn.log'.format(os_user))
         sudo('mv /home/{}/ssn.log /var/opt/datalab/log/ssn/'.format(os_user))
+        datalab.fab.close_connection()
         return True
     except:
         print('Failed to upload response file')
diff --git a/infrastructure-provisioning/src/superset/scripts/configure_superset_node.py b/infrastructure-provisioning/src/superset/scripts/configure_superset_node.py
index a764ff6..c30fcd9 100644
--- a/infrastructure-provisioning/src/superset/scripts/configure_superset_node.py
+++ b/infrastructure-provisioning/src/superset/scripts/configure_superset_node.py
@@ -51,9 +51,7 @@ gitlab_certfile = os.environ['conf_gitlab_certfile']
 ##############
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
 
     # PREPARE DISK
     print("Prepare .ensure directory")
@@ -88,6 +86,6 @@ if __name__ == "__main__":
                            args.keycloak_client_id, args.keycloak_client_secret, args.edge_instance_private_ip, args.edge_instance_public_ip, args.superset_name)
     except:
         sys.exit(1)
-
+    datalab.fab.close_connection()
 
 
diff --git a/infrastructure-provisioning/src/tensor-rstudio/scripts/configure_tensor-rstudio_node.py b/infrastructure-provisioning/src/tensor-rstudio/scripts/configure_tensor-rstudio_node.py
index 6b3a16a..9185753 100644
--- a/infrastructure-provisioning/src/tensor-rstudio/scripts/configure_tensor-rstudio_node.py
+++ b/infrastructure-provisioning/src/tensor-rstudio/scripts/configure_tensor-rstudio_node.py
@@ -74,9 +74,7 @@ r_libs = ['R6', 'pbdZMQ', 'RCurl', 'reshape2', 'caTools={}'.format(os.environ['n
 ##############
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
 
     # PREPARE DISK
     print("Prepare .ensure directory")
@@ -132,4 +130,6 @@ if __name__ == "__main__":
 
     # POST INSTALLATION PROCESS
     print("Updating pyOpenSSL library")
-    update_pyopenssl_lib(args.os_user)
\ No newline at end of file
+    update_pyopenssl_lib(args.os_user)
+
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/tensor/scripts/configure_tensor_node.py b/infrastructure-provisioning/src/tensor/scripts/configure_tensor_node.py
index 83701e3..2881caa 100644
--- a/infrastructure-provisioning/src/tensor/scripts/configure_tensor_node.py
+++ b/infrastructure-provisioning/src/tensor/scripts/configure_tensor_node.py
@@ -73,9 +73,7 @@ cudnn_file_name = os.environ['notebook_cudnn_file_name']
 ##############
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
 
     # PREPARE DISK
     print("Prepare .ensure directory")
@@ -141,4 +139,6 @@ if __name__ == "__main__":
     
     #POST INSTALLATION PROCESS
     print("Updating pyOpenSSL library")
-    update_pyopenssl_lib(args.os_user)
\ No newline at end of file
+    update_pyopenssl_lib(args.os_user)
+
+    datalab.fab.close_connection()
diff --git a/infrastructure-provisioning/src/zeppelin/scripts/configure_zeppelin_node.py b/infrastructure-provisioning/src/zeppelin/scripts/configure_zeppelin_node.py
index 50fc0b9..9a24290 100644
--- a/infrastructure-provisioning/src/zeppelin/scripts/configure_zeppelin_node.py
+++ b/infrastructure-provisioning/src/zeppelin/scripts/configure_zeppelin_node.py
@@ -199,9 +199,7 @@ def install_local_livy(args):
 ##############
 if __name__ == "__main__":
     print("Configure connections")
-    env['connection_attempts'] = 100
-    env.key_filename = [args.keyfile]
-    env.host_string = args.os_user + '@' + args.hostname
+    datalab.fab.init_datalab_connection(args.hostname, args.os_user, args.keyfile)
     deeper_config = json.loads(args.additional_config)
 
     # PREPARE DISK
@@ -274,4 +272,6 @@ if __name__ == "__main__":
     
     #POST INSTALLATION PROCESS
     print("Updating pyOpenSSL library")
-    update_pyopenssl_lib(args.os_user)
\ No newline at end of file
+    update_pyopenssl_lib(args.os_user)
+
+    datalab.fab.close_connection()


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org


[incubator-datalab] 03/03: Merge branch 'DATALAB-2091' of https://github.com/apache/incubator-dlab into DATALAB-2091

Posted by lf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d72db0a7a47caadeb8d6a107b55da8bd5f9e3ae9
Merge: b4ea1a4 bd802e5
Author: leonidfrolov <fr...@gmail.com>
AuthorDate: Tue Feb 2 17:05:59 2021 +0200

    Merge branch 'DATALAB-2091' of https://github.com/apache/incubator-dlab into DATALAB-2091

 .../java/com/epam/datalab/dto/UserInstanceDTO.java |  21 ++++
 .../dto/imagemetadata/ExploratoryMetadataDTO.java  |   3 +
 .../datalab/model/exploratory/Exploratory.java     |   4 +
 .../backendapi/resources/ExploratoryResource.java  |   4 +-
 .../resources/dto/ExploratoryCreateFormDTO.java    | 115 ++-------------------
 .../service/impl/ExploratoryServiceImpl.java       |   6 +-
 .../webapp/src/app/core/util/helpUtils.ts          |  20 ++++
 ...mputational-resource-create-dialog.component.ts |  25 +----
 .../create-environment.component.html              |  81 +++++++++++++--
 .../create-environment.component.scss              |   5 +
 .../create-environment.component.ts                |  83 +++++++++++++--
 .../detail-dialog/detail-dialog.component.html     |   5 +-
 .../detail-dialog/detail-dialog.component.ts       |   1 -
 .../resources-grid/resources-grid.component.html   |  28 ++++-
 .../resources-grid/resources-grid.component.scss   |   7 ++
 .../resources-grid/resources-grid.model.ts         |   6 +-
 16 files changed, 255 insertions(+), 159 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org