def get_to_addrs_slack_messages_map(self, sqs_message): resource_list = [] for resource in sqs_message['resources']: resource_list.append(resource) slack_messages = {} # Check for Slack targets in 'to' action and render appropriate template. for target in sqs_message.get('action', ()).get('to'): if target == 'slack://owners': to_addrs_to_resources_map = \ self.email_handler.get_email_to_addrs_to_resources_map(sqs_message) for to_addrs, resources in six.iteritems( to_addrs_to_resources_map): resolved_addrs = self.retrieve_user_im(list(to_addrs)) if not resolved_addrs: continue for address, slack_target in resolved_addrs.iteritems(): slack_messages[address] = get_rendered_jinja( slack_target, sqs_message, resources, self.logger, 'slack_template', 'slack_default') self.logger.debug( "Generating messages for recipient list produced by resource owner resolution." ) elif target.startswith('slack://webhook/#') and self.config.get( 'slack_webhook'): webhook_target = self.config.get('slack_webhook') slack_messages[webhook_target] = get_rendered_jinja( target.split('slack://webhook/#', 1)[1], sqs_message, resource_list, self.logger, 'slack_template', 'slack_default') self.logger.debug("Generating message for webhook %s." % self.config.get('slack_webhook')) elif target.startswith( 'slack://') and self.email_handler.target_is_email( target.split('slack://', 1)[1]): resolved_addrs = self.retrieve_user_im( [target.split('slack://', 1)[1]]) for address, slack_target in resolved_addrs.iteritems(): slack_messages[address] = get_rendered_jinja( slack_target, sqs_message, resource_list, self.logger, 'slack_template', 'slack_default') elif target.startswith('slack://#'): resolved_addrs = target.split('slack://#', 1)[1] slack_messages[resolved_addrs] = get_rendered_jinja( resolved_addrs, sqs_message, resource_list, self.logger, 'slack_template', 'slack_default') self.logger.debug( "Generating message for specified Slack channel.") return slack_messages
def get_to_addrs_slack_messages_map(self, sqs_message): resource_list = [] for resource in sqs_message['resources']: resource_list.append(resource) slack_messages = {} # Check for Slack targets in 'to' action and render appropriate template. for target in sqs_message.get('action', ()).get('to'): if target == 'slack://owners': to_addrs_to_resources_map = \ self.email_handler.get_email_to_addrs_to_resources_map(sqs_message) for to_addrs, resources in six.iteritems(to_addrs_to_resources_map): resolved_addrs = self.retrieve_user_im(list(to_addrs)) if not resolved_addrs: continue for address, slack_target in resolved_addrs.items(): slack_messages[address] = get_rendered_jinja( slack_target, sqs_message, resources, self.logger, 'slack_template', 'slack_default') self.logger.debug( "Generating messages for recipient list produced by resource owner resolution.") elif target.startswith('https://hooks.slack.com/'): slack_messages[target] = get_rendered_jinja( target, sqs_message, resource_list, self.logger, 'slack_template', 'slack_default') elif target.startswith('slack://webhook/#') and self.config.get('slack_webhook'): webhook_target = self.config.get('slack_webhook') slack_messages[webhook_target] = get_rendered_jinja( target.split('slack://webhook/#', 1)[1], sqs_message, resource_list, self.logger, 'slack_template', 'slack_default') self.logger.debug( "Generating message for webhook %s." % self.config.get('slack_webhook')) elif target.startswith('slack://') and self.email_handler.target_is_email( target.split('slack://', 1)[1]): resolved_addrs = self.retrieve_user_im([target.split('slack://', 1)[1]]) for address, slack_target in resolved_addrs.items(): slack_messages[address] = get_rendered_jinja( slack_target, sqs_message, resource_list, self.logger, 'slack_template', 'slack_default') elif target.startswith('slack://#'): resolved_addrs = target.split('slack://#', 1)[1] slack_messages[resolved_addrs] = get_rendered_jinja( resolved_addrs, sqs_message, resource_list, self.logger, 'slack_template', 'slack_default') self.logger.debug("Generating message for specified Slack channel.") return slack_messages
def get_to_addrs_slack_messages_map(self, sqs_message): to_addrs_to_resources_map = self.email_handler.get_email_to_addrs_to_resources_map( sqs_message) slack_messages = {} # Check for Slack targets in 'to' action and render appropriate template. for target in sqs_message.get('action', ()).get('to'): if target == 'slack://owners': for to_addrs, resources in six.iteritems( to_addrs_to_resources_map): resolved_addrs = self.retrieve_user_im(list(to_addrs)) if not resolved_addrs: continue for address, slack_target in resolved_addrs.iteritems(): slack_messages[address] = get_rendered_jinja( slack_target, sqs_message, resources, self.logger, 'slack_template', 'slack_default') self.logger.debug( "Generating messages for recipient list produced by get_email_to_addrs_to_resources_map." ) elif target.startswith( 'slack://') and self.email_handler.target_is_email( target.split('slack://', 1)[1]): resolved_addrs = self.retrieve_user_im( [target.split('slack://', 1)[1]]) for address, slack_target in resolved_addrs.iteritems(): slack_messages[address] = get_rendered_jinja( slack_target, sqs_message, to_addrs_to_resources_map.values()[0], self.logger, 'slack_template', 'slack_default') self.logger.debug( "Generating message for specified email target, based on lookup via Slack API." ) elif target.startswith('slack://#'): resolved_addrs = target.split('slack://#', 1)[1] slack_messages[resolved_addrs] = get_rendered_jinja( resolved_addrs, sqs_message, to_addrs_to_resources_map.values()[0], self.logger, 'slack_template', 'slack_default') self.logger.debug( "Generating message for specified Slack channel.") return slack_messages
def test_get_rendered_jinja(self): # Jinja paths must always be forward slashes regardless of operating system template_abs_filename = os.path.abspath( os.path.join(os.path.dirname(__file__), 'example.jinja')) template_abs_filename = template_abs_filename.replace('\\', '/') SQS_MESSAGE_1['action']['template'] = template_abs_filename body = utils.get_rendered_jinja( ["*****@*****.**"], SQS_MESSAGE_1, [RESOURCE_1], logging.getLogger('c7n_mailer.utils.email'), 'template', 'default', MAILER_CONFIG['templates_folders']) self.assertIsNotNone(body)
def get_message_content(self, queue_message, resources, to_addrs): return get_rendered_jinja(to_addrs, queue_message, resources, self.logger, 'template', 'default')
def get_to_addrs_slack_messages_map(self, sqs_message): resource_list = [] for resource in sqs_message['resources']: resource_list.append(resource) slack_messages = {} # Check for Slack targets in 'to' action and render appropriate template. for target in sqs_message.get('action', ()).get('to'): if target == 'slack://owners': to_addrs_to_resources_map = \ self.email_handler.get_email_to_addrs_to_resources_map(sqs_message) for to_addrs, resources in six.iteritems( to_addrs_to_resources_map): resolved_addrs = self.retrieve_user_im(list(to_addrs)) if not resolved_addrs: continue for address, slack_target in resolved_addrs.items(): slack_messages[address] = get_rendered_jinja( slack_target, sqs_message, resources, self.logger, 'slack_template', 'slack_default', self.config['templates_folders']) self.logger.debug( "Generating messages for recipient list produced by resource owner resolution." ) elif target.startswith('https://hooks.slack.com/'): slack_messages[target] = get_rendered_jinja( target, sqs_message, resource_list, self.logger, 'slack_template', 'slack_default', self.config['templates_folders']) elif target.startswith('slack://webhook/#') and self.config.get( 'slack_webhook'): webhook_target = self.config.get('slack_webhook') slack_messages[webhook_target] = get_rendered_jinja( target.split('slack://webhook/#', 1)[1], sqs_message, resource_list, self.logger, 'slack_template', 'slack_default', self.config['templates_folders']) self.logger.debug("Generating message for webhook %s." % self.config.get('slack_webhook')) elif target.startswith('slack://') and is_email( target.split('slack://', 1)[1]): resolved_addrs = self.retrieve_user_im( [target.split('slack://', 1)[1]]) for address, slack_target in resolved_addrs.items(): slack_messages[address] = get_rendered_jinja( slack_target, sqs_message, resource_list, self.logger, 'slack_template', 'slack_default', self.config['templates_folders']) elif target.startswith('slack://#'): resolved_addrs = target.split('slack://#', 1)[1] slack_messages[resolved_addrs] = get_rendered_jinja( resolved_addrs, sqs_message, resource_list, self.logger, 'slack_template', 'slack_default', self.config['templates_folders']) elif target.startswith('slack://tag/') and 'Tags' in resource: tag_name = target.split('tag/', 1)[1] result = next((item for item in resource.get('Tags', []) if item["Key"] == tag_name), None) if not result: self.logger.debug("No %s tag found in resource." % tag_name) continue resolved_addrs = result['Value'] slack_messages[resolved_addrs] = get_rendered_jinja( resolved_addrs, sqs_message, resource_list, self.logger, 'slack_template', 'slack_default', self.config['templates_folders']) self.logger.debug( "Generating message for specified Slack channel.") return slack_messages
def get_message_content(self, queue_message, resources, to_addrs): return get_rendered_jinja( to_addrs, queue_message, resources, self.logger, 'template', 'default', self.config['templates_folders'])