summaryrefslogtreecommitdiffstats
path: root/rc-model.lua
diff options
context:
space:
mode:
Diffstat (limited to 'rc-model.lua')
-rw-r--r--rc-model.lua72
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