in pbspro/src/pbspro/cli.py [0:0]
def _setup_shell_locals(self, config: Dict) -> Dict:
"""
Provides read only interactive shell. type pbsprohelp()
in the shell for more information
"""
ctx = DefaultContextHandler("[interactive-readonly]")
pbs_driver = PBSProDriver(config)
pbs_env = self._pbs_env(pbs_driver)
def pbsprohelp() -> None:
print("config - dict representing autoscale configuration.")
print("cli - object representing the CLI commands")
print(
"pbs_env - object that contains data structures for queues, resources etc"
)
print("queues - dict of queue name -> PBSProQueue object")
print("jobs - dict of job id -> Autoscale Job")
print(
"scheduler_nodes - dict of hostname -> node objects. These represent purely what"
" the scheduler sees without additional booting nodes / information from CycleCloud"
)
print(
"resource_definitions - dict of resource name -> PBSProResourceDefinition objects."
)
print(
"default_scheduler - PBSProScheduler object representing the default scheduler."
)
print(
"pbs_driver - PBSProDriver object that interacts directly with PBS and implements"
" PBS specific behavior for scalelib."
)
print(
"demand_calc - ScaleLib DemandCalculator - pseudo-scheduler that determines the what nodes are unnecessary"
)
print(
"node_mgr - ScaleLib NodeManager - interacts with CycleCloud for all node related"
+ " activities - creation, deletion, limits, buckets etc."
)
print("pbsprohelp - This help function")
# try to make the key "15" instead of "15.hostname" if only
# a single submitter was in use
num_scheds = len(set([x.name.split(".", 1)[-1] for x in pbs_env.jobs]))
if num_scheds == 1:
jobs_dict = partition_single(pbs_env.jobs, lambda j: j.name.split(".")[0])
else:
jobs_dict = partition_single(pbs_env.jobs, lambda j: j.name)
sched_nodes_dict = partition_single(
pbs_env.scheduler_nodes, lambda n: n.hostname
)
pbs_env.queues = clilib.ShellDict(pbs_env.queues)
for snode in pbs_env.scheduler_nodes:
snode.shellify()
pbs_env.resource_definitions = clilib.ShellDict(pbs_env.resource_definitions)
demand_calc, _ = self._demand_calc(config, pbs_driver)
shell_locals = {
"config": config,
"cli": self,
"ctx": ctx,
"pbs_env": pbs_env,
"queues": pbs_env.queues,
"jobs": clilib.ShellDict(jobs_dict, "j"),
"scheduler_nodes": clilib.ShellDict(sched_nodes_dict),
"resource_definitions": pbs_env.resource_definitions,
"default_scheduler": pbs_env.default_scheduler,
"pbs_driver": pbs_driver,
"demand_calc": demand_calc,
"node_mgr": demand_calc.node_mgr,
"pbsprohelp": pbsprohelp,
}
return shell_locals