コード例 #1
0
 def test_get_queue_client_by_uri(self):
     account = self.setup_account()
     url = "https://" + account.name + ".queue.core.windows.net/testcc"
     queue_service, queue_name = StorageUtilities.get_queue_client_by_uri(
         url, self.session)
     self.assertIsNotNone(queue_service)
     self.assertEqual(queue_name, "testcc")
コード例 #2
0
    def test_get_queue_client_expired_token(self):
        """
        Exception handler should deal with a bad token by clearing
        cache and retrying.  So if we provide a bad token followed
        by a real one in our mock, we expect it to end up getting
        the real token.
        """
        real_token = StorageUtilities.get_storage_token(self.session)

        with patch('c7n_azure.storage_utils.QueueService.create_queue'
                   ) as create_mock:
            with patch(
                    'c7n_azure.storage_utils.StorageUtilities.get_storage_token'
            ) as token_mock:
                error = AzureHttpError('', 403)
                error.error_code = 'AuthenticationFailed'

                # Two side effects: one with a bad token and an error,
                # and one with a good token and no error
                create_mock.side_effect = [error, None]
                token_mock.side_effect = [TokenCredential('fake'), real_token]

                url = "https://fake.queue.core.windows.net/testcc"
                queue_service, queue_name = \
                    StorageUtilities.get_queue_client_by_uri(url, self.session)

                # We end up with the real token (after a retry)
                self.assertEqual(real_token, queue_service.authentication)
コード例 #3
0
    def test_notify_though_storage_queue(self):
        account = self.setup_account()

        # Create queue, make sure it is empty
        queue_url = "https://" + account.name + ".queue.core.windows.net/testnotify"
        queue, name = StorageUtilities.get_queue_client_by_uri(
            queue_url, self.session)
        queue.clear_messages(name)

        p = self.load_policy({
            'name':
            'test-notify-for-keyvault',
            'resource':
            'azure.keyvault',
            'actions': [{
                'type': 'notify',
                'template': 'default',
                'priority_header': '2',
                'subject': 'testing notify action',
                'to': ['*****@*****.**'],
                'transport': {
                    'type': 'asq',
                    'queue': queue_url
                }
            }]
        })
        resources = p.run()
        self.assertEqual(len(resources), 1)

        # Pull messages, should be 1
        messages = StorageUtilities.get_queue_messages(queue, name)
        self.assertEqual(len(messages), 1)
コード例 #4
0
    def test_notify_though_storage_queue(self):
        account = self.setup_account()

        # Create queue, make sure it is empty
        queue_url = "https://" + account.name + ".queue.core.windows.net/testnotify"
        queue, name = StorageUtilities.get_queue_client_by_uri(queue_url, self.session)
        queue.clear_messages(name)

        p = self.load_policy({
            'name': 'test-notify-for-keyvault',
            'resource': 'azure.keyvault',
            'actions': [
                {'type': 'notify',
                 'template': 'default',
                 'priority_header': '2',
                 'subject': 'testing notify action',
                 'to': ['*****@*****.**'],
                 'transport':
                     {'type': 'asq',
                      'queue': queue_url}
                 }
            ]
        })
        resources = p.run()
        self.assertEqual(len(resources), 1)

        # Pull messages, should be 1
        messages = StorageUtilities.get_queue_messages(queue, name)
        self.assertEqual(len(messages), 1)
コード例 #5
0
    def run(self, parallel=False):
        if parallel:
            self.logger.info(
                "Parallel processing with Azure Queue is not yet implemented.")

        self.logger.info("Downloading messages from the Azure Storage queue.")
        queue_settings = StorageUtilities.get_queue_client_by_uri(
            self.receive_queue)
        queue_messages = StorageUtilities.get_queue_messages(
            *queue_settings, num_messages=self.batch_size)

        while len(queue_messages) > 0:
            for queue_message in queue_messages:
                self.logger.debug("Message id: %s received" % queue_message.id)

                if (self.process_azure_queue_message(queue_message) or
                        queue_message.dequeue_count > self.max_message_retry):
                    # If message handled successfully or max retry hit, delete
                    StorageUtilities.delete_queue_message(
                        *queue_settings, message=queue_message)

            queue_messages = StorageUtilities.get_queue_messages(
                *queue_settings, num_messages=self.batch_size)

        self.logger.info(
            'No messages left on the azure storage queue, exiting c7n_mailer.')
