summaryrefslogtreecommitdiffstats
path: root/acf2/persistence/backends
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-10-15 21:44:52 +0300
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-10-15 21:45:43 +0300
commit7021795e1f73b7e66ffefe7956cf59290c6cdf05 (patch)
tree0cf7fa2e5dd8278758952c2faf5422887834239a /acf2/persistence/backends
parent36c41b8bf5fef1ecd77c6bad1f882eccff959db4 (diff)
downloadaconf-7021795e1f73b7e66ffefe7956cf59290c6cdf05.tar.bz2
aconf-7021795e1f73b7e66ffefe7956cf59290c6cdf05.tar.xz
enabled & status fields for service models
new PM back-end for OpenRC reload configuration only when service running
Diffstat (limited to 'acf2/persistence/backends')
-rw-r--r--acf2/persistence/backends/service.lua32
1 files changed, 32 insertions, 0 deletions
diff --git a/acf2/persistence/backends/service.lua b/acf2/persistence/backends/service.lua
new file mode 100644
index 0000000..2163184
--- /dev/null
+++ b/acf2/persistence/backends/service.lua
@@ -0,0 +1,32 @@
+--[[
+Copyright (c) 2012-2013 Kaarle Ritvanen
+See LICENSE file for license details
+--]]
+
+local rc = require('rc')
+local stringy = require('stringy')
+
+
+local backend = require('acf2.object').class()
+
+function backend:get(path, top)
+ if #path == 1 then return {'enabled', 'status'} end
+ assert(#path == 2)
+ local status = rc.service_status(path[1])
+ if path[2] == 'status' then return status end
+ if path[2] == 'enabled' then return stringy.startswith(status, 'start') end
+end
+
+function backend:set(mods)
+ for _, mod in ipairs(mods) do
+ local path, value = unpack(mod)
+ assert(#path == 2 and path[2] == 'enabled')
+
+ local name = path[1]
+ if value then rc.service_add(name)
+ else rc.service_delete(name) end
+ os.execute('rc-service '..name..' '..(value and 'start' or 'stop'))
+ end
+end
+
+return backend