def preprocess_node_mgr()

in pbspro/src/pbspro/driver.py [0:0]


    def preprocess_node_mgr(self, config: Dict, node_mgr: NodeManager) -> None:
        """
        We add a default resource to map group_id to node.placement_group
        """
        super().preprocess_node_mgr(config, node_mgr)

        def group_id(node: Node) -> str:
            return node.placement_group if node.placement_group else "_none_"

        node_mgr.add_default_resource({}, "group_id", group_id, allow_none=False)

        def ungrouped(node: Node) -> str:
            return str(not bool(node.placement_group)).lower()

        node_mgr.add_default_resource({}, "ungrouped", ungrouped)
        pbsnodes_response = self.pbscmd.pbsnodes_parsed("-a")
        by_hostname = partition(
            pbsnodes_response, lambda x: x.get("name")
        )

        for node in node_mgr.get_nodes():
            # close out any failed nodes up front
            if node.state == "Failed":
                node.closed = True
            
            if not node.hostname:
                continue
            
            # assign keep_offline to these nodes and close them off from further
            # assignment
            pbsnodes_record = by_hostname.get(node.hostname)

            if pbsnodes_record and pbsnodes_record[0].get("resources_available.ccnodeid"):
                comment = pbsnodes_record[0].get("comment", "")
                if comment.startswith("cyclecloud keep offline"):
                    node.assign("keep_offline")
                    node.closed = True
                    continue