blob: e072da25af0344f689a432ce698bd5e28421315f [file] [log] [blame]
--[[
Example lua script demonstrating the SLURM job_submit/lua interface.
This is only an example, not meant for use in its current form.
Leave the function names, arguments, local varialbes and setmetatable
set up logic in each function unchanged. Change only the logic after
the line containing "*** YOUR LOGIC GOES BELOW ***".
For use, this script should be copied into a file name "job_submit.lua"
in the same directory as the SLURM configuration file, slurm.conf.
--]]
function _build_part_table ( part_list )
local part_rec = {}
for i in ipairs(part_list) do
part_rec[i] = { part_rec_ptr=part_list[i] }
setmetatable (part_rec[i], part_rec_meta)
end
return part_rec
end
--########################################################################--
--
-- SLURM job_submit/lua interface:
--
--########################################################################--
function slurm_job_submit ( job_desc, part_list, submit_uid )
setmetatable (job_desc, job_req_meta)
local part_rec = _build_part_table (part_list)
-- *** YOUR LOGIC GOES BELOW ***
if job_desc.account == nil then
local account = "***TEST_ACCOUNT***"
log_info("slurm_job_submit: job from uid %d, setting default account value: %s",
submit_uid, account)
job_desc.account = account
end
-- If no default partition, set the partition to the highest
-- priority partition this user has access to
if job_desc.partition == nil then
local new_partition = nil
local top_priority = -1
local last_priority = -1
for i in ipairs(part_rec) do
-- log_info("part name[%d]:%s", i, part_rec[i].name)
if part_rec[i].flag_default ~= 0 then
top_priority = -1
break
end
last_priority = part_rec[i].priority
if last_priority > top_priority then
top_priority = last_priority
new_partition = part_rec[i].name
end
end
if top_priority >= 0 then
log_info("slurm_job_submit: job from uid %d, setting default partition value: %s",
job_desc.user_id, new_partition)
job_desc.partition = new_partition
end
end
return 0
end
function slurm_job_modify ( job_desc, job_rec, part_list, modify_uid )
setmetatable (job_desc, job_req_meta)
setmetatable (job_rec, job_rec_meta)
local part_rec = _build_part_table (part_list)
-- *** YOUR LOGIC GOES BELOW ***
if job_desc.comment == nil then
local comment = "***TEST_COMMENT***"
log_info("slurm_job_modify: for job %u from uid %d, setting default comment value: %s",
job_rec.job_id, modify_uid, comment)
job_desc.comment = comment
end
return 0
end
--########################################################################--
--
-- Initialization code:
--
-- Define functions for logging and accessing slurmctld structures
--
--########################################################################--
log_info = slurm.log_info
log_verbose = slurm.log_verbose
log_debug = slurm.log_debug
log_err = slurm.error
log_user = slurm.log_user
job_rec_meta = {
__index = function (table, key)
return _get_job_rec_field(table.job_rec_ptr, key)
end
}
job_req_meta = {
__index = function (table, key)
return _get_job_req_field(table.job_desc_ptr, key)
end,
__newindex = function (table, key, value)
return _set_job_req_field(table.job_desc_ptr, key, value or "")
end
}
part_rec_meta = {
__index = function (table, key)
return _get_part_rec_field(table.part_rec_ptr, key)
end
}
log_info("initialized")
return slurm.SUCCESS