def deploy_task_serialize(self, node): """Serialize tasks with necessary for orchestrator attributes :param node: dict with serialized node """ tasks = self.graph.get_tasks(node['role']).topology serialized = [] priority = ps.PriorityStrategy() for task in tasks: serializer = self.serializers.get_deploy_serializer(task)( task, self.cluster, node) if not serializer.should_execute(): continue serialized.extend(serializer.serialize()) priority.one_by_one(serialized) return serialized
def add_priorities(self, nodes): """Add priorities and tasks for all nodes :param nodes: list of node db object """ priority = ps.PriorityStrategy() groups_subgraph = self.graph.get_groups_subgraph() # get list with names ['controller', 'compute', 'cinder'] all_groups = groups_subgraph.nodes() grouped_nodes = self.group_nodes_by_roles(nodes) # if there is no nodes with some roles - mark them as success roles processed_groups = set(all_groups) - set(grouped_nodes.keys()) current_groups = groups_subgraph.get_next_groups(processed_groups) while current_groups: one_by_one = [] parallel = [] for r in current_groups: group = self.graph.node[r] if (group['parameters']['strategy']['type'] == consts.DEPLOY_STRATEGY.one_by_one): one_by_one.append(group) elif (group['parameters']['strategy']['type'] == consts.DEPLOY_STRATEGY.parallel): parallel.append(group) for group in one_by_one: nodes = self.get_nodes_with_roles(grouped_nodes, group['role']) priority.one_by_one(nodes) self.process_parallel_nodes(priority, parallel, grouped_nodes) # fetch next part of groups processed_groups.update(current_groups) current_groups = groups_subgraph.get_next_groups(processed_groups)