diff --git a/job-submit.spec b/job-submit.spec index 64c459a..3ff1e05 100644 --- a/job-submit.spec +++ b/job-submit.spec @@ -1,85 +1,91 @@ %define fxdir /usr/share/lua/5.1/job_submit_fx %define name scitas-job-submit -%define version 1.0.1 +%define version 1.0.3 %define release 1%{?dist} Name: %{name} Version: %{version} Release: %{release} License: GPLv3 -Summary: Collection of functions for job_submit.lua script +Summary: Collection of functions for job_submit.lua script URL: https://c4science.ch/source/scitas-job-submit Source0: %{name}-%{version}.tar.gz BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) %description -Collection of functions developed in LUA, integrated into the slurm +Collection of functions developed in LUA, integrated into the slurm job_submit.lua script. %prep %setup -q %build %install install -m 755 -d %{buildroot}%{fxdir} install -m 755 -d %{buildroot}/etc/slurm/job_submit install -m 644 job_submit/* %{buildroot}/etc/slurm/job_submit install -m 644 job_submit.lua %{buildroot}/etc/slurm/job_submit.lua %define fxtarget billing_cost_estimate install -m 755 -d %{buildroot}%{fxdir}/%{fxtarget}/lua -install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/init.lua -install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/lua/init.lua +install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/init.lua +install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/lua/init.lua %define fxtarget partition_setting install -m 755 -d %{buildroot}%{fxdir}/%{fxtarget}/lua install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/init.lua install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/lua/init.lua %define fxtarget scitas_cost install -m 755 -d %{buildroot}%{fxdir}/%{fxtarget}/lua install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/init.lua install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/lua/init.lua %define fxtarget scitas_debug install -m 755 -d %{buildroot}%{fxdir}/%{fxtarget}/lua install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/init.lua install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/lua/init.lua %define fxtarget track_gres install -m 755 -d %{buildroot}%{fxdir}/%{fxtarget}/lua install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/init.lua install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/lua/init.lua %define fxtarget verbose_mode install -m 755 -d %{buildroot}%{fxdir}/%{fxtarget}/lua install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/init.lua install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/lua/init.lua %define fxtarget force_account install -m 755 -d %{buildroot}%{fxdir}/%{fxtarget}/lua install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/init.lua install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/lua/init.lua +%define fxtarget validate_job +install -m 755 -d %{buildroot}%{fxdir}/%{fxtarget}/lua +install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/init.lua +install -m 644 job_submit_fx/%{fxtarget}.lua %{buildroot}%{fxdir}/%{fxtarget}/lua/init.lua %files %config(noreplace) /etc/slurm/job_submit/* %{fxdir} /etc/slurm/job_submit.lua %clean rm -rf %{buildroot} %changelog +* Wed May 25 2022 Nicolas COUDENE - 1.0.3 +- Add new function to check job description (array format for starter) * Mon Jan 10 2022 Antonio J. RUSSO - 1.0.2 - Add new function to force users to specify an account * Wed Sep 15 2021 Antonio J. RUSSO - 1.0.1 -- Build and debug partitions become free +- Build and debug partitions become free * Mon Jul 26 2021 Antonio J. RUSSO - 1.0.0 - Initial RPM release diff --git a/job_submit.lua b/job_submit.lua index fbd20ce..db68f54 100644 --- a/job_submit.lua +++ b/job_submit.lua @@ -1,88 +1,92 @@ --########################################################################-- -- -- Load billing_cost_estimate parameters (can be overriden in rates_file) -- --########################################################################-- CONF_DIR = '/etc/slurm/job_submit' CONF_FILES = {'job_submit.conf', 'cluster.conf', 'rates.conf'} for index, file in ipairs(CONF_FILES) do filetoload = CONF_DIR.."/"..file file_fh = io.open(filetoload, "r") if file_fh == nil then slurm.log_info("slurm_job_modify: No readable %s found!", filetoload) else io.close(file_fh) dofile(filetoload) end end --- require fonctions verbose_mode, track_gres, scitas_cost.lua, partition_setting.lua --- -if FX_VERBOSE then +if FX_VERBOSE then require('job_submit_fx/verbose_mode.lua') end if FX_TRACK_GRES then require('job_submit_fx/track_gres.lua') end if FX_SCITAS_COST then require('job_submit_fx/scitas_cost.lua') end if FX_PARTITION then require('job_submit_fx/partition_setting.lua') end if FX_FORCE_ACCOUNT then require('job_submit_fx/force_account.lua') end +require('job_submit_fx/validate_job.lua') + function slurm_job_submit(job_desc, part_list, submit_uid) --- Verbose mode --- --- To enable verbose mode, you must set the verbose_mode variable to 1 if FX_VERBOSE then verbose_mode(job_desc) end - + if FX_PARTITION then local partition = partition_setting (job_desc, submit_uid, INFINITE, SEVENTY, PARALLEL_PARTITION, SERIAL_PARTITION) if job_desc.partition ~= partition then job_desc.partition = partition slurm.log_info("slurm_job_modify: for user %u , setting partition: %s", submit_uid, partition) end - end + end if FX_TRACK_GRES then status = track_gres(job_desc, submit_uid) if status ~= 0 then return status end - end + end - if FX_SCITAS_COST then + if FX_SCITAS_COST then scitas_cost(job_desc, CPU_COST, GPU_COST, CORES_PER_NODE, GPUS_PER_NODE, DEFAULT_WTIME, DEFAULT_PARTITION, PARALLEL_PARTITION, SERIAL_PARTITION, submit_uid) end if FX_FORCE_ACCOUNT then force_account(job_desc) end + validate_job(job_desc) + return slurm.SUCCESS end -- The other required function function slurm_job_modify(job_desc, job_rec, part_list, modify_uid) return slurm.SUCCESS end slurm.log_info("job_submit_plugin initialized") return slurm.SUCCESS diff --git a/job_submit_fx/validate_job.lua b/job_submit_fx/validate_job.lua new file mode 100644 index 0000000..6e5bd5a --- /dev/null +++ b/job_submit_fx/validate_job.lua @@ -0,0 +1,12 @@ +-- function to validate job options +function validate_job (job_desc) + if job_desc.array_inx ~= nil then + ak, av = string.match(job_desc.array_inx, "^(%d+)-(%d+)$") + if ak == nil or av == nil then + slurm.log_user('--array/-a option have to be a range of values with a "-" separator, ex.: 0-14') + slurm.log_error("slurm_job_submit: invalid array index: %s",job_desc.array_inx) + -- 2081 == ESLURM_INVALID_ARRAY + return 2081 + end + end +end