Exemplo n.º 1
0
    def revert(self, provider_details, retry_sleep_time, responders,
               project_id, service_id, **kwargs):
        """If failed to delete association dns mapping
        failed revert the reestablish dns mapping task.

        CNAME created at rackspace dns which used by customer for
        their by vanity domain failed to delete. Will reestablish
        the dns mapping.

        :param dict provider_details: dict of providers
        :param int retry_sleep_time: sleep time
        :param list[dict] responders: list of responder
        :param unicode project_id: project id of the user
        :param unicode service_id: uuid of the service
        """
        if self.name in kwargs['flow_failures'].keys():
            retries = conf[DNS_GROUP].retries
            current_progress = (1.0 / retries)
            if hasattr(self, 'retry_progress') \
                    and hasattr(self, 'retry_index'):
                self.retry_index = self.retry_index + 1
                self.retry_progress = current_progress * self.retry_index
            if not hasattr(self, 'retry_progress') \
                    and not hasattr(self, 'retry_index'):
                self.retry_progress = current_progress
                self.retry_index = 1
            if self.retry_progress == 1.0:
                LOG.warning('Maximum retry attempts of '
                            '{0} reached for Task {1}'.format(
                                retries, self.name))
                LOG.warning('Setting of state of service_id: '
                            '{0} and project_id: {1} '
                            'to failed'.format(service_id, project_id))
                provider_details_dict = {}
                result = kwargs['result']
                for responder in responders:
                    for provider_name in responder:
                        provider_details_dict[provider_name] = (
                            pd.ProviderDetail(error_info=result.traceback_str,
                                              status='failed',
                                              error_message='Failed after '
                                              '{0} DNS '
                                              'retries'.format(retries),
                                              error_class=str(
                                                  result.exc_info[0])))

                # serialize provider_details_dict
                for provider_name in provider_details_dict:
                    provider_details_dict[provider_name] = (
                        provider_details_dict[provider_name].to_dict())

                update_provider_details = common.UpdateProviderDetailTask()
                update_provider_details.execute(provider_details_dict,
                                                project_id, service_id)
            else:
                LOG.warning('Sleeping for {0} seconds and '
                            'retrying'.format(retry_sleep_time))
                if retry_sleep_time is not None:
                    time.sleep(retry_sleep_time)
Exemplo n.º 2
0
    def revert(self, responders, retry_sleep_time, service_old, service_obj,
               project_id, service_id, **kwargs):
        if self.name in kwargs['flow_failures'].keys():
            retries = conf[DNS_GROUP].retries
            current_progress = (1.0 / retries)
            if hasattr(self, 'retry_progress') \
                    and hasattr(self, 'retry_index'):
                self.retry_index = self.retry_index + 1
                self.retry_progress = current_progress * self.retry_index
            if not hasattr(self, 'retry_progress') \
                    and not hasattr(self, 'retry_index'):
                self.retry_progress = current_progress
                self.retry_index = 1
            if self.retry_progress == 1.0:
                LOG.warning('Maximum retry attempts of '
                            '{0} reached for Task {1}'.format(
                                retries, self.name))
                LOG.warning('Setting of state of service_id: '
                            '{0} and project_id: {1} '
                            'to failed'.format(service_id, project_id))
                provider_details_dict = {}
                result = kwargs['result']

                service_controller, self.storage_controller = \
                    memoized_controllers.task_controllers('poppy', 'storage')
                service_obj_json = json.loads(service_obj)
                service_obj = service.load_from_json(service_obj_json)

                for responder in responders:
                    for provider_name in responder:
                        provider_service_id = (
                            service_controller._driver.providers[
                                provider_name.lower()].obj.service_controller.
                            get_provider_service_id(service_obj))
                        provider_details_dict[provider_name] = (
                            provider_details.ProviderDetail(
                                provider_service_id=provider_service_id,
                                error_info=result.traceback_str,
                                status='failed',
                                error_message='Failed after '
                                '{0} DNS '
                                'retries'.format(retries),
                                error_class=str(result.exc_info[0])))

                # serialize provider_details_dict
                for provider_name in provider_details_dict:
                    provider_details_dict[provider_name] = (
                        provider_details_dict[provider_name].to_dict())

                update_provider_details = common.UpdateProviderDetailTask()
                update_provider_details.execute(provider_details_dict,
                                                project_id, service_id)
            else:
                LOG.warning('Sleeping for {0} seconds and '
                            'retrying'.format(retry_sleep_time))
                if retry_sleep_time is not None:
                    time.sleep(retry_sleep_time)
Exemplo n.º 3
0
def create_service():
    flow = graph_flow.Flow('Creating poppy-service').add(
        create_service_tasks.CreateProviderServicesTask(),
        linear_flow.Flow(
            'Create Service DNS Mapping flow',
            retry=retry.ParameterizedForEach(
                rebind=['time_seconds'], provides='retry_sleep_time')).add(
                    create_service_tasks.CreateServiceDNSMappingTask(
                        rebind=['responders'])),
        create_service_tasks.CreateLogDeliveryContainerTask(),
        create_service_tasks.GatherProviderDetailsTask(
            rebind=['responders', 'dns_responder', 'log_responders']),
        common.UpdateProviderDetailTask(rebind=['provider_details_dict']))
    return flow
