@@ -24,24 +24,9 @@ def get_terraform_bucket(self) -> str:
2424 print ("Failed to find terraform bucket" )
2525 sys .exit (1 )
2626
27- def remove_folder_objects (self , bucket_name :str , folder_prefix : str ):
28- #TODO - Make sure we remove version history too
29- print (f"Deleting all objects under: { folder_prefix } " )
30- pages = self .objects_paginator .paginate (Bucket = bucket_name , Prefix = folder_prefix )
31-
32- objects_to_delete = []
33- for page in pages :
34- for obj in page .get ('Contents' , []):
35- objects_to_delete .append ({'Key' : obj ['Key' ]})
36-
37- if objects_to_delete :
38- #TODO - Check values before deleting
39- print (objects_to_delete )
40- # self.s3_client.delete_objects(Bucket=bucket_name, Delete={'Objects': objects_to_delete})
41-
42- def remove_folder_object_versions (self , bucket_name :str , folder_prefix : str ):
27+ def remove_object_versions (self , tf_bucket : str , folder_prefix : str ) -> None :
4328 print (f"Deleting all object versions under: { folder_prefix } " )
44- pages = self .object_versions_paginator .paginate (Bucket = bucket_name , Prefix = folder_prefix )
29+ pages = self .object_versions_paginator .paginate (Bucket = tf_bucket , Prefix = folder_prefix )
4530
4631 objects_to_delete = []
4732 for page in pages :
@@ -54,49 +39,19 @@ def remove_folder_object_versions(self, bucket_name:str, folder_prefix: str):
5439 )
5540
5641 if objects_to_delete :
57- # DELETE ALL OBJECT VERSIONS
5842 for i in range (0 , len (objects_to_delete ), 1000 ):
5943 chunk = objects_to_delete [i :i + 1000 ]
60- response = self .s3_client .delete_objects (
61- Bucket = bucket_name ,
44+ self .s3_client .delete_objects (
45+ Bucket = tf_bucket ,
6246 Delete = {'Objects' : chunk }
6347 )
64- print (f"Deleted { len (chunk )} versions/delete markers" )
65-
6648 print ("All object versions deleted." )
6749
68- def empty_folder_check (self , bucket_name :str , folder_prefix : str ):
69- try :
70- self .s3_client .head_object (Bucket = bucket_name , Key = folder_prefix )
71- self .s3_client .delete_object (Bucket = bucket_name , Key = folder_prefix )
72- print (f"Deleted empty folder for: { folder_prefix } " )
73- except ClientError as e :
74- if e .response ['Error' ]['Code' ] != "404" :
75- print (f"No empty folder found to remove for: { folder_prefix } " )
76-
77- def delete_record_in_dynamo (self , tf_bucket : str , file_key : str ):
78- #TODO - query dynamo for matching tf state path based on your sandbox workspace
79- # Print out values first before deleting to confirm it is correct
80-
50+ def delete_record_in_dynamo (self , tf_bucket : str , file_key : str ) -> None :
51+ print (f"Deleting sandbox tfstate DynamoDB record" )
8152 table_name = "ndr-terraform-locks"
8253 lock_id = f'{ tf_bucket } /{ file_key } -md5'
83- print (f"LockID: { lock_id } " )
84-
85- # Query TODO: Remove below query when delete_item() works
86- # response = self.dynamo_client.get_item(
87- # TableName=table_name,
88- # Key={
89- # 'LockID': {'S': lock_id}
90- # }
91- # )
92- #
93- # item = response.get('Item')
94- # if item:
95- # print("Item found:", item)
96- # else:
97- # print("Item not found.")
9854
99- # Delete
10055 self .dynamo_client .delete_item (
10156 TableName = table_name ,
10257 Key = {'LockID' : {'S' : lock_id }},
@@ -116,13 +71,9 @@ def main(self, sandbox: str):
11671 print (f"Key: { key } " )
11772 parent_folder = key [len (self .env_folder ):].split ("/" , 1 )[0 ]
11873 if parent_folder == sandbox :
119- print (f"parent_folder: { parent_folder } " )
12074 folder_prefix = f"{ self .env_folder } { parent_folder } /"
121- print (f"folder_prefix: { folder_prefix } " )
122- self .remove_folder_object_versions (bucket_name = tf_bucket , folder_prefix = folder_prefix )
75+ self .remove_object_versions (tf_bucket = tf_bucket , folder_prefix = folder_prefix )
12376 self .delete_record_in_dynamo (tf_bucket , key )
124- # self.remove_folder_objects(bucket_name=tf_bucket, folder_prefix=folder_prefix) # TODO: Check if deleting the object also deletes the folder. If not, proceed to delete folder
125- #self.empty_folder_check(bucket_name=tf_bucket, folder_prefix=folder_prefix)
12677
12778if __name__ == '__main__' :
12879 sandbox = sys .argv [1 ]
0 commit comments