@classmethod
    def granular_deploy(cls, transaction, tasks, nodes,
                        affected_nodes, selected_task_ids, events, **kwargs):
        graph = orchestrator_graph.AstuteGraph(transaction.cluster, tasks)
        graph.check()
        graph.only_tasks(selected_task_ids)

        # NOTE(dshulyak) At this point parts of the orchestration can be empty,
        # it should not cause any issues with deployment/progress and was
        # done by design
        role_resolver = RoleResolver(nodes)
        serialized_cluster = deployment_serializers.serialize(
            graph, transaction.cluster, nodes)

        cls._save_deployment_info(transaction, serialized_cluster)

        if affected_nodes:
            graph.reexecutable_tasks(events)
            serialized_cluster.extend(deployment_serializers.serialize(
                graph, transaction.cluster, affected_nodes
            ))
            nodes = nodes + affected_nodes
        pre_deployment = stages.pre_deployment_serialize(
            graph, transaction.cluster, nodes,
            role_resolver=role_resolver)
        post_deployment = stages.post_deployment_serialize(
            graph, transaction.cluster, nodes,
            role_resolver=role_resolver)

        return {
            'deployment_info': serialized_cluster,
            'pre_deployment': pre_deployment,
            'post_deployment': post_deployment
        }
Builds parameters for granular deployment.
dataset/ETHPy150Open openstack/fuel-web/nailgun/nailgun/task/task.py/DeploymentTask.granular_deploy