Esempio n. 1
0
    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
Esempio n. 3
0
    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
Esempio n. 4
0
 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')
Esempio n. 6
0
    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'])