scripts/slurm_gcp_plugins/utils/__init__.py (35 lines of code) (raw):
import subprocess
import logging
# Various plugin utility functions
# Plugin helper function to get plugin settings in the following order:
#
# 1. from job features with
# 2. from slurm-gcp config
# 3. If provided, the default
# 4. None
def get_plugin_setting(plugin, setting, lkp, job, default=None):
features = get_job_features(job)
if f"{plugin}.{setting}" in features:
return features[f"{plugin}.{setting}"]
if "enable_slurm_gcp_plugins" in lkp.cfg:
if plugin in lkp.cfg.enable_slurm_gcp_plugins:
try:
iter(lkp.cfg.enable_slurm_gcp_plugins[plugin])
except TypeError:
# not iterable
1
else:
if setting in lkp.cfg.enable_slurm_gcp_plugins[plugin]:
return lkp.cfg.enable_slurm_gcp_plugins[plugin][setting]
return default
# Plugin helper function to get job features
def get_job_features(job):
if job is None:
return {}
features = {}
res, output = subprocess.getstatusoutput(f"squeue -h -o %f -j {job}")
if res == 0:
for feature in output.split("&"):
kv = feature.split("=", 1)
v = None
if len(kv) == 2:
v = kv[1]
features[kv[0]] = v
else:
logging.error("Unable to retrieve features of job:{job}")
return features
__all__ = [
"get_plugin_setting",
"get_job_features",
]