Example #1
0
def get_flow(context, workflow_engine, operation_type, plan, provider,
             checkpoint):
    protectable_registry = ProtectableRegistry()
    resources = set(Resource(**item) for item in plan.get("resources"))
    resource_graph = protectable_registry.build_graph(context, resources)
    checkpoint.resource_graph = resource_graph
    checkpoint.commit()
    flow_name = "Protect_" + plan.get('id')
    protection_flow = workflow_engine.build_flow(flow_name, 'linear')
    plugins = provider.load_plugins()
    resources_task_flow = resource_flow.build_resource_flow(
        operation_type=operation_type,
        context=context,
        workflow_engine=workflow_engine,
        resource_graph=resource_graph,
        plugins=plugins,
        parameters=plan.get('parameters'),
    )
    workflow_engine.add_tasks(
        protection_flow,
        InitiateProtectTask(),
        resources_task_flow,
        CompleteProtectTask(),
    )
    flow_engine = workflow_engine.get_engine(protection_flow,
                                             store={'checkpoint': checkpoint})
    return flow_engine
Example #2
0
 def __init__(self, service_name=None, *args, **kwargs):
     super(ProtectionManager, self).__init__(*args, **kwargs)
     provider_reg = CONF.provider_registry
     self.provider_registry = utils.load_plugin(PROVIDER_NAMESPACE,
                                                provider_reg)
     self.protectable_registry = ProtectableRegistry()
     self.protectable_registry.load_plugins()
     self.worker = flow_manager.Worker()
Example #3
0
 def __init__(self, service_name=None, *args, **kwargs):
     super(ProtectionManager, self).__init__(*args, **kwargs)
     provider_reg = CONF.provider_registry
     self.provider_registry = utils.load_plugin(PROVIDER_NAMESPACE,
                                                provider_reg)
     self.protectable_registry = ProtectableRegistry()
     self.protectable_registry.load_plugins()
     self.worker = flow_manager.Worker()
     self._greenpool = None
     self._greenpool_size = CONF.max_concurrent_operations
     if self._greenpool_size != 0:
         self._greenpool = greenpool.GreenPool(self._greenpool_size)
Example #4
0
 def setUp(self):
     super(ProtectableRegistryTest, self).setUp()
     self.protectable_registry = ProtectableRegistry()
     self._fake_plugin = _FakeProtectablePlugin(None)
     self.protectable_registry.register_plugin(self._fake_plugin)
Example #5
0
    def build_task_flow(self, ctx):
        cntxt = ctx["context"]
        workflow_engine = ctx["workflow_engine"]
        operation = ctx["operation_type"]

        resource_context = None
        resource_graph = None

        if operation == constants.OPERATION_PROTECT:
            plan = ctx["plan"]
            task_flow = workflow_engine.build_flow(flow_name=plan.get('id'))
            resources = plan.get('resources')
            parameters = plan.get('parameters')
            graph_resources = []
            for resource in resources:
                graph_resources.append(
                    Resource(type=resource['type'],
                             id=resource['id'],
                             name=resource['name']))
            # TODO(luobin): pass registry in ctx
            registry = ProtectableRegistry()
            registry.load_plugins()
            resource_graph = registry.build_graph(cntxt, graph_resources)
            resource_context = ResourceGraphContext(
                cntxt=cntxt,
                operation=operation,
                workflow_engine=workflow_engine,
                task_flow=task_flow,
                plugin_map=self._plugin_map,
                parameters=parameters)
        if operation == constants.OPERATION_RESTORE:
            restore = ctx['restore']
            task_flow = workflow_engine.build_flow(flow_name=restore.get('id'))
            checkpoint = ctx["checkpoint"]
            resource_graph = checkpoint.resource_graph
            parameters = restore.get('parameters')
            heat_template = ctx["heat_template"]
            resource_context = ResourceGraphContext(
                cntxt=cntxt,
                checkpoint=checkpoint,
                operation=operation,
                workflow_engine=workflow_engine,
                task_flow=task_flow,
                plugin_map=self._plugin_map,
                parameters=parameters,
                heat_template=heat_template)
        if operation == constants.OPERATION_DELETE:
            checkpoint = ctx['checkpoint']
            task_flow = workflow_engine.build_flow(flow_name=checkpoint.id)
            resource_graph = checkpoint.resource_graph
            resource_context = ResourceGraphContext(
                cntxt=cntxt,
                checkpoint=checkpoint,
                operation=operation,
                workflow_engine=workflow_engine,
                task_flow=task_flow,
                plugin_map=self._plugin_map)

        # TODO(luobin): for other type operations

        walker_listener = ResourceGraphWalkerListener(resource_context)
        graph_walker = GraphWalker()
        graph_walker.register_listener(walker_listener)
        graph_walker.walk_graph(resource_graph)

        if operation == constants.OPERATION_PROTECT:
            return {
                "task_flow": walker_listener.context.task_flow,
                "status_getters": walker_listener.context.status_getters,
                "resource_graph": resource_graph
            }
        if operation == constants.OPERATION_RESTORE:
            return {"task_flow": walker_listener.context.task_flow}
        if operation == constants.OPERATION_DELETE:
            return {
                "task_flow": walker_listener.context.task_flow,
                "status_getters": walker_listener.context.status_getters
            }