blob: 2f7fbeed1ebbccde1769d25eb77126492849f5fe [file] [log] [blame]
--[[
--This is an example of cli_filter.lua script for Slurm
--More information about Slurm cli_filter:
-- https://slurm.schedmd.com/cli_filter_plugins.html
--To find names of options, take a look at:
-- src/common/slurm_opt.c
--]]
function _find_in_str(str, arg)
if str ~= nil then
local place = string.find(str,arg)
if place == 1
then
return true
else
return false
end
else
return false
end
end
function _verbose_wrapper(options, fmt, ...)
--[[ Implicit definition of arg was removed in Lua 5.2 --]]
local arg = {...}
--[[
-- Logging to client at levels lower than info is only possible for
-- sbatch and scrontab in case of salloc and srun only info and error
-- are displayed.
-- In older versions of Lua - prior to Lua 5.2 you may need to use
-- unpack as a built-in instead of table.unpack
--]]
if options["type"] == "sbatch" or options["type"] == "scrontab" then
slurm.log_verbose(fmt, table.unpack(arg))
else
if options["verbose"] and tonumber(options["verbose"]) >= 1 then
slurm.log_info(fmt, table.unpack(arg))
end
end
end
function slurm_cli_pre_submit(options, pack_offset)
--[[
-- Checks done in cli_filter can be worked around by users switching to different
-- SLURM_CONF or using their own build of tools where call to cli_filter was removed.
--
-- If strict policy enforcement is a requirement than job_submit plugin should be used.
--]]
--[[ Dump environment in JSON format --]]
env_json = slurm.json_env()
_verbose_wrapper(options, "slurm_cli_pre_submit: Running with following environment variables:%s", env_json);
--[[ Dump options set when running (slurmctld default behavior is not shown here) --]]
opt_json = slurm.json_cli_options(options)
_verbose_wrapper(options, "slurm_cli_pre_submit: Running with following options set:%s", opt_json)
--[[ Store a variable for potential use in slurm_cli_post_submit --]]
slurm.cli_store(0,options["type"])
--[[
-- Print an advice message to srun user, to avoid --pty for jobs
-- with time limit higher than 1h
-- The conditional like options["pty"] == "set" used to work
-- in versions of Slurm prior to 23.02
--]]
if options["type"] == "srun" and options["pty"] ~= nil
then
if slurm.time_str2mins(options["time"]) > 60
then
slurm.log_info("Running an interactive job, with --pty emulation shouldn't be used with TimeLimit > 1h.")
end
end
if options["type"] == "sbatch" and options["wrap"] ~= nil
then
slurm.log_error("--wrap option is forbidden");
return slurm.ERROR
end
local script_location = {}
script_location[1] = "/opt/supported_scripts"
script_location[2] = "/opt/supported_scripts2"
local allowed = false
for idx,location in ipairs(script_location)
do
if _find_in_str(options.argv[1], location)
then
allowed = true
break
end
end
if allowed == false
then
slurm.log_error("You have to use scripts from one of:")
for idx, location in ipairs(script_location)
do
slurm.log_error("- %s", location)
end
return slurm.ERROR
end
return slurm.SUCCESS
end
function slurm_cli_setup_defaults(options, early_pass)
--[[
-- Make --hint=nomultithread a default behavior
-- if user specifies other --hint=XX option then
-- it will override the setting done here
--]]
options['hint'] = 'nomultithread'
return slurm.SUCCESS
end
function slurm_cli_post_submit(offset, job_id, step_id)
saved_type = slurm.cli_retrieve(0);
slurm.log_info("Submitted: %d.%d component: %d using: %s", job_id, step_id, offset, saved_type);
return slurm.SUCCESS
end