diff options
author | Ted Trask <ttrask01@yahoo.com> | 2011-10-14 13:35:23 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2011-10-14 13:35:23 +0000 |
commit | 83657e146b87a2318c6fe0da349c8b54d0efe07f (patch) | |
tree | cfe86e9d541611b5119cf1257887a9e029b50c03 /provisioning-model.lua | |
parent | ee94e970f43e462f6ad44cbe9ede26ca2471a894 (diff) | |
download | acf-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.lua | 114 |
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 |