88from google .cloud import storage
99import os
1010import json
11+ import sys
1112
1213from constants import GCP_MODELS , GOOGLE_APPLICATION_CREDENTIALS
1314from data_model import GcpTfBackend
@@ -62,7 +63,7 @@ def get_inventory(self, context):
6263 try :
6364 gcp_service = self ._can_conntect_to_gcp (context , logger )
6465 if not gcp_service :
65- self . _raise_and_log ( logger , "There was an issue accessing GCP, please check authentication credentials." )
66+ logger . exception ( "There was an issue accessing GCP, please check authentication credentials." )
6667 except Exception as e :
6768 self ._raise_and_log (logger , f"There was an issue initialization GCP provider resource. { e } " )
6869 return AutoLoadDetails ([], [])
@@ -74,7 +75,7 @@ def _validate_bucket_exists(self, bucket_name: str, context, logger):
7475 storage_client = storage .Client ()
7576 get_bucket = storage_client .get_bucket (bucket_name )
7677 if len (str (get_bucket )) < 0 :
77- self . _raise_and_log ( logger , f"Bucket { bucket_name } not found" )
78+ logger . exception ( f"Bucket { bucket_name } not found" )
7879 except Exception as e :
7980 self ._raise_and_log (logger , f"There was an issue accessing the bucket { bucket_name } .{ e } " )
8081
@@ -118,9 +119,9 @@ def delete_tfstate_file(self, context, tf_state_unique_name: str):
118119 """Delete object under folder"""
119120 blobs = list (bucket .list_blobs (prefix = tf_state_unique_name ))
120121 if len (blobs ) == 0 :
121- self . _raise_and_log ( logger , f"Folder { tf_state_unique_name } not exists." )
122+ logger . exception ( f"Folder { tf_state_unique_name } not exists." )
122123 elif len (blobs ) > 1 :
123- self . _raise_and_log ( logger , f"There are more than 1 Folder { tf_state_unique_name } currenlty { len (blobs )} folders exist." )
124+ logger . exception ( f"There are more than 1 Folder { tf_state_unique_name } currenlty { len (blobs )} folders exist." )
124125 else :
125126 bucket .delete_blobs (blobs )
126127 logger .info (f"Folder { tf_state_unique_name } deleted." )
@@ -145,14 +146,14 @@ def _create_gcp_session(self, context, project_id: str, logger):
145146 # json_path defines on GCP TF BACKEND RESOURCE
146147 if json_path :
147148 if gcp_backend_resource .cloud_provider :
148- self . _raise_and_log ( logger , "Only one method of authentication should be filled" )
149+ logger . exception ( "Only one method of authentication should be filled" )
149150 os .environ [GOOGLE_APPLICATION_CREDENTIALS ] = json_path
150151 os .environ ["GOOGLE_PROJECT" ] = project_id
151152 # Keys not defines on GCP TF BACKEND RESOURCE (CLP reference should have been set)
152153 else :
153154 # CLP had not been set...
154155 if not gcp_backend_resource .cloud_provider :
155- self . _raise_and_log ( logger , "At least one method of authentication should be filled" )
156+ logger . exception ( "At least one method of authentication should be filled" )
156157
157158 # Check a correct CLP has been reference
158159 clp_details = api .GetResourceDetails
@@ -177,10 +178,16 @@ def _get_and_validate_clp(self, clp_details, gcp_backend_resource: str, logger)
177178 clpr_res_fam = clp_details_resource .ResourceFamilyName
178179 if (clpr_res_fam != 'Cloud Provider' and clpr_res_fam != 'CS_CloudProvider' ) or \
179180 clp_res_model not in GCP_MODELS :
180- self . _raise_and_log ( logger , f"Cloud Provider does not have the expected type:{ clpr_res_fam } " )
181+ logger . exception ( f"Cloud Provider does not have the expected type:{ clpr_res_fam } " )
181182 clp_name = clp_details (clp_details_resource .Name )
182183 return clp_name
183184
184- def _raise_and_log (self , logger , msg ):
185+ def _raise_and_log (self , logger , msg , error_type = None ):
185186 logger .exception (msg )
187+ if error_type :
188+ raise error_type (msg )
189+
190+ (err_type , value , traceback ) = sys .exc_info ()
191+ if err_type :
192+ raise # re-raising original exception
186193 raise RuntimeError (msg )
0 commit comments