in src/hpc/autoscale/example/readme.py [0:0]
def onprem_burst_demand() -> None:
onprem001 = SchedulerNode(
"onprem001", resources={"onprem": True, "nodetype": "A", "ncpus": 16}
)
onprem002 = SchedulerNode(
"onprem002", resources={"onprem": True, "nodetype": "A", "ncpus": 32}
)
# onprem002 already has 10 cores occupied
onprem002.available["ncpus"] -= 10
dcalc = new_demand_calculator(CONFIG, existing_nodes=[onprem001, onprem002])
dcalc.node_mgr.add_default_resource(
{"node.nodearray": ["htc", "htcspot"]}, "nodetype", "A"
)
assert [b for b in dcalc.node_mgr.get_buckets() if b.nodearray == "htc"][
0
].resources["nodetype"] == "A"
dcalc.node_mgr.add_default_resource({}, "nodetype", "B")
assert [b for b in dcalc.node_mgr.get_buckets() if b.nodearray == "htc"][
0
].resources["nodetype"] == "A"
# we want 50 ncpus, but there are only 38 onpremise, so we need to burst
# 12 more cores.
dcalc.add_job(Job("tc-100", {"nodetype": "A", "ncpus": 1}, iterations=50))
demand_result = dcalc.finish()
if not DRY_RUN:
dcalc.bootup()
# also note we can add defaults to the column by adding a :, like
# onprem:False, as this is only defined on the onprem nodes and not
# on the Azure nodes.
print_demand(
["name", "job_ids", "nodetype", "onprem:False", "/ncpus"], demand_result
)