diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-10-15 21:44:52 +0300 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-10-15 21:45:43 +0300 |
commit | 7021795e1f73b7e66ffefe7956cf59290c6cdf05 (patch) | |
tree | 0cf7fa2e5dd8278758952c2faf5422887834239a /acf2/model/service.lua | |
parent | 36c41b8bf5fef1ecd77c6bad1f882eccff959db4 (diff) | |
download | aconf-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/model/service.lua')
-rw-r--r-- | acf2/model/service.lua | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/acf2/model/service.lua b/acf2/model/service.lua index 2ed84e8..4db634e 100644 --- a/acf2/model/service.lua +++ b/acf2/model/service.lua @@ -3,26 +3,34 @@ Copyright (c) 2012-2013 Kaarle Ritvanen See LICENSE file for license details --]] -local model = require('acf2.model.model') +local fld = require('acf2.model.field') +local new = require('acf2.model.model').new local super = require('acf2.object').super +local pth = require('acf2.path') local DataStore = require('acf2.persistence') return function(name) - local res = model.new() + local res = new() - local function afunc(action) - return function() os.execute('rc-service '..name..' '..action) end + local addr = pth.join('/service', name) + local eaddr = pth.join(addr, 'enabled') + res.enabled = fld.Boolean{addr=eaddr, required=true} + res.status = fld.String{addr=pth.join(addr, 'status')} + + local function is_enabled() return DataStore:get(eaddr) end + local enabled + local function pre() enabled = is_enabled() end + local function post() + if enabled and is_enabled() then + os.execute('rc-service '..name..' reload') + end end - local reload = afunc('reload') function res:init(context) - DataStore:trigger(context.addr, reload) + DataStore:trigger('pre', context.addr, pre) + DataStore:trigger('post', context.addr, post) super(self, res):init(context) end - for _, action in ipairs{'start', 'stop', 'restart'} do - res[action] = model.Action{func=afunc(action)} - end - return res end |