def _get_nodes_by_id()

in src/hpc/autoscale/node/nodemanager.py [0:0]


    def _get_nodes_by_id(self, relevant_node_list: NodeList) -> List[Node]:
        relevant_node_names = [n["Name"] for n in relevant_node_list.nodes]
        updated_cluster_status = self.__cluster_bindings.get_cluster_status(True)

        updated_cc_nodes = partition_single(
            updated_cluster_status.nodes, lambda n: n["Name"]
        )

        nodes_by_name = partition_single(self.get_nodes(), lambda n: n.name)

        ret = []

        for name in relevant_node_names:
            if name in nodes_by_name:
                node = nodes_by_name[name]
                if name not in updated_cc_nodes:
                    logging.warning("%s no longer exists.", name)
                    node.exists = False
                    node.state = ht.NodeStatus("Off")
                    node.target_state = ht.NodeStatus("Off")
                else:
                    cc_node = updated_cc_nodes[name]
                    node.state = ht.NodeStatus(cc_node["Status"])
                    node.target_state = ht.NodeStatus(cc_node["TargetState"])
                    if node.delayed_node_id.node_id:
                        assert node.delayed_node_id.node_id == cc_node["NodeId"]
                    else:
                        logging.info(
                            "Found nodeid for %s -> %s", node, cc_node["NodeId"]
                        )
                        assert cc_node["NodeId"]
                        node.delayed_node_id.node_id = cc_node["NodeId"]
                    ret.append(node)

        return ret