summaryrefslogtreecommitdiffstats
path: root/provisioning-model.lua
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2011-10-14 13:35:23 +0000
committerTed Trask <ttrask01@yahoo.com>2011-10-14 13:35:23 +0000
commit83657e146b87a2318c6fe0da349c8b54d0efe07f (patch)
treecfe86e9d541611b5119cf1257887a9e029b50c03 /provisioning-model.lua
parentee94e970f43e462f6ad44cbe9ede26ca2471a894 (diff)
downloadacf-provisioning-83657e146b87a2318c6fe0da349c8b54d0efe07f.tar.bz2
acf-provisioning-83657e146b87a2318c6fe0da349c8b54d0efe07f.tar.xz
Added new listrequests, deleterequest, and createdevicefromrequest actions
Diffstat (limited to 'provisioning-model.lua')
-rw-r--r--provisioning-model.lua114
1 files changed, 110 insertions, 4 deletions
diff --git a/provisioning-model.lua b/provisioning-model.lua
index da39fb1..f96da7e 100644
--- a/provisioning-model.lua
+++ b/provisioning-model.lua
@@ -260,7 +260,7 @@ validateparamcoded = function(p, top)
end
local function callscript(script, ...)
- local result, errtxt
+ local result
local env = {}
setmetatable (env, {__index = _G})
-- loadfile loads into the global environment
@@ -269,14 +269,14 @@ local function callscript(script, ...)
local f = loadfile(script)
if f then
local res, err = pcall(function(...)
- result, errtxt = f(functions, ...)
+ result = { f(functions, ...) }
end, ...)
if not res and err then
assert(res, "Exception in "..script.." script\n"..err)
end
end
setfenv (0, _G)
- return result, errtxt
+ return unpack(result)
end
local function validateluacode(code)
@@ -635,7 +635,7 @@ list_classes = function()
-- Get the classes from the DB
local res, err = pcall(function()
local connected = databaseconnect()
- local sql = "SELECT class_id, g.label AS group, c.label, c.seq FROM provisioning_classes c JOIN provisioning_class_groups g USING(class_group_id) ORDER BY g.seq ASC, g.label ASC, c.seq ASC, c.label ASC"
+ local sql = "SELECT class_id, g.label AS group, g.name, c.label, c.seq FROM provisioning_classes c JOIN provisioning_class_groups g USING(class_group_id) ORDER BY g.seq ASC, g.label ASC, c.seq ASC, c.label ASC"
retval = getselectresponse(sql)
if connected then databasedisconnect() end
end)
@@ -1953,3 +1953,109 @@ functions = {
get_device_params=get_device_params,
set_device_params=set_device_params,
}
+
+list_requests = function()
+ local retval = {}
+ local errtxt
+ -- Get the templates from the DB
+ local res, err = pcall(function()
+ local connected = databaseconnect()
+ local sql = "SELECT * FROM provisioning_requests ORDER BY date DESC"
+ retval = getselectresponse(sql)
+ -- Get the corresponding device_id's for each request
+ sql = "SELECT * FROM provisioning_values WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name='mac')"
+ local ids = getselectresponse(sql)
+ local reverseids = {}
+ for i,v in ipairs(ids) do
+ reverseids[v.value] = v.device_id
+ end
+ for i,v in ipairs(retval) do
+ v.device_id = reverseids[v.mac]
+ end
+ if connected then databasedisconnect() end
+ end)
+ if not res and err then
+ errtxt = err
+ end
+
+ return cfe({ type="structure", value=retval, label="List of Requests", errtxt=errtxt })
+end
+
+delete_request = function(mac)
+ local result = ""
+ local errtxt
+ local res, err = pcall(function()
+ local connected = databaseconnect()
+ local sql = "SELECT * FROM provisioning_requests WHERE mac='"..escape(string.upper(mac)).."'"
+ local tmp = getselectresponse(sql)
+ if #tmp == 0 then
+ errtxt = "Request does not exist"
+ else
+ -- Remove the request
+ sql = "DELETE FROM provisioning_requests WHERE mac='"..escape(string.upper(mac)).."'"
+ runsqlcommand(sql)
+ result = "Request Deleted"
+ end
+ if connected then databasedisconnect() end
+ end)
+ if not res and err then
+ errtxt = err
+ end
+
+ return cfe({ value=result, errtxt=errtxt, label="Delete Request Result" })
+end
+
+get_request = function(mac)
+ local retval = {}
+ retval.mac = cfe({ value=mac or "", label="MAC Address" })
+ return cfe({ type="group", value=retval, label="Create Device from Request" })
+end
+
+create_from_request = function(request)
+ success = false
+ local res, err = pcall(function()
+ local connected = databaseconnect()
+ local sql = "SELECT * FROM provisioning_requests WHERE mac='"..escape(string.upper(request.value.mac.value)).."'"
+ local tmp = getselectresponse(sql)
+ if #tmp == 0 then
+ request.value.mac.errtxt = "Request does not exist"
+ else
+ -- Determine which class to use (need a class that specifies a template)
+ local c = list_classes()
+ local class, group = callscript(determineclassscriptfile, tmp[1].agent, c)
+
+ -- Create the device
+ local device = get_device()
+ if class and group and device.value.classes.value[group] then
+ device.value.classes.value[group].value = class
+ end
+ device = create_device(device)
+ if device.errtxt then
+ request.errtxt = device.errtxt
+ else
+ local params = get_device_params(device.value.device_id.value)
+ -- Set the MAC Address
+ if params.value.device and params.value.device.value.mac then
+ params.value.device.value.mac.value = string.upper(request.value.mac.value)
+ params = set_device_params(params)
+ end
+ if params.errtxt then
+ request.errtxt = params.errtxt
+ delete_device(device.value.device_id.value)
+ else
+ success = true
+ request.value.device_id = device.value.device_id
+ end
+ end
+ end
+ if connected then databasedisconnect() end
+ end)
+ if not res and err then
+ request.errtxt = err
+ end
+
+ if not success and not request.errtxt then
+ request.errtxt = "Failed to create device"
+ end
+ return request
+end