If you compile slurm with lua support you will have access to the job_submit.lua plugin. You don't get to see the exact syntax that a user used to submit a job, a feature I miss from Torque/Moab, you can see what slurm interpreted it as. The documentation for the plugin is pretty poor and I am no Lua expert, but it does do 99% of what I need it to do.
Below is a tiny snippet of my job_submit.lua script. Here I show that I want users to specify a time limit as well as QOS, if they don't I want the job to be rejected. Since my supercomputers are used for educational purposes, I also want the user to know why their job was rejected. function slurm_job_submit(job_desc, part_list, submit_uid) --[[ Start with an error count of 0 ]]-- local asc_error = 0 local asc_error_verbose = "" --[[ Seems that setting variables to local speeds Lua up drastically ]]-- local asc_job_time = job_desc.time_limit local asc_qos = job_desc.qos --[[ If the user doesn't ask for a time limit, boot them ]]-- if asc_job_time == 4294967294 then asc_error = asc_error + 1 asc_error_verbose = string.format("%s\nJob must request a time limit using the --time= flag.\n", asc_error_verbose) end --[[ If the user does not specify a QoS, boot them ]]-- if asc_qos == nil then asc_error = asc_error + 1 asc_error_verbose = string.format("%s\nJob must request a QoS using the --qos= flag.\n", asc_error_verbose) asc_qos = "invalid" end --[[ Spit out errors if found ]]-- if asc_error > 0 then slurm.log_user("\n%s", asc_error_verbose) return slurm.ERROR end return slurm.SUCCESS end If you look inside the source for the plugin: https://github.com/SchedMD/slurm/blob/32dbffb237c0882a99758748b07fc1abfe352d06/src/plugins/job_submit/lua/job_submit_lua.c You'll see that it has access to a ton of variables that are set during job submission. Any of these variables can be modified before the jobs gets sent to the queue. Let me know if this is helpful or you need any pointers. I'm not an expert in this, but I feel like this plugin could use better documentation as it is quite flexible and powerful. ------------------- Nicholas McCollum HPC Systems Administrator Alabama Supercomputer Authority On Tue, 19 Jul 2016, Yong Qin wrote:
Hi, I'm trying to write a plugin to filter jobs at submission time (accept or deny with an error msg). I have to admit that I have not started reading the job submission plugin architecture yet and I will do that if there's really no way to implement it as a SPANK plugin. My understanding up to this point is, to achieve this goal the most likely callback is slurm_spank_init() (local context). However at this stage there is no way to access any job related information until the job is allocated. Ideally I would like to access the job submission line in its original form (-n 4 -t 20:0:0 --mem 2g, etc.) so that I can be as thorough as possible when parsing it. Is there any way to access that information as I describe? Thanks for shedding the light. Yong Qin
smime.p7s
Description: S/MIME Cryptographic Signature