class AWSTerminator: def __init__(self, webhook_url, regions, message, tag_key, tag_value, lifetime_tag_key, behavior_type): self.logger = logging.getLogger() self.logger.setLevel(logging.INFO) self.regions = regions self.behavior_type = behavior_type self.slack_service = slack.Slack.get_instance(webhook_url, message, tag_key, tag_value, lifetime_tag_key) self.ec2_service = EC2Service(tag_key, tag_value, lifetime_tag_key, behavior_type, self.logger) self.rds_service = RDSService(tag_key, tag_value, lifetime_tag_key, behavior_type, self.logger) self.ecs_service = ECSService(tag_key, tag_value, lifetime_tag_key, behavior_type, self.logger) def process(self): self.logger.info('Processing AWSTerminator...') for region in self.regions: self.logger.info('Processing AWSTerminator for %s...', region) self.slack_service.intro_text(region) # Boto3 setup by region self.ec2_service.set_boto3(region) self.rds_service.set_boto3(region) self.ecs_service.set_boto3(region) # Loop on services resources self.ec2_service.resources_loop(region) self.rds_service.resources_loop(region) self.ecs_service.resources_loop(region) # Process behavior self.slack_service.outro_text() self.behavior() self.slack_service.clean_blocks() self.logger.info('Process Done for %s.\n', region) def behavior(self): self.logger.info('Processing behavior %s...', self.behavior_type) if self.behavior_type == 'notify': self.slack_service.request() elif self.behavior_type == 'stop': self.ec2_service.stop_untagged_resources() self.rds_service.stop_untagged_resources() self.ecs_service.stop_untagged_resources() self.slack_service.request() elif self.behavior_type == 'terminate': self.ec2_service.terminate_untagged_resources() self.rds_service.terminate_untagged_resources() self.ecs_service.terminate_untagged_resources() self.slack_service.request() else: self.logger.info('%s behavior does not exist.', self.behavior_type)