Skip to content

Commit 840a35f

Browse files
committed
update configuration
1 parent a99eb85 commit 840a35f

5 files changed

Lines changed: 39 additions & 21 deletions

File tree

deploy.bat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ shellfoundry install
1111
cd ..\..
1212
cd backends\aws_tf_backend
1313
shellfoundry install
14-
cd ..\..\..
14+
cd ..\..
1515
cd backends\gcp_tf_backend
1616
shellfoundry install
1717
cd ..\..\..

package/cloudshell/iac/terraform/constants.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@
4242
AZURE2G_MODEL = "Microsoft Azure Cloud Provider 2G"
4343
AWS2G_MODEL = "Amazon AWS Cloud Provider 2G"
4444

45-
CLP_PROVIDER_MODELS = [AWS1G_MODEL, AWS2G_MODEL, AZURE1G_MODEL, AZURE2G_MODEL]
45+
GCP1G_MODEL = "Google Cloud Provider"
46+
# GCP2G_MODEL = "Google Cloud Provider 2G"
47+
48+
CLP_PROVIDER_MODELS = [AWS1G_MODEL, AWS2G_MODEL, AZURE1G_MODEL, AZURE2G_MODEL, GCP1G_MODEL]
4649

4750
# Misc
4851
DIRTY_CHARS = r'''

package/cloudshell/iac/terraform/services/clp_envvar_handler.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,16 @@ def __init__(self, clp_res_model, clp_resource_attributes, shell_helper):
7575
self._shell_helper = shell_helper
7676

7777
def set_env_vars_based_on_clp(self):
78+
project_flag = False
79+
cred_flag = False
7880
for attr in self._clp_resource_attributes:
79-
if self.does_attribute_match(self._clp_res_model, attr, self._shell_helper, "CREDENTIALS JSON PATH"):
81+
if self.does_attribute_match(self._clp_res_model, attr, "Google Cloud Provider.Credentials Json Path"):
8082
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = attr.Value
81-
if self.does_attribute_match(self._clp_res_model, attr, self._shell_helper, "PROJECT"):
83+
self._shell_helper.sandbox_messages.write_message(f"GOOGLE_APPLICATION_CREDENTIALS: {attr.Value}")
84+
cred_flag = True
85+
if self.does_attribute_match(self._clp_res_model, attr, "Google Cloud Provider.project"):
8286
os.environ["GOOGLE_PROJECT"] = attr.Value
87+
self._shell_helper.sandbox_messages.write_message(f"GOOGLE_PROJECT: {attr.Value}")
8388
project_flag = True
84-
if not project_flag:
85-
raise ValueError("Project ID was not found on GCP Cloud Provider")
89+
if not cred_flag and not project_flag:
90+
self._shell_helper.sandbox_messages.write_message("Project ID was not found on GCP Cloud Provider")

package/cloudshell/iac/terraform/services/provider_handler.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
from cloudshell.api.cloudshell_api import ResourceInfo
44

55
from cloudshell.iac.terraform.constants import AZURE2G_MODEL, ATTRIBUTE_NAMES, AWS2G_MODEL, CLP_PROVIDER_MODELS, \
6-
AWS1G_MODEL, AZURE1G_MODEL
6+
AWS1G_MODEL, AZURE1G_MODEL, GCP1G_MODEL
77
from cloudshell.iac.terraform.models.shell_helper import ShellHelperObject
88
from cloudshell.iac.terraform.services.clp_envvar_handler import AWSCloudProviderEnvVarHandler, \
9-
AzureCloudProviderEnvVarHandler
9+
AzureCloudProviderEnvVarHandler, GCPCloudProviderEnvVarHandler
1010

1111

1212
class ProviderHandler(object):
@@ -53,6 +53,9 @@ def _set_cloud_env_vars(
5353
elif clp_res_model in [AZURE1G_MODEL, AZURE2G_MODEL]:
5454
clp_handler = AzureCloudProviderEnvVarHandler(clp_res_model, clp_resource_attributes, shell_helper)
5555

56+
elif clp_res_model in [GCP1G_MODEL]:
57+
clp_handler = GCPCloudProviderEnvVarHandler(clp_res_model, clp_resource_attributes, shell_helper)
58+
5659
if clp_handler:
5760
clp_handler.set_env_vars_based_on_clp()
5861
else:

shells/backends/gcp_tf_backend/src/driver.py

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def get_inventory(self, context):
6565
self._raise_and_log(logger, "There was an issue accessing GCP, please check authentication credentials.")
6666
# raise ValueError("Can't connect to GCP")
6767
except Exception as e:
68-
raise ValueError(f"There was an issue initialization GCP provider resource. {e}")
68+
logger.exception(f"There was an issue initialization GCP provider resource. {e}")
6969
return AutoLoadDetails([], [])
7070

7171
# </editor-fold>
@@ -77,7 +77,7 @@ def _validate_bucket_exists(self, bucket_name: str, context, logger):
7777
if len(str(get_bucket)) < 0:
7878
raise ValueError(f"Bucket {bucket_name} not found")
7979
except Exception as e:
80-
self._raise_and_log(logger, f"There was an issue accessing the bucket {bucket_name}.{e}")
80+
logger.exception(f"There was an issue accessing the bucket {bucket_name}.{e}")
8181

8282
def _can_conntect_to_gcp(self, context, logger) -> bool:
8383
gcp_backend_resource = GcpTfBackend.create_from_context(context)
@@ -92,15 +92,16 @@ def get_backend_data(self, context, tf_state_unique_name: str) -> str:
9292

9393
with LoggingSessionContext(context) as logger:
9494
gcp_backend_resource = GcpTfBackend.create_from_context(context)
95-
tf_state_file_string = self._generate_state_file_string(gcp_backend_resource, tf_state_unique_name)
96-
backend_data = {"tf_state_file_string": tf_state_file_string}
9795
project_id = gcp_backend_resource.project
9896
try:
9997
gcp_service = self._create_gcp_session(context, project_id, logger)
10098
self._backend_secret_vars = {"credentials": gcp_service}
99+
os.environ[GOOGLE_APPLICATION_CREDENTIALS] = gcp_service
100+
os.environ["GOOGLE_PROJECT"] = project_id
101101
except Exception as e:
102-
self._raise_and_log(logger, "Inputs for Cloud Backend Access missing or incorrect")
103-
102+
logger.exception("Inputs for Cloud Backend Access missing or incorrect")
103+
tf_state_file_string = self._generate_state_file_string(gcp_backend_resource, tf_state_unique_name)
104+
backend_data = {"tf_state_file_string": tf_state_file_string}
104105
logger.info(f"Returning backend data for creating provider file :\n{backend_data}")
105106
response = json.dumps({"backend_data": backend_data, "backend_secret_vars": self._backend_secret_vars})
106107
return response
@@ -117,10 +118,15 @@ def delete_tfstate_file(self, context, tf_state_unique_name: str):
117118
bucket = storage_client.get_bucket(bucket_name)
118119
"""Delete object under folder"""
119120
blobs = list(bucket.list_blobs(prefix=tf_state_unique_name))
120-
bucket.delete_blobs(blobs)
121-
logger.info(f"Folder {tf_state_unique_name} deleted.")
121+
if len(blobs) == 0 :
122+
logger.exception(f"Folder {tf_state_unique_name} not exists.")
123+
elif len(blobs) > 1 :
124+
logger.exception(f"There are more than 1 Folder {tf_state_unique_name} currenlty {len(blobs)} folders exist.")
125+
else :
126+
bucket.delete_blobs(blobs)
127+
logger.info(f"Folder {tf_state_unique_name} deleted.")
122128
except Exception as e:
123-
raise ValueError(f"{tf_state_unique_name} file was not removed from backend provider")
129+
logger.exception(f"{tf_state_unique_name} file was not removed from backend provider")
124130

125131
def _generate_state_file_string(self, gcp_backend_resource: GcpTfBackend, tf_state_unique_name: str):
126132
tf_state_file_string = f'terraform {{\n\
@@ -133,21 +139,22 @@ def _generate_state_file_string(self, gcp_backend_resource: GcpTfBackend, tf_sta
133139

134140
def _create_gcp_session(self, context, project_id: str, logger):
135141
if not project_id:
136-
self._raise_and_log(logger, "Project id must be filled")
142+
logger.exception("Project id must be filled")
137143
api = CloudShellSessionContext(context).get_api()
138144
gcp_backend_resource = GcpTfBackend.create_from_context(context)
139145
json_path = gcp_backend_resource.credentials_json_path
140146
# json_path defines on GCP TF BACKEND RESOURCE
141147
if json_path:
142148
if gcp_backend_resource.cloud_provider:
143-
self._raise_and_log(logger, "Only one method of authentication should be filled")
149+
logger.exception("Only one method of authentication should be filled")
144150
os.environ[GOOGLE_APPLICATION_CREDENTIALS] = json_path
145151
os.environ["GOOGLE_PROJECT"] = project_id
146152
# Keys not defines on GCP TF BACKEND RESOURCE (CLP reference should have been set)
147153
else:
148154
# CLP had not been set...
149155
if not gcp_backend_resource.cloud_provider:
150-
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")
157+
151158
# Check a correct CLP has been reference
152159
clp_details = api.GetResourceDetails
153160
clp_resource_details = self._get_and_validate_clp(clp_details, gcp_backend_resource, logger)
@@ -178,4 +185,4 @@ def _get_and_validate_clp(self, clp_details, gcp_backend_resource: str, logger)
178185

179186
def _raise_and_log(self, logger, msg):
180187
logger.exception(msg)
181-
raise ValueError(msg)
188+
raise RuntimeError(msg)

0 commit comments

Comments
 (0)