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