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 2022/09/06 15:20:09 UTC

[incubator-datalab] 02/02: [DATALAB-1408]: added cluster status checks

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

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

commit 0f583e86bf9201d503f0654a4cb2374c0f331d94
Author: leonidfrolov <fr...@gmail.com>
AuthorDate: Tue Sep 6 18:19:56 2022 +0300

    [DATALAB-1408]: added cluster status checks
---
 .../src/general/lib/azure/actions_lib.py           | 16 ++++++++--
 .../src/general/lib/azure/meta_lib.py              | 36 ++++++++++++++++++++++
 2 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/infrastructure-provisioning/src/general/lib/azure/actions_lib.py b/infrastructure-provisioning/src/general/lib/azure/actions_lib.py
index 0c38da8e5..4ea7037dc 100644
--- a/infrastructure-provisioning/src/general/lib/azure/actions_lib.py
+++ b/infrastructure-provisioning/src/general/lib/azure/actions_lib.py
@@ -1175,7 +1175,13 @@ class AzureActions:
     def create_hdinsight_cluster(self, resource_group_name, cluster_name, cluster_parameters):
         try:
             print('Starting to create HDInsight Spark cluster {}'.format(cluster_name))
-            return self.hdinsight_client.clusters.begin_create(resource_group_name, cluster_name, cluster_parameters)
+            result = self.hdinsight_client.clusters.begin_create(resource_group_name, cluster_name, cluster_parameters)
+            cluster = datalab.meta_lib.AzureMeta().get_hdinsight_cluster(resource_group_name, cluster_name)
+            while cluster.properties.cluster_state != 'Running':
+                time.sleep(15)
+                print('The cluster is being provisioned... Please wait')
+                cluster = datalab.meta_lib.AzureMeta().get_hdinsight_cluster(resource_group_name, cluster_name)
+            return result
         except Exception as err:
             logging.info(
                 "Unable to create HDInsight Spark cluster: " + str(err) + "\n Traceback: " + traceback.print_exc(file=sys.stdout))
@@ -1188,7 +1194,13 @@ class AzureActions:
     def terminate_hdinsight_cluster(self, resource_group_name, cluster_name):
         try:
             print('Starting to terminate HDInsight Spark cluster {}'.format(cluster_name))
-            return self.hdinsight_client.clusters.begin_delete(resource_group_name, cluster_name)
+            result = self.hdinsight_client.clusters.begin_delete(resource_group_name, cluster_name)
+            cluster_status = datalab.meta_lib.AzureMeta().get_hdinsight_cluster(resource_group_name, cluster_name)
+            while cluster_status:
+                time.sleep(15)
+                print('The cluster is being terminated... Please wait')
+                cluster_status = datalab.meta_lib.AzureMeta().get_hdinsight_cluster(resource_group_name, cluster_name)
+            return result
         except Exception as err:
             logging.info(
                 "Unable to terminate HDInsight Spark cluster: " + str(err) + "\n Traceback: " + traceback.print_exc(file=sys.stdout))
diff --git a/infrastructure-provisioning/src/general/lib/azure/meta_lib.py b/infrastructure-provisioning/src/general/lib/azure/meta_lib.py
index e795c7789..3c557a664 100644
--- a/infrastructure-provisioning/src/general/lib/azure/meta_lib.py
+++ b/infrastructure-provisioning/src/general/lib/azure/meta_lib.py
@@ -29,6 +29,7 @@ from azure.mgmt.datalake.store import DataLakeStoreAccountManagementClient
 from azure.datalake.store import core, lib
 from azure.identity import ClientSecretCredential
 from azure.core.exceptions import ResourceNotFoundError
+from azure.mgmt.hdinsight import HDInsightManagementClient
 import logging
 import traceback
 import sys
@@ -78,6 +79,11 @@ class AzureMeta:
             json_dict["subscriptionId"],
             base_url=json_dict["resourceManagerEndpointUrl"]
         )
+        self.hdinsight_client = HDInsightManagementClient(
+            credential,
+            json_dict["subscriptionId"],
+            base_url=json_dict["resourceManagerEndpointUrl"]
+        )
         self.sp_creds = json.loads(open(os.environ['AZURE_AUTH_LOCATION']).read())
         self.dl_filesystem_creds = lib.auth(tenant_id=json.dumps(self.sp_creds['tenantId']).replace('"', ''),
                                             client_secret=json.dumps(self.sp_creds['clientSecret']).replace('"', ''),
@@ -637,6 +643,36 @@ class AzureMeta:
                                    file=sys.stdout)}))
             traceback.print_exc(file=sys.stdout)
 
+    def get_hdinsight_cluster(self, resource_group_name, cluster_name):
+        try:
+            result = self.hdinsight_client.clusters.get(resource_group_name, cluster_name)
+            return result
+        except ResourceNotFoundError as err:
+            if err.status_code == 404:
+                return ''
+        except Exception as err:
+            logging.info(
+                "Unable to get hdinsight cluster: " + str(err) + "\n Traceback: " + traceback.print_exc(file=sys.stdout))
+            append_result(str({"error": "Unable to get hdinsight cluster",
+                               "error_message": str(err) + "\n Traceback: " + traceback.print_exc(
+                                   file=sys.stdout)}))
+            traceback.print_exc(file=sys.stdout)
+
+    def list_hdinsight_clusters(self, resource_group_name):
+        try:
+            result = self.hdinsight_client.clusters.list_by_resource_group(resource_group_name)
+            return result
+        except ResourceNotFoundError as err:
+            if err.status_code == 404:
+                return ''
+        except Exception as err:
+            logging.info(
+                "Unable to list hdinsight clusters: " + str(err) + "\n Traceback: " + traceback.print_exc(file=sys.stdout))
+            append_result(str({"error": "Unable to list hdinsight clusters",
+                               "error_message": str(err) + "\n Traceback: " + traceback.print_exc(
+                                   file=sys.stdout)}))
+            traceback.print_exc(file=sys.stdout)
+
 
 def get_instance_private_ip_address(tag_name, instance_name):
     try:


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