コード例 #6
0
 def test_get_queue_client_by_uri_china_cloud(self, mock_create):
     url = CHINA_STORAGE_ACCOUNT + "/queuename"
     queue_service, queue_name =\
         StorageUtilities.get_queue_client_by_uri(url,
                                                  Session(cloud_endpoints=AZURE_CHINA_CLOUD))
     self.assertIsNotNone(queue_service)
     self.assertEqual(queue_name, "queuename")
     self.assertTrue(
         CHINA_STORAGE_ENDPOINT in queue_service.primary_endpoint)
     self.assertTrue(mock_create.called_once())
コード例 #7
0
ファイル: notify.py プロジェクト: dewitt4/Cloud-Custodain
 def send_to_azure_queue(self, queue_uri, message, session):
     try:
         queue_service, queue_name = StorageUtilities.get_queue_client_by_uri(
             queue_uri, session)
         return StorageUtilities.put_queue_message(queue_service,
                                                   queue_name,
                                                   self.pack(message)).id
     except AzureHttpError as e:
         if e.status_code == 403:
             self.log.error(
                 "Access Error - Storage Queue Data Contributor Role is required "
                 "to enqueue messages to the Azure Queue Storage.")
         else:
             self.log.error("Error putting message to the queue.\n" +
                            str(e))
コード例 #8
0
    def test_cycle_queue_message_by_uri(self):
        account = self.setup_account()
        url = "https://" + account.name + ".queue.core.windows.net/testcyclemessage"

        queue_settings = StorageUtilities.get_queue_client_by_uri(url, self.session)
        StorageUtilities.put_queue_message(*queue_settings, content=u"hello queue")

        # Pull messages, should be 1
        messages = StorageUtilities.get_queue_messages(*queue_settings)
        self.assertEqual(len(messages), 1)

        # Read message and delete it from queue
        for message in messages:
            self.assertEqual(message.content, u"hello queue")
            StorageUtilities.delete_queue_message(*queue_settings, message=message)

        # Pull messages again, should be empty
        messages = StorageUtilities.get_queue_messages(*queue_settings)
        self.assertEqual(len(messages), 0)
コード例 #9
0
    def run(self, parallel=False):
        if parallel:
            self.logger.info("Parallel processing with Azure Queue is not yet implemented.")

        self.logger.info("Downloading messages from the Azure Storage queue.")
        queue_settings = StorageUtilities.get_queue_client_by_uri(self.receive_queue, self.session)
        queue_messages = StorageUtilities.get_queue_messages(
            *queue_settings, num_messages=self.batch_size)

        while len(queue_messages) > 0:
            for queue_message in queue_messages:
                self.logger.debug("Message id: %s received" % queue_message.id)

                if (self.process_azure_queue_message(queue_message) or
                        queue_message.dequeue_count > self.max_message_retry):
                    # If message handled successfully or max retry hit, delete
                    StorageUtilities.delete_queue_message(*queue_settings, message=queue_message)

            queue_messages = StorageUtilities.get_queue_messages(
                *queue_settings, num_messages=self.batch_size)

        self.logger.info('No messages left on the azure storage queue, exiting c7n_mailer.')
コード例 #10
0
 def test_get_queue_client_by_uri(self):
     account = self.setup_account()
     url = "https://" + account.name + ".queue.core.windows.net/testcc"
     queue_service, queue_name = StorageUtilities.get_queue_client_by_uri(url, self.session)
     self.assertIsNotNone(queue_service)
     self.assertEqual(queue_name, "testcc")
コード例 #11
0
 def send_to_azure_queue(self, queue_uri, message, session):
     queue_service, queue_name = StorageUtilities.get_queue_client_by_uri(
         queue_uri, session)
     return StorageUtilities.put_queue_message(queue_service, queue_name,
                                               self.pack(message)).id
コード例 #12
0
ファイル: actions.py プロジェクト: capitalone/cloud-custodian
 def send_to_azure_queue(self, queue_uri, message, session):
     queue_service, queue_name = StorageUtilities.get_queue_client_by_uri(queue_uri, session)
     return StorageUtilities.put_queue_message(queue_service, queue_name, self.pack(message)).id