Exemplo n.º 4
0
    def revert(self, provider_details, retry_sleep_time,
               responders, project_id, service_id, **kwargs):
        if self.name in kwargs['flow_failures'].keys():
            retries = conf[DNS_GROUP].retries
            current_progress = (1.0 / retries)
            if hasattr(self, 'retry_progress') \
                    and hasattr(self, 'retry_index'):
                self.retry_index = self.retry_index + 1
                self.retry_progress = current_progress * self.retry_index
            if not hasattr(self, 'retry_progress') \
                    and not hasattr(self, 'retry_index'):
                self.retry_progress = current_progress
                self.retry_index = 1
            if self.retry_progress == 1.0:
                LOG.warning(
                    'Maximum retry attempts of '
                    '{0} reached for Task {1}'.format(retries, self.name))
                LOG.warning(
                    'Setting of state of service_id: '
                    '{0} and project_id: {1} '
                    'to failed'.format(service_id, project_id))
                provider_details_dict = {}
                result = kwargs['result']
                for responder in responders:
                    for provider_name in responder:
                        provider_details_dict[provider_name] = (
                            pd.ProviderDetail(
                                error_info=result.traceback_str,
                                status='failed',
                                error_message='Failed after '
                                              '{0} DNS '
                                              'retries'.format(retries),
                                error_class=str(result.exc_info[0])))

                # serialize provider_details_dict
                for provider_name in provider_details_dict:
                    provider_details_dict[provider_name] = (
                        provider_details_dict[provider_name].to_dict())

                update_provider_details = common.UpdateProviderDetailTask()
                update_provider_details.execute(provider_details_dict,
                                                project_id,
                                                service_id)
            else:
                LOG.warning('Sleeping for {0} seconds and '
                            'retrying'.format(retry_sleep_time))
                if retry_sleep_time is not None:
                    time.sleep(retry_sleep_time)
Exemplo n.º 5
0
        def bootstrap_mock_create(mock_bootstrap):
            mock_bootstrap.return_value = self.bootstrap_obj

            create_provider = create_service_tasks.CreateProviderServicesTask()
            responders = create_provider.execute(
                json.dumps(provider_details_json), self.project_id,
                self.service_id)
            create_dns = create_service_tasks.CreateServiceDNSMappingTask()
            dns_responder = create_dns.execute(responders, 0, self.project_id,
                                               self.service_id)
            gather_provider = create_service_tasks.GatherProviderDetailsTask()
            log_responder = \
                create_service_tasks.CreateLogDeliveryContainerTask()
            provider_details_dict = \
                gather_provider.execute(responders,
                                        dns_responder,
                                        log_responder)
            update_provider_details = common.UpdateProviderDetailTask()
            update_provider_details.execute(provider_details_dict,
                                            self.project_id, self.service_id)
Exemplo n.º 6
0
    def revert(self, responders, retry_sleep_time,
               project_id, service_id, **kwargs):
        """Reverts the create dnsmapping task is failed.

        :param list responders: list of responder
        :param int retry_sleep_time: sleep time
        :param unicode project_id: project id of user
        :param unicode service_id: service id of the service(generated uuid)
        """

        if self.name in kwargs['flow_failures'].keys():
            retries = conf[DNS_GROUP].retries
            current_progress = (1.0 / retries)
            if hasattr(self, 'retry_progress') \
                    and hasattr(self, 'retry_index'):
                self.retry_index = self.retry_index + 1
                self.retry_progress = current_progress * self.retry_index
            if not hasattr(self, 'retry_progress') \
                    and not hasattr(self, 'retry_index'):
                self.retry_progress = current_progress
                self.retry_index = 1
            if self.retry_progress == 1.0:
                LOG.warning(
                    'Maximum retry attempts of '
                    '{0} reached for Task {1}'.format(retries, self.name))
                LOG.warning(
                    'Setting of state of service_id: '
                    '{0} and project_id: {1} '
                    'to failed'.format(service_id, project_id))
                provider_details_dict = {}
                result = kwargs['result']

                service_controller, self.storage_controller = \
                    memoized_controllers.task_controllers('poppy', 'storage')

                try:
                    service_obj = self.storage_controller.get_service(
                        project_id,
                        service_id
                    )
                except ValueError:
                    msg = 'Creating service {0} from Poppy failed. ' \
                          'No such service exists'.format(service_id)
                    LOG.info(msg)
                    raise Exception(msg)

                for responder in responders:
                    for provider_name in responder:
                        provider_service_id = (
                            service_controller._driver.
                            providers[provider_name.lower()].obj.
                            service_controller.
                            get_provider_service_id(service_obj))
                        provider_details_dict[provider_name] = (
                            provider_details.ProviderDetail(
                                provider_service_id=provider_service_id,
                                error_info=result.traceback_str,
                                status='failed',
                                error_message='Failed after '
                                              '{0} DNS '
                                              'retries'.format(retries),
                                error_class=str(result.exc_info[0])))

                # serialize provider_details_dict
                for provider_name in provider_details_dict:
                    provider_details_dict[provider_name] = (
                        provider_details_dict[provider_name].to_dict())

                update_provider_details = common.UpdateProviderDetailTask()
                update_provider_details.execute(provider_details_dict,
                                                project_id,
                                                service_id)
            else:
                LOG.warning('Sleeping for {0} seconds and '
                            'retrying'.format(retry_sleep_time))
                if retry_sleep_time is not None:
                    time.sleep(retry_sleep_time)