in community/modules/scheduler/schedmd-slurm-gcp-v6-controller/modules/slurm_files/scripts/setup.py [0:0]
def run_custom_scripts():
"""run custom scripts based on instance_role"""
custom_dir = dirs.custom_scripts
if lookup().is_controller:
# controller has all scripts, but only runs controller.d
custom_dirs = [custom_dir / "controller.d"]
elif lookup().instance_role == "compute":
# compute setup with nodeset.d
custom_dirs = [custom_dir / "nodeset.d"]
elif lookup().is_login_node:
# login setup with only login.d
custom_dirs = [custom_dir / "login.d"]
else:
# Unknown role: run nothing
custom_dirs = []
timeout = _startup_script_timeout(lookup())
custom_scripts = [
p
for d in custom_dirs
for p in d.rglob("*")
if p.is_file() and not p.name.endswith(".disabled")
]
print_scripts = ",".join(str(s.relative_to(custom_dir)) for s in custom_scripts)
log.debug(f"custom scripts to run: {custom_dir}/({print_scripts})")
try:
for script in custom_scripts:
log.info(f"running script {script.name} with timeout={timeout}")
result = run(str(script), timeout=timeout, check=False, shell=True)
runlog = (
f"{script.name} returncode={result.returncode}\n"
f"stdout={result.stdout}stderr={result.stderr}"
)
log.info(runlog)
result.check_returncode()
except OSError as e:
log.error(f"script {script} is not executable")
raise e
except subprocess.TimeoutExpired as e:
log.error(f"script {script} did not complete within timeout={timeout}")
raise e
except Exception as e:
log.exception(f"script {script} encountered an exception")
raise e