@@ -182,6 +182,7 @@ class AwsS3Bucket(AwsResource, BaseBucket):
182182 bucket_acl : Optional [AwsS3BucketAcl ] = field (default = None )
183183 bucket_logging : Optional [AwsS3Logging ] = field (default = None )
184184 bucket_location : Optional [str ] = field (default = None )
185+ bucket_lifecycle_policy : Optional [Json ] = field (default = None , metadata = {"description" : "The bucket lifecycle policy." }) # fmt: skip
185186
186187 @classmethod
187188 def called_collect_apis (cls ) -> List [AwsApiSpec ]:
@@ -231,6 +232,19 @@ def add_bucket_policy(bck: AwsS3Bucket) -> None:
231232 ):
232233 bck .bucket_policy = sort_json (json_loads (raw_policy ), sort_list = True ) # type: ignore
233234
235+ def fetch_lifecycle_policy (bck : AwsS3Bucket ) -> None :
236+ with builder .suppress (f"{ service_name } .get-bucket-lifecycle-configuration" ):
237+ for policy in builder .client .list (
238+ service_name ,
239+ "get-bucket-lifecycle-configuration" ,
240+ "Rules" ,
241+ Bucket = bck .name ,
242+ expected_errors = ["NoSuchLifecycleConfiguration" ],
243+ ):
244+ if not bck .bucket_lifecycle_policy :
245+ bck .bucket_lifecycle_policy = {}
246+ bck .bucket_lifecycle_policy [policy ["ID" ]] = policy
247+
234248 def add_bucket_versioning (bck : AwsS3Bucket ) -> None :
235249 with builder .suppress (f"{ service_name } .get-bucket-versioning" ):
236250 if raw_versioning := builder .client .get (
@@ -310,6 +324,7 @@ def add_bucket_location(bck: AwsS3Bucket) -> None:
310324 builder .submit_work (service_name , add_public_access , bucket )
311325 builder .submit_work (service_name , add_acls , bucket )
312326 builder .submit_work (service_name , add_bucket_logging , bucket )
327+ builder .submit_work (service_name , fetch_lifecycle_policy , bucket )
313328
314329 def _set_tags (self , client : AwsClient , tags : Dict [str , str ]) -> bool :
315330 tag_set = [{"Key" : k , "Value" : v } for k , v in tags .items ()]
0 commit comments