diff options
Diffstat (limited to 'rc-model.lua')
-rw-r--r-- | rc-model.lua | 72 |
1 files changed, 44 insertions, 28 deletions
diff --git a/rc-model.lua b/rc-model.lua index 189d381..c213e1f 100644 --- a/rc-model.lua +++ b/rc-model.lua @@ -1,59 +1,75 @@ module (..., package.seeall) require("processinfo") -require("validator") +require("modelfunctions") +require("fs") +require("posix") + +local configpath = "/etc/runlevels/" +local runlevels = {} +for f in posix.files(configpath) do + if f~="." and f~=".." and fs.is_dir(configpath..f) then + runlevels[#runlevels+1] = f + end +end +table.sort(runlevels) local config status = function() - config = config or processinfo.read_startupsequence() - return cfe({ type="structure", value=config, label="Startup Sequence Status" }) + config = config or processinfo.read_initrunlevels() + return cfe({ type="structure", value=config, label="Init Runlevels" }) end -read_sequence = function(servicename) +read_runlevels = function(servicename) local value = {} value.servicename = cfe({ value=servicename or "", label="Service Name" }) - value.sequence = cfe({ label="Startup Sequence" }) - value.kill = cfe({ type="boolean", value=false, label="Add kill link for shutdown" }) - value.system = cfe({ type="boolean", value=false, label="System init service" }) + value.runlevels = cfe({ type="multi", value={}, label="Service Runlevels", option=runlevels }) -- read in the value for the servicename - config = config or processinfo.read_startupsequence() + config = config or processinfo.read_initrunlevels() for i,conf in ipairs(config) do if conf.servicename == servicename then - value.sequence.value = conf.sequence - value.kill.value = conf.kill - value.system.value = conf.system + value.runlevels.value = conf.runlevels break end end - return cfe({ type="group", value=value, label="Service Startup Sequence"}) + return cfe({ type="group", value=value, label="Service Runlevels"}) end - -update_sequence = function(sequence) - local success = false - sequence.value.servicename.errtxt = "Invalid service" +update_runlevels = function(service) + local success = modelfunctions.validatemulti(service.value.runlevels) + service.value.servicename.errtxt = "Invalid service" for name in posix.files("/etc/init.d") do - if name == sequence.value.servicename.value then + if name == service.value.servicename.value then success = true - sequence.value.servicename.errtxt = nil + service.value.servicename.errtxt = nil end end - if sequence.value.sequence.value ~= "" and not validator.is_integer_in_range(sequence.value.sequence.value, 1, 99) then - success = false - sequence.value.sequence.errtxt = "Invalid sequence number" - end if success then - if sequence.value.sequence.value == "" then - sequence.descr, sequence.errtxt = processinfo.delete_startupsequence(sequence.value.servicename.value) - else - sequence.descr, sequence.errtxt = processinfo.add_startupsequence(sequence.value.servicename.value, sequence.value.sequence.value, sequence.value.kill.value, sequence.value.system.value) + local reverserunlevels = {} + for i,lev in ipairs(service.value.runlevels.value) do + reverserunlevels[lev] = i + end + local delrunlevels = {} + for i,lev in ipairs(runlevels) do + if not reverserunlevels[lev] then + delrunlevels[#delrunlevels+1] = lev + end + end + service.descr = {} + service.errtxt = {} + service.descr[#service.descr+1], service.errtxt[#service.errtxt+1] = processinfo.delete_runlevels(service.value.servicename.value, delrunlevels) + service.descr[#service.descr+1], service.errtxt[#service.errtxt+1] = processinfo.add_runlevels(service.value.servicename.value, service.value.runlevels.value) + service.descr = table.concat(service.descr, "\n") + service.errtxt = table.concat(service.errtxt, "\n") + if service.errtxt and string.find(service.errtxt, "^%s*$") then + service.errtxt = nil end else - sequence.errtxt = "Failed to set sequence" + service.errtxt = "Failed to set runlevels" end - return sequence + return service end |