diff options
Diffstat (limited to 'provisioning-model.lua')
-rw-r--r-- | provisioning-model.lua | 463 |
1 files changed, 230 insertions, 233 deletions
diff --git a/provisioning-model.lua b/provisioning-model.lua index 5f18b14..7cf425d 100644 --- a/provisioning-model.lua +++ b/provisioning-model.lua @@ -1,4 +1,4 @@ -module (..., package.seeall) +local mymodule = {} -- Load libraries modelfunctions = require("modelfunctions") @@ -28,11 +28,6 @@ provdb.table_creation_scripts = require("provisioning/provisioning-scripts") local saved_devices = {} local saved_device_params = {} --- declare some private functions up front -local get_device -local get_device_params -local set_device_params - -- ################################################################################ -- LOCAL FUNCTIONS local function assert (v, m) @@ -105,7 +100,7 @@ local databaseconnect = function() -- Let's create all the tables from the start for n,v in pairs(provdb.table_creation_scripts) do if not string.match(n, "^_") then - runsqlcommand("SELECT * FROM "..provdb.escape(n).." LIMIT 1") + mymodule.runsqlcommand("SELECT * FROM "..provdb.escape(n).." LIMIT 1") end end else @@ -116,13 +111,13 @@ local databaseconnect = function() end -- This function is used by scripts, do not change prototype -runsqlcommand = function(sql, transaction) +mymodule.runsqlcommand = function(sql, transaction) logevent(sql) return provdb.runsqlcommand(sql, transaction) end -- This function is used by scripts, do not change prototype -getselectresponse = function(sql, in_transaction) +mymodule.getselectresponse = function(sql, in_transaction) logevent(sql) return provdb.getselectresponse(sql, transaction) end @@ -256,21 +251,21 @@ local checkgroupdefaultoverride = function(device_id) "FROM (devices_to_classes d2t JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING (class_id) JOIN provisioning_groups g USING(group_id) ".. "JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id) JOIN provisioning_values v USING(param_id))".. "WHERE d2t.device_id='"..provdb.escape(device_id).."' AND v.value IS NOT NULL AND g2p.value IS NOT NULL AND v.value!=g2p.value" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) return (#tmp ~= 0) end -- ################################################################################ -- PUBLIC FUNCTIONS -list_templates = function() +mymodule.list_templates = function() local retval = {} local errtxt -- Get the templates from the DB local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT value AS filename, label, seq FROM provisioning_options WHERE param_id = (SELECT param_id FROM provisioning_params WHERE name = 'template') ORDER BY seq ASC, label ASC, value ASC" - retval = getselectresponse(sql) + retval = mymodule.getselectresponse(sql) if connected then provdb.databasedisconnect() end end) if not res and err then @@ -299,7 +294,7 @@ list_templates = function() return cfe({ type="structure", value=retval, label="List of Templates", errtxt=errtxt }) end -get_template = function(self, clientdata) +mymodule.get_template = function(self, clientdata) clientdata = clientdata or {} local filename = clientdata.filename local retval = {} @@ -314,7 +309,7 @@ get_template = function(self, clientdata) local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..provdb.escape(filename).."' ORDER BY seq ASC, label ASC, value ASC" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if tmp and #tmp > 0 then for n,v in pairs(tmp[1]) do if n == "value" then @@ -338,11 +333,11 @@ get_template = function(self, clientdata) return cfe({ type="group", value=retval, label="Provisioning Template", errtxt=errtxt }) end -create_template = function(self, template, action) - return update_template(self, template, action, true) +mymodule.create_template = function(self, template, action) + return mymodule.update_template(self, template, action, true) end -update_template = function(self, template, action, create) +mymodule.update_template = function(self, template, action, create) local success = true local errtxt -- Validate the settings @@ -365,7 +360,7 @@ update_template = function(self, template, action, create) local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..provdb.escape(template.value.filename.value).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if not create and (not tmp or #tmp == 0) then success = false errtxt = "Template does not exist" @@ -379,7 +374,7 @@ update_template = function(self, template, action, create) else sql = "UPDATE provisioning_options SET (label, seq) = ('"..provdb.escape(template.value.label.value).."', '"..provdb.escape(template.value.seq.value).."') WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..provdb.escape(template.value.filename.value).."'" end - runsqlcommand(sql) + mymodule.runsqlcommand(sql) fs.write_file(template.value.filename.value, string.gsub(format.dostounix(template.value.filecontent.value), "\n+$", "")) end @@ -400,26 +395,26 @@ update_template = function(self, template, action, create) return template end -get_delete_template = function(self, clientdata) +mymodule.get_delete_template = function(self, clientdata) clientdata = clientdata or {} local retval = {} retval.filename = cfe({ value=clientdata.filename or "", label="File Name" }) return cfe({ type="group", value=retval, label="Delete Template" }) end -delete_template = function(self, delreq) +mymodule.delete_template = function(self, delreq) local filename = delreq.value.filename.value delreq.errtxt = "Failed to delete template" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..provdb.escape(filename).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if #tmp == 0 then delreq.value.filename.errtxt = "Template does not exist" else -- Remove the template sql = "DELETE FROM provisioning_options WHERE param_id=(SELECT param_id FROM provisioning_params WHERE name = 'template') AND value='"..provdb.escape(filename).."'" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) -- Delete the template file os.remove(filename) delreq.errtxt = nil @@ -433,14 +428,14 @@ delete_template = function(self, delreq) return delreq end -list_class_groups = function() +mymodule.list_class_groups = function() local retval = {} local errtxt -- Get the groups from the DB local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_class_groups ORDER BY seq ASC, label ASC" - retval = getselectresponse(sql) + retval = mymodule.getselectresponse(sql) if connected then provdb.databasedisconnect() end end) if not res and err then @@ -450,7 +445,7 @@ list_class_groups = function() return cfe({ type="structure", value=retval, label="List of Class Groups", errtxt=errtxt }) end -get_class_group = function(self, clientdata) +mymodule.get_class_group = function(self, clientdata) clientdata = clientdata or {} local class_group_id = clientdata.class_group_id local retval = {} @@ -463,7 +458,7 @@ get_class_group = function(self, clientdata) local connected = databaseconnect() if class_group_id and class_group_id ~= "" then sql = "SELECT * FROM provisioning_class_groups WHERE class_group_id='"..provdb.escape(class_group_id).."'" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) if tmp and #tmp > 0 then for n,v in pairs(tmp[1]) do if retval[n] then @@ -483,11 +478,11 @@ get_class_group = function(self, clientdata) return cfe({ type="group", value=retval, label="Provisioning Class Group", errtxt=errtxt }) end -create_class_group = function(self, group, action) - return update_class_group(self, group, action, true) +mymodule.create_class_group = function(self, group, action) + return mymodule.update_class_group(self, group, action, true) end -update_class_group = function(self, group, action, create) +mymodule.update_class_group = function(self, group, action, create) local success = true local errtxt -- Validate the settings @@ -511,7 +506,7 @@ update_class_group = function(self, group, action, create) local connected = databaseconnect() if not create then local sql = "SELECT * FROM provisioning_class_groups WHERE class_group_id='"..provdb.escape(group.value.class_group_id.value).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if not tmp or #tmp == 0 then success = false errtxt = "Group does not exist" @@ -519,12 +514,12 @@ update_class_group = function(self, group, action, create) end if success then local sql = "BEGIN TRANSACTION" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) if create then sql = "INSERT INTO provisioning_class_groups VALUES(DEFAULT, '"..provdb.escape(group.value.name.value).."', '"..provdb.escape(group.value.label.value).."', '"..provdb.escape(group.value.seq.value).."')" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "SELECT class_group_id FROM provisioning_class_groups WHERE label='"..provdb.escape(group.value.label.value).."'" - local tmp = getselectresponse(sql, true) + local tmp = mymodule.getselectresponse(sql, true) if tmp and #tmp>0 then group.value.class_group_id = cfe({value=tmp[1].class_group_id, label="Class Group ID", readonly=true, seq=1}) else @@ -532,11 +527,11 @@ update_class_group = function(self, group, action, create) end else sql = "UPDATE provisioning_class_groups SET (name, label, seq) = ('"..provdb.escape(group.value.name.value).."', '"..provdb.escape(group.value.label.value).."', '"..provdb.escape(group.value.seq.value).."') WHERE class_group_id='"..provdb.escape(group.value.class_group_id.value).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) end sql = "COMMIT" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) end if connected then provdb.databasedisconnect() end end) @@ -556,25 +551,25 @@ update_class_group = function(self, group, action, create) return group end -get_delete_class_group = function(self, clientdata) +mymodule.get_delete_class_group = function(self, clientdata) clientdata = clientdata or {} local retval = {} retval.class_group_id = cfe({ value=clientdata.class_group_id or "", label="Class Group ID" }) return cfe({ type="group", value=retval, label="Delete Class Group" }) end -delete_class_group = function(self, delreq) +mymodule.delete_class_group = function(self, delreq) local class_group_id = delreq.value.class_group_id.value delreq.errtxt = "Failed to delete class group" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_class_groups WHERE class_group_id='"..provdb.escape(class_group_id).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if #tmp == 0 then delreq.value.class_group_id.errtxt = "Group does not exist" else sql = "DELETE FROM provisioning_class_groups WHERE class_group_id='"..provdb.escape(class_group_id).."'" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) delreq.errtxt = nil end if connected then provdb.databasedisconnect() end @@ -586,14 +581,14 @@ delete_class_group = function(self, delreq) return delreq end -list_classes = function() +mymodule.list_classes = function() local retval = {} local errtxt -- Get the classes from the DB local res, err = pcall(function() local connected = databaseconnect() 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) + retval = mymodule.getselectresponse(sql) if connected then provdb.databasedisconnect() end end) if not res and err then @@ -603,7 +598,7 @@ list_classes = function() return cfe({ type="structure", value=retval, label="List of Classes", errtxt=errtxt }) end -get_class = function(self, clientdata) +mymodule.get_class = function(self, clientdata) clientdata = clientdata or {} local class_id = clientdata.class_id local retval = {} @@ -618,7 +613,7 @@ get_class = function(self, clientdata) local connected = databaseconnect() if class_id and class_id ~= "" then local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..provdb.escape(class_id).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if tmp and #tmp > 0 then for n,v in pairs(tmp[1]) do if retval[n] then @@ -628,7 +623,7 @@ get_class = function(self, clientdata) end -- Now, get the class-to-paramgroup mappings sql = "SELECT group_id FROM classes_to_param_groups WHERE class_id='"..provdb.escape(class_id).."'" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) for i,g in ipairs(tmp) do groups[g.group_id] = true end @@ -637,13 +632,13 @@ get_class = function(self, clientdata) end -- Get the class_group_id options sql = "SELECT * from provisioning_class_groups ORDER BY seq ASC, label ASC" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) for i,g in ipairs(tmp) do retval.class_group_id.option[#retval.class_group_id.option + 1] = {value=g.class_group_id, label=g.label} end -- Finally, get the paramgroup options sql = "SELECT group_id, name, label FROM provisioning_groups ORDER BY seq ASC, name ASC" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) for i,g in ipairs(tmp) do if not retval.groups.value[g.name] then retval.groups.value[g.name] = cfe({type="select", label=g.name, option={{value="", label=""}}, seq=i}) @@ -663,11 +658,11 @@ get_class = function(self, clientdata) return cfe({ type="group", value=retval, label="Provisioning Class", errtxt=errtxt }) end -create_class = function(self, class, action) - return update_class(self, class, action, true) +mymodule.create_class = function(self, class, action) + return mymodule.update_class(self, class, action, true) end -update_class = function(self, class, action, create) +mymodule.update_class = function(self, class, action, create) local success = true local errtxt -- Validate the settings @@ -688,7 +683,7 @@ update_class = function(self, class, action, create) local connected = databaseconnect() if not create then local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..provdb.escape(class.value.class_id.value).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if not tmp or #tmp == 0 then success = false errtxt = "Class does not exist" @@ -696,12 +691,12 @@ update_class = function(self, class, action, create) end if success then local sql = "BEGIN TRANSACTION" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) if create then sql = "INSERT INTO provisioning_classes VALUES(DEFAULT, '"..provdb.escape(class.value.class_group_id.value).."', '"..provdb.escape(class.value.label.value).."', '"..provdb.escape(class.value.seq.value).."')" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "SELECT class_id FROM provisioning_classes WHERE class_group_id='"..provdb.escape(class.value.class_group_id.value).."' AND label='"..provdb.escape(class.value.label.value).."'" - local tmp = getselectresponse(sql, true) + local tmp = mymodule.getselectresponse(sql, true) if tmp and #tmp>0 then class.value.class_id = cfe({value=tmp[1].class_id, label="Class ID", readonly=true, seq=1}) else @@ -709,20 +704,20 @@ update_class = function(self, class, action, create) end else sql = "UPDATE provisioning_classes SET (class_group_id, label, seq) = ('"..provdb.escape(class.value.class_group_id.value).."', '"..provdb.escape(class.value.label.value).."', '"..provdb.escape(class.value.seq.value).."') WHERE class_id='"..provdb.escape(class.value.class_id.value).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "DELETE FROM classes_to_param_groups WHERE class_id='"..provdb.escape(class.value.class_id.value).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) end -- Insert the class to group entries for n,g in pairs(class.value.groups.value) do if g.value ~= "" then sql = "INSERT INTO classes_to_param_groups VALUES('"..provdb.escape(class.value.class_id.value).."', '"..provdb.escape(g.value).."')" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) end end sql = "COMMIT" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) end if connected then provdb.databasedisconnect() end end) @@ -742,31 +737,31 @@ update_class = function(self, class, action, create) return class end -get_delete_class = function(self, clientdata) +mymodule.get_delete_class = function(self, clientdata) clientdata = clientdata or {} local retval = {} retval.class_id = cfe({ value=clientdata.class_id or "", label="Class ID" }) return cfe({ type="group", value=retval, label="Delete Class" }) end -delete_class = function(self, delreq) +mymodule.delete_class = function(self, delreq) local class_id = delreq.value.class_id.value delreq.errtxt = "Failed to delete class" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..provdb.escape(class_id).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if #tmp == 0 then delreq.value.class_id.errtxt = "Class does not exist" else sql = "BEGIN TRANSACTION" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) sql = "DELETE FROM classes_to_param_groups WHERE class_id='"..provdb.escape(class_id).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "DELETE FROM provisioning_classes WHERE class_id='"..provdb.escape(class_id).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "COMMIT" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) delreq.errtxt = nil end if connected then provdb.databasedisconnect() end @@ -779,14 +774,14 @@ delete_class = function(self, delreq) return delreq end -list_groups = function() +mymodule.list_groups = function() local retval = {} local errtxt -- Get the groups from the DB local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_groups ORDER BY seq ASC, name ASC, label ASC" - retval = getselectresponse(sql) + retval = mymodule.getselectresponse(sql) if connected then provdb.databasedisconnect() end end) if not res and err then @@ -796,7 +791,7 @@ list_groups = function() return cfe({ type="structure", value=retval, label="List of Parameter Groups", errtxt=errtxt }) end -get_group = function(self, clientdata) +mymodule.get_group = function(self, clientdata) clientdata = clientdata or {} local group_id = clientdata.group_id local retval = {} @@ -812,14 +807,14 @@ get_group = function(self, clientdata) local connected = databaseconnect() -- First, let's get all the parameters to set up the params.options and defaults local sql = "SELECT * FROM provisioning_params ORDER BY seq ASC, name ASC" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) for i,p in ipairs(tmp) do retval.params.option[#retval.params.option + 1] = {value=p.param_id, label=p.label} retval.editable.option[#retval.editable.option + 1] = {value=p.param_id, label=p.label} p.seq = i if p.type == "select" then sql = "SELECT * FROM provisioning_options WHERE param_id='"..provdb.escape(p.param_id).."' ORDER BY seq ASC" - p.option = getselectresponse(sql) or {} + p.option = mymodule.getselectresponse(sql) or {} end if p.type == "boolean" then p.value = (p.value == "true") @@ -829,7 +824,7 @@ get_group = function(self, clientdata) end if group_id and group_id ~= "" then sql = "SELECT * FROM provisioning_groups WHERE group_id='"..provdb.escape(group_id).."'" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) if tmp and #tmp > 0 then for n,v in pairs(tmp[1]) do if retval[n] then @@ -839,7 +834,7 @@ get_group = function(self, clientdata) end -- Now, get the paramgroup-to-param mappings sql = "SELECT * FROM param_groups_to_params WHERE group_id='"..provdb.escape(group_id).."'" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) for i,p in ipairs(tmp) do retval.params.value[#retval.params.value + 1] = p.param_id if (p.editable == "t") then @@ -865,11 +860,11 @@ get_group = function(self, clientdata) return cfe({ type="group", value=retval, label="Provisioning Parameter Group", errtxt=errtxt }) end -create_group = function(self, group, action) - return update_group(self, group, action, true) +mymodule.create_group = function(self, group, action) + return mymodule.update_group(self, group, action, true) end -update_group = function(self, group, action, create) +mymodule.update_group = function(self, group, action, create) local success = true local errtxt -- Validate the settings @@ -904,7 +899,7 @@ update_group = function(self, group, action, create) local devices = {} if not create then local sql = "SELECT * FROM provisioning_groups WHERE group_id='"..provdb.escape(group.value.group_id.value).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if not tmp or #tmp == 0 then success = false errtxt = "Group does not exist" @@ -914,20 +909,20 @@ update_group = function(self, group, action, create) sql = "SELECT d2t.device_id ".. "FROM (devices_to_classes d2t JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING (class_id)) ".. "WHERE t2g.group_id='"..provdb.escape(group.value.group_id.value).."'" - devices = getselectresponse(sql) + devices = mymodule.getselectresponse(sql) -- Make sure the current params are saved for each device for i,d in ipairs(devices) do - if not saved_device_params[d.device_id] then get_device_params(self, d.device_id) end + if not saved_device_params[d.device_id] then mymodule.get_device_params(self, d.device_id) end end end if success then local sql = "BEGIN TRANSACTION" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) if create then sql = "INSERT INTO provisioning_groups VALUES(DEFAULT, '"..provdb.escape(group.value.name.value).."', '"..provdb.escape(group.value.label.value).."', '"..provdb.escape(group.value.seq.value).."')" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "SELECT group_id FROM provisioning_groups WHERE name='"..provdb.escape(group.value.name.value).."' AND label='"..provdb.escape(group.value.label.value).."'" - local tmp = getselectresponse(sql, true) + local tmp = mymodule.getselectresponse(sql, true) if tmp and #tmp>0 then group.value.group_id = cfe({value=tmp[1].group_id, label="Group ID", readonly=true, seq=1}) else @@ -935,9 +930,9 @@ update_group = function(self, group, action, create) end else sql = "UPDATE provisioning_groups SET (name, label, seq) = ('"..provdb.escape(group.value.name.value).."', '"..provdb.escape(group.value.label.value).."', '"..provdb.escape(group.value.seq.value).."') WHERE group_id='"..provdb.escape(group.value.group_id.value).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "DELETE FROM param_groups_to_params WHERE group_id='"..provdb.escape(group.value.group_id.value).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) end -- Reverse the editable table for ease of use below local reverseeditable = {} @@ -953,16 +948,16 @@ update_group = function(self, group, action, create) sql = sql.."null" end sql = sql..", '"..provdb.escape(tostring(reverseeditable[p] ~= nil)).."')" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) end sql = "COMMIT" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) -- Notify the devices that their params might have changed for i,d in ipairs(devices) do local tmp = saved_device_params[d.device_id] - local p = get_device_params(self, d.device_id) + local p = mymodule.get_device_params(self, d.device_id) callscript(self, updatedeviceparamsscriptfile, p, tmp) end end @@ -984,31 +979,31 @@ update_group = function(self, group, action, create) return group end -get_delete_group = function(self, clientdata) +mymodule.get_delete_group = function(self, clientdata) clientdata = clientdata or {} local retval = {} retval.group_id = cfe({ value=clientdata.group_id or "", label="Group ID" }) return cfe({ type="group", value=retval, label="Delete Group" }) end -delete_group = function(self, delreq) +mymodule.delete_group = function(self, delreq) local group_id = delreq.value.group_id.value delreq.errtxt = "Failed to delete parameter group" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_groups WHERE group_id='"..provdb.escape(group_id).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if #tmp == 0 then delreq.value.group_id.errtxt = "Group does not exist" else sql = "BEGIN TRANSACTION" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) sql = "DELETE FROM param_groups_to_params WHERE group_id='"..provdb.escape(group_id).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "DELETE FROM provisioning_groups WHERE group_id='"..provdb.escape(group_id).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "COMMIT" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) delreq.errtxt = nil end if connected then provdb.databasedisconnect() end @@ -1021,14 +1016,14 @@ delete_group = function(self, delreq) return delreq end -list_params = function() +mymodule.list_params = function() local retval = {} local errtxt -- Get the params from the DB local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_params ORDER BY seq ASC, name ASC, label ASC" - retval = getselectresponse(sql) + retval = mymodule.getselectresponse(sql) if connected then provdb.databasedisconnect() end end) if not res and err then @@ -1038,7 +1033,7 @@ list_params = function() return cfe({ type="structure", value=retval, label="List of Parameters", errtxt=errtxt }) end -get_param = function(self, clientdata) +mymodule.get_param = function(self, clientdata) clientdata = clientdata or {} local param_id = clientdata.param_id local retval = {} @@ -1056,7 +1051,7 @@ get_param = function(self, clientdata) local connected = databaseconnect() if param_id and param_id ~= "" then sql = "SELECT * FROM provisioning_params WHERE param_id='"..provdb.escape(param_id).."'" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) if tmp and #tmp > 0 then for n,v in pairs(tmp[1]) do if retval[n] then @@ -1076,11 +1071,11 @@ get_param = function(self, clientdata) return cfe({ type="group", value=retval, label="Provisioning Parameter", errtxt=errtxt }) end -create_param = function(self, param, action) - return update_param(self, param, action, true) +mymodule.create_param = function(self, param, action) + return mymodule.update_param(self, param, action, true) end -update_param = function(self, param, action, create) +mymodule.update_param = function(self, param, action, create) local success = true local errtxt -- Validate the settings @@ -1111,7 +1106,7 @@ update_param = function(self, param, action, create) local devices = {} if not create then local sql = "SELECT * FROM provisioning_params WHERE param_id='"..provdb.escape(param.value.param_id.value).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if not tmp or #tmp == 0 then success = false errtxt = "Param does not exist" @@ -1121,20 +1116,20 @@ update_param = function(self, param, action, create) sql = "SELECT d2t.device_id FROM (devices_to_classes d2t JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING (class_id) ".. "JOIN provisioning_groups g USING(group_id) JOIN param_groups_to_params g2p USING(group_id))".. "WHERE g2p.param_id='"..provdb.escape(param.value.param_id.value).."'" - devices = getselectresponse(sql) + devices = mymodule.getselectresponse(sql) -- Make sure the current params are saved for each device for i,d in ipairs(devices) do - if not saved_device_params[d.device_id] then get_device_params(self, d.device_id) end + if not saved_device_params[d.device_id] then mymodule.get_device_params(self, d.device_id) end end end if success then local sql = "BEGIN TRANSACTION" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) if create then sql = "INSERT INTO provisioning_params VALUES(DEFAULT, '"..provdb.escape(param.value.name.value).."', '"..provdb.escape(param.value.type.value).."', '"..provdb.escape(param.value.label.value).."', '"..provdb.escape(param.value.descr.value).."', '"..provdb.escape(param.value.value.value).."', '"..provdb.escape(param.value.seq.value).."', '"..provdb.escape(param.value.regexp.value).."', '"..provdb.escape(format.dostounix(param.value.validate.value)).."')" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "SELECT param_id FROM provisioning_params WHERE name='"..provdb.escape(param.value.name.value).."' AND label='"..provdb.escape(param.value.label.value).."'" - local tmp = getselectresponse(sql, true) + local tmp = mymodule.getselectresponse(sql, true) if tmp and #tmp>0 then param.value.param_id = cfe({value=tmp[1].param_id, label="Param ID", readonly=true, seq=1}) else @@ -1142,16 +1137,16 @@ update_param = function(self, param, action, create) end else sql = "UPDATE provisioning_params SET (name, type, label, descr, value, seq, regexp, validate) = ('"..provdb.escape(param.value.name.value).."', '"..provdb.escape(param.value.type.value).."', '"..provdb.escape(param.value.label.value).."', '"..provdb.escape(param.value.descr.value).."', '"..provdb.escape(param.value.value.value).."', '"..provdb.escape(param.value.seq.value).."', '"..provdb.escape(param.value.regexp.value).."', '"..provdb.escape(format.dostounix(param.value.validate.value)).."') WHERE param_id='"..provdb.escape(param.value.param_id.value).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) end sql = "COMMIT" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) -- Notify the devices that their params might have changed for i,d in ipairs(devices) do local tmp = saved_device_params[d.device_id] - local p = get_device_params(self, d.device_id) + local p = mymodule.get_device_params(self, d.device_id) callscript(self, updatedeviceparamsscriptfile, p, tmp) end end @@ -1173,31 +1168,31 @@ update_param = function(self, param, action, create) return param end -get_delete_param = function(self, clientdata) +mymodule.get_delete_param = function(self, clientdata) clientdata = clientdata or {} local retval = {} retval.param_id = cfe({ value=clientdata.param_id or "", label="Param ID" }) return cfe({ type="group", value=retval, label="Delete Param" }) end -delete_param = function(self, delreq) +mymodule.delete_param = function(self, delreq) local param_id = delreq.value.param_id.value delreq.errtxt = "Failed to delete parameter" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_params WHERE param_id='"..provdb.escape(param_id).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if #tmp == 0 then delreq.value.param_id.errtxt = "Parameter does not exist" else sql = "BEGIN TRANSACTION" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) sql = "DELETE FROM provisioning_options WHERE param_id='"..provdb.escape(param_id).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "DELETE FROM provisioning_params WHERE param_id='"..provdb.escape(param_id).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "COMMIT" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) delreq.errtxt = nil end if connected then provdb.databasedisconnect() end @@ -1210,14 +1205,14 @@ delete_param = function(self, delreq) return delreq end -list_devices = function() +mymodule.list_devices = function() local retval = {} local errtxt -- Get the devices from the DB local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT device_id, c.label AS class, g.label AS group FROM devices_to_classes d2c JOIN provisioning_classes c USING(class_id) JOIN provisioning_class_groups g USING(class_group_id) ORDER BY device_id" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) local reverse_device_id = {} for i,d in ipairs(tmp) do if not reverse_device_id[d.device_id] then @@ -1235,18 +1230,18 @@ list_devices = function() return cfe({ type="structure", value=retval, label="List of Devices", errtxt=errtxt }) end -get_existing_device = function(self, clientdata) +mymodule.get_existing_device = function(self, clientdata) clientdata = clientdata or {} - return get_device(self, clientdata.device_id, false) + return mymodule.get_device(self, clientdata.device_id, false) end -get_new_device = function(self, clientdata) +mymodule.get_new_device = function(self, clientdata) clientdata = clientdata or {} - return get_device(self, clientdata.device_id, true) + return mymodule.get_device(self, clientdata.device_id, true) end -- This function is used by scripts, do not change prototype -get_device = function(self, device_id, create) +mymodule.get_device = function(self, device_id, create) local retval = {} retval.device_id = cfe({value=device_id or "", label="Device ID", seq=1}) retval.classes = cfe({type="group", value={}, label="Classes", seq=2}) @@ -1257,14 +1252,14 @@ get_device = function(self, device_id, create) if not create and device_id and device_id ~= "" then -- Get the device-to-class mappings local sql = "SELECT class_id FROM devices_to_classes WHERE device_id='"..provdb.escape(device_id).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) for i,g in ipairs(tmp) do classes[g.class_id] = true end end -- Finally, get the class options sql = "SELECT class_id, g.name, 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" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) for i,c in ipairs(tmp) do if not retval.classes.value[c.name] then retval.classes.value[c.name] = cfe({type="select", label=c.group, option={{value="", label=""}}, seq=i}) @@ -1287,11 +1282,11 @@ get_device = function(self, device_id, create) return output end -create_device = function(self, device, action) - return update_device(self, device, action, true) +mymodule.create_device = function(self, device, action) + return mymodule.update_device(self, device, action, true) end -update_device = function(self, device, action, create) +mymodule.update_device = function(self, device, action, create) local success = true local errtxt -- Validate the settings @@ -1308,40 +1303,40 @@ update_device = function(self, device, action, create) local connected = databaseconnect() if not create then local sql = "SELECT * FROM devices_to_classes WHERE device_id='"..provdb.escape(device.value.device_id.value).."' LIMIT 1" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if not tmp or #tmp == 0 then success = false device.value.device_id.errtxt = "Device does not exist" end end if success then - if not saved_devices[device.value.device_id.value] then get_device(self, device.value.device_id.value) end - if not saved_device_params[device.value.device_id.value] then get_device_params(self, device.value.device_id.value) end + if not saved_devices[device.value.device_id.value] then mymodule.get_device(self, device.value.device_id.value) end + if not saved_device_params[device.value.device_id.value] then mymodule.get_device_params(self, device.value.device_id.value) end local sql = "BEGIN TRANSACTION" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) if create then sql = "SELECT nextval('provisioning_device_seq')" - local tmp = getselectresponse(sql, true) + local tmp = mymodule.getselectresponse(sql, true) if tmp and #tmp>0 then device.value.device_id.value = tmp[1].nextval end end sql = "DELETE FROM devices_to_classes WHERE device_id='"..provdb.escape(device.value.device_id.value).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) -- Insert the device to class entries for n,c in pairs(device.value.classes.value) do if c.value ~= "" then sql = "INSERT INTO devices_to_classes VALUES('"..provdb.escape(device.value.device_id.value).."', '"..provdb.escape(c.value).."')" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) end end sql = "COMMIT" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) local s = saved_device_params[device.value.device_id.value] - callscript(self, updatedevicescriptfile, device, saved_devices[device.value.device_id.value], get_device_params(self, device.value.device_id.value), s) + callscript(self, updatedevicescriptfile, device, saved_devices[device.value.device_id.value], mymodule.get_device_params(self, device.value.device_id.value), s) saved_devices[device.value.device_id.value] = device end if connected then provdb.databasedisconnect() end @@ -1362,34 +1357,34 @@ update_device = function(self, device, action, create) return device end -get_delete_device = function(self, clientdata) +mymodule.get_delete_device = function(self, clientdata) clientdata = clientdata or {} local retval = {} retval.device_id = cfe({ value=clientdata.device_id or "", label="Device ID" }) return cfe({ type="group", value=retval, label="Delete Device" }) end -delete_device = function(self, delreq) +mymodule.delete_device = function(self, delreq) local device_id = delreq.value.device_id.value delreq.errtxt = "Failed to delete device" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM devices_to_classes WHERE device_id='"..provdb.escape(device_id).."' LIMIT 1" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if #tmp == 0 then delreq.value.device_id.errtxt = "Device does not exist" else - if not saved_device_params[device_id] then get_device_params(self, device_id) end - if not saved_devices[device_id] then get_device(self, device_id) end + if not saved_device_params[device_id] then mymodule.get_device_params(self, device_id) end + if not saved_devices[device_id] then mymodule.get_device(self, device_id) end sql = "BEGIN TRANSACTION" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) sql = "DELETE FROM provisioning_values WHERE device_id='"..provdb.escape(device_id).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "DELETE FROM devices_to_classes WHERE device_id='"..provdb.escape(device_id).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) sql = "COMMIT" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) delreq.errtxt = nil callscript(self, deletedevicescriptfile, saved_devices[device_id], saved_device_params[device_id]) @@ -1406,18 +1401,18 @@ delete_device = function(self, delreq) return delreq end -get_editable_device_params = function(self, clientdata, action) +mymodule.get_editable_device_params = function(self, clientdata, action) clientdata = clientdata or {} - return get_device_params(self, clientdata.device_id, true) + return mymodule.get_device_params(self, clientdata.device_id, true) end -get_all_device_params = function(self, clientdata, action) +mymodule.get_all_device_params = function(self, clientdata, action) clientdata = clientdata or {} - return get_device_params(self, clientdata.device_id, false) + return mymodule.get_device_params(self, clientdata.device_id, false) end -- This function is used by scripts, do not change prototype -get_device_params = function(self, device_id, editable) +mymodule.get_device_params = function(self, device_id, editable) local retval = {} retval.device_id = cfe({value=device_id or "", label="Device ID", seq=0}) local errtxt = "Cannot find device" @@ -1426,12 +1421,12 @@ get_device_params = function(self, device_id, editable) local connected = databaseconnect() -- First, just check to see if device_id exists local sql = "SELECT * FROM devices_to_classes WHERE device_id='"..provdb.escape(device_id).."' LIMIT 1" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if tmp and #tmp > 0 then errtxt = nil -- Next, get all of the param groups sql = "SELECT * FROM provisioning_groups" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) -- Loop through the groups and put them into the result for i,g in ipairs(tmp) do retval[g.name] = g @@ -1446,13 +1441,13 @@ get_device_params = function(self, device_id, editable) if editable then sql = sql.." AND g2p.editable='t'" end - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) -- Loop through the params to figure out options and put them into the groups for i,p in ipairs(tmp) do -- Options if (p.type == "select") then sql = "SELECT * FROM provisioning_options WHERE param_id='"..provdb.escape(p.param_id).."' ORDER BY seq ASC" - p.option = getselectresponse(sql) or {} + p.option = mymodule.getselectresponse(sql) or {} end -- Groups if not retval[p.group].value then @@ -1491,7 +1486,7 @@ get_device_params = function(self, device_id, editable) return output end -get_class_options = function(self, clientdata) +mymodule.get_class_options = function(self, clientdata) clientdata = clientdata or {} local class_id = clientdata.class_id local retval = {} @@ -1499,7 +1494,7 @@ get_class_options = function(self, clientdata) return cfe({ type="group", value=retval, label="Provisioning Class Values" }) end -get_class_values = function(self, retval) +mymodule.get_class_values = function(self, retval) retval.errtxt = "Failed to find class" if not validator.is_integer(retval.value.class_id.value) then retval.value.class_id.errtxt = "Invalid class ID" @@ -1508,7 +1503,7 @@ get_class_values = function(self, retval) local connected = databaseconnect() -- First, just check to see if class_id exists local sql = "SELECT * FROM provisioning_classes WHERE class_id='"..provdb.escape(retval.value.class_id.value).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if tmp and #tmp > 0 then retval.errtxt = nil retval.value.label = cfe({ value=tmp[1].label or "", label="Label", seq=3}) @@ -1518,7 +1513,7 @@ get_class_values = function(self, retval) "FROM (provisioning_classes t JOIN classes_to_param_groups t2g USING(class_id) JOIN provisioning_groups g USING(group_id) ".. "JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id)) ".. "WHERE t.class_id='"..provdb.escape(retval.value.class_id.value).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) -- Loop through the params and put them into the groups for i,p in ipairs(tmp) do if p.type == "boolean" then @@ -1542,16 +1537,16 @@ get_class_values = function(self, retval) return retval end -set_editable_device_params = function(self, params) - return set_device_params(self, params, true) +mymodule.set_editable_device_params = function(self, params) + return mymodule.set_device_params(self, params, true) end -set_all_device_params = function(self, params) - return set_device_params(self, params, false) +mymodule.set_all_device_params = function(self, params) + return mymodule.set_device_params(self, params, false) end -- This function is used by scripts, do not change prototype -set_device_params = function(self, params, editable) +mymodule.set_device_params = function(self, params, editable) -- Validate the settings local success = validateparam(params) local errtxt @@ -1560,20 +1555,20 @@ set_device_params = function(self, params, editable) local connected = databaseconnect() success = validateparamcoded(self, params) local sql = "SELECT * FROM devices_to_classes WHERE device_id='"..provdb.escape(params.value.device_id.value).."' LIMIT 1" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if not tmp or #tmp == 0 then success = false errtxt = "Device does not exist" end if success then - if not saved_device_params[params.value.device_id.value] then get_device_params(self, params.value.device_id.value) end + if not saved_device_params[params.value.device_id.value] then mymodule.get_device_params(self, params.value.device_id.value) end local sql = "BEGIN TRANSACTION" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) if not editable then -- Delete all values for this device (can't do this if only updating editable) sql = "DELETE FROM provisioning_values WHERE device_id='"..provdb.escape(params.value.device_id.value).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) end -- Loop through the groups and params for group,v in pairs(params.value) do @@ -1581,25 +1576,25 @@ set_device_params = function(self, params, editable) for name,param in pairs(v.value) do if editable then sql = "DELETE FROM provisioning_values WHERE device_id='"..provdb.escape(params.value.device_id.value).."' AND group_name='"..provdb.escape(group).."' AND param_id='"..provdb.escape(param.param_id).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) end if param.value ~= param.default then sql = "INSERT INTO provisioning_values VALUES('"..provdb.escape(params.value.device_id.value).."', '"..provdb.escape(group).."', '"..provdb.escape(param.param_id).."', '"..provdb.escape(tostring(param.value)).."')" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) end end end end sql = "COMMIT" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) local tmp = saved_device_params[params.value.device_id.value] local p = params if not editable then saved_device_params[params.value.device_id.value] = params else - p = get_device_params(self, params.value.device_id.value) + p = mymodule.get_device_params(self, params.value.device_id.value) end callscript(self, updatedeviceparamsscriptfile, p, tmp) end @@ -1617,10 +1612,10 @@ set_device_params = function(self, params, editable) return params end -fetch_device_values = function(self, search) +mymodule.fetch_device_values = function(self, search) local res, err = pcall(function() local connected = databaseconnect() - search = search_device_values(self, search) + search = mymodule.search_device_values(self, search) if search.errtxt then -- Just return the error elseif #search.value.result.value == 0 then @@ -1628,7 +1623,7 @@ fetch_device_values = function(self, search) elseif #search.value.result.value > 1 then search.errtxt = "Multiple devices found" else - search.value.values = get_device_values(self, search.value.result.value[1].device_id) + search.value.values = mymodule.get_device_values(self, search.value.result.value[1].device_id) search.value.values.seq = 5 end if connected then provdb.databasedisconnect() end @@ -1641,7 +1636,7 @@ fetch_device_values = function(self, search) return search end -get_device_values = function(self, device_id) +mymodule.get_device_values = function(self, device_id) local retval = {} local errtxt if device_id and device_id ~= "" then @@ -1651,7 +1646,7 @@ get_device_values = function(self, device_id) "FROM (devices_to_classes d2t JOIN provisioning_classes t USING(class_id) JOIN classes_to_param_groups t2g USING(class_id) JOIN provisioning_groups g USING(group_id) ".. "JOIN param_groups_to_params g2p USING(group_id) JOIN provisioning_params p USING(param_id)) LEFT JOIN provisioning_values v ON(d2t.device_id=v.device_id AND p.param_id=v.param_id AND g.name=v.group_name ) ".. "WHERE d2t.device_id='"..provdb.escape(device_id).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) -- Loop through the params and put them into the groups for i,p in ipairs(tmp) do if p.type == "boolean" then @@ -1674,7 +1669,7 @@ get_device_values = function(self, device_id) return cfe({type="structure", value=retval, label="Parameter Values", errtxt=errtxt}) end -get_search_options = function() +mymodule.get_search_options = function() local errtxt retval = {} retval.id = cfe({type="select", value="device_id", label="Parameter", option={"device_id"}, seq=1}) @@ -1684,7 +1679,7 @@ get_search_options = function() local connected = databaseconnect() -- Get the group/parameter options local sql = "SELECT g.name AS group_name, p.name AS param_name FROM provisioning_groups g JOIN param_groups_to_params USING(group_id) JOIN provisioning_params p USING(param_id) GROUP BY g.name, p.name ORDER BY g.name ASC, p.name ASC" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) local blankopt = {} local blankexists = {} for i,v in ipairs(tmp) do @@ -1706,7 +1701,7 @@ get_search_options = function() return cfe({type="group", value=retval, label="Device Search", errtxt=errtxt}) end -search_device_values = function(self, search) +mymodule.search_device_values = function(self, search) local success = true success = modelfunctions.validateselect(search.value.id) and success success = modelfunctions.validateselect(search.value.comparison) and success @@ -1743,7 +1738,7 @@ search_device_values = function(self, search) sql = sql.." p.name='"..provdb.escape(param).."' AND CASE WHEN v.value IS NOT NULL THEN v.value WHEN g2p.value IS NOT NULL THEN g2p.value ELSE p.value END"..provdb.escape(search.value.comparison.value).."'"..provdb.escape(search.value.value.value).."'" end sql = sql.." ORDER BY d2t.device_id ASC" - search.value.result.value = getselectresponse(sql) + search.value.result.value = mymodule.getselectresponse(sql) if connected then provdb.databasedisconnect() end end) if not res and err then @@ -1755,7 +1750,7 @@ search_device_values = function(self, search) return search end -get_param_options = function(self, clientdata) +mymodule.get_param_options = function(self, clientdata) clientdata = clientdata or {} local param_id = clientdata.param_id local retval = {} @@ -1769,14 +1764,14 @@ get_param_options = function(self, clientdata) local connected = databaseconnect() -- First, just check to see if param_id exists local sql = "SELECT * FROM provisioning_params WHERE param_id='"..provdb.escape(param_id).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if tmp and #tmp > 0 then errtxt = nil retval.name.value = tmp[1].name retval.label.value = tmp[1].label -- Next, get all of the param options sql = "SELECT * FROM provisioning_options WHERE param_id='"..provdb.escape(param_id).."' ORDER BY seq ASC" - local tmp = getselectresponse(sql) or {} + local tmp = mymodule.getselectresponse(sql) or {} for i,t in ipairs(tmp) do retval.options.value[#retval.options.value + 1] = t.value..","..t.label end @@ -1790,7 +1785,7 @@ get_param_options = function(self, clientdata) return cfe({ type="group", value=retval, label="Provisioning Parameter Options", errtxt=errtxt }) end -set_param_options = function(self, options) +mymodule.set_param_options = function(self, options) local success = true local errtxt -- Validate the settings @@ -1799,17 +1794,17 @@ set_param_options = function(self, options) local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_params WHERE param_id='"..provdb.escape(options.value.param_id.value).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if not tmp or #tmp == 0 then success = false errtxt = "Parameter does not exist" end if success then local sql = "BEGIN TRANSACTION" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) -- Delete all options for this device sql = "DELETE FROM provisioning_options WHERE param_id='"..provdb.escape(options.value.param_id.value).."'" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) -- Loop through the options for i,o in ipairs(options.value.options.value) do local v,l = string.match(o, "^%s*([^,]+),%s*(.*%S)%s*$") @@ -1820,10 +1815,10 @@ set_param_options = function(self, options) l = v end sql = "INSERT INTO provisioning_options VALUES('"..provdb.escape(options.value.param_id.value).."', '"..provdb.escape(l).."', '"..provdb.escape(v).."', '"..i.."')" - runsqlcommand(sql, true) + mymodule.runsqlcommand(sql, true) end sql = "COMMIT" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) end if connected then provdb.databasedisconnect() end end) @@ -1839,16 +1834,16 @@ set_param_options = function(self, options) return options end -function get_filedetails(self, clientdata) +function mymodule.get_filedetails(self, clientdata) clientdata = clientdata or {} return modelfunctions.getfiledetails(clientdata.filename, scriptfiles) end -function update_filedetails(self, filedetails) +function mymodule.update_filedetails(self, filedetails) return modelfunctions.setfiledetails(self, filedetails, scriptfiles, validatefiledetails) end -function list_files() +function mymodule.list_files() local retval = {} for i,file in ipairs(scriptfiles) do local details = fs.stat(file) or {} @@ -1859,61 +1854,61 @@ function list_files() return cfe({ type="structure", value=retval, label="List of Provisioning Script files" }) end -function get_database() +function mymodule.get_database() local devices = cfe({ type="boolean", value=false, label="Include Device Data" }) return cfe({ type="group", value={devices=devices}, label="Provisioning Database Dump" }) end -function dump_database(self, db) +function mymodule.dump_database(self, db) local res, err = pcall(function() local connected = databaseconnect() local lines = {} local sql = "SELECT name, label, seq FROM provisioning_class_groups ORDER BY name, label" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) for i,t in ipairs(tmp) do lines[#lines+1] = "INSERT INTO provisioning_class_groups VALUES(default, '"..provdb.escape(t.name).."', '"..provdb.escape(t.label).."', '"..provdb.escape(t.seq).."');" end sql = "SELECT g.name AS group, c.label, c.seq FROM provisioning_classes c JOIN provisioning_class_groups g USING(class_group_id) ORDER BY g.name, c.label" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) for i,t in ipairs(tmp) do lines[#lines+1] = "INSERT INTO provisioning_classes VALUES(default, (SELECT class_group_id FROM provisioning_class_groups WHERE name='"..provdb.escape(t.group).."'), '"..provdb.escape(t.label).."', '"..provdb.escape(t.seq).."');" end sql = "SELECT name, label, seq FROM provisioning_groups ORDER BY name, label" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) for i,t in ipairs(tmp) do lines[#lines+1] = "INSERT INTO provisioning_groups VALUES(default, '"..provdb.escape(t.name).."', '"..provdb.escape(t.label).."', '"..provdb.escape(t.seq).."');" end sql = "SELECT name, type, label, descr, value, seq, regexp, validate FROM provisioning_params ORDER BY name" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) for i,t in ipairs(tmp) do lines[#lines+1] = "INSERT INTO provisioning_params VALUES(default, '"..provdb.escape(t.name).."', '"..provdb.escape(t.type).."', '"..provdb.escape(t.label).."', '"..provdb.escape(t.descr).."', '"..provdb.escape(t.value).."', '"..provdb.escape(t.seq).."', '"..provdb.escape(t.regexp).."', '"..provdb.escape(t.validate).."');" end sql = "SELECT p.name AS param, o.label, o.value, o.seq FROM provisioning_options o JOIN provisioning_params p USING(param_id) ORDER BY p.name, o.seq, o.label" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) for i,t in ipairs(tmp) do lines[#lines+1] = "INSERT INTO provisioning_options VALUES((SELECT param_id FROM provisioning_params WHERE name='"..provdb.escape(t.param).."'), '"..provdb.escape(t.label).."', '"..provdb.escape(t.value).."', '"..provdb.escape(t.seq).."');" end sql = "SELECT c.label AS class, g.label AS group FROM provisioning_classes c JOIN classes_to_param_groups USING(class_id) JOIN provisioning_groups g USING(group_id) ORDER BY c.label, g.label" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) for i,t in ipairs(tmp) do lines[#lines+1] = "INSERT INTO classes_to_param_groups VALUES((SELECT class_id FROM provisioning_classes WHERE label='"..provdb.escape(t.class).."'), (SELECT group_id FROM provisioning_groups WHERE label='"..provdb.escape(t.group).."'));" end sql = "SELECT p.name AS param, g.label AS group, t.value, t.editable FROM provisioning_params p JOIN param_groups_to_params t USING(param_id) JOIN provisioning_groups g USING(group_id) ORDER BY p.name, g.label" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) for i,t in ipairs(tmp) do lines[#lines+1] = "INSERT INTO param_groups_to_params VALUES((SELECT group_id FROM provisioning_groups WHERE label='"..provdb.escape(t.group).."'), (SELECT param_id FROM provisioning_params WHERE name='"..provdb.escape(t.param).."'), '"..provdb.escape(t.value).."', '"..provdb.escape(t.editable).."');" end if db.value.devices and db.value.devices.value then sql = "SELECT device_id FROM devices_to_classes GROUP BY device_id ORDER BY device_id ASC" - devices = getselectresponse(sql) + devices = mymodule.getselectresponse(sql) for i,d in ipairs(devices) do sql = "SELECT label FROM devices_to_classes JOIN provisioning_classes USING(class_id) WHERE device_id='"..provdb.escape(d.device_id).."'" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) for j,t in ipairs(tmp) do lines[#lines+1] = "INSERT INTO devices_to_classes VALUES("..provdb.escape(i)..", (SELECT class_id FROM provisioning_classes WHERE label='"..provdb.escape(t.label).."'));" end sql = "SELECT group_name, p.name AS param, v.value FROM provisioning_values v JOIN provisioning_params p USING(param_id) WHERE device_id='"..provdb.escape(d.device_id).."'" - tmp = getselectresponse(sql) + tmp = mymodule.getselectresponse(sql) for j,t in ipairs(tmp) do lines[#lines+1] = "INSERT INTO provisioning_values VALUES("..provdb.escape(i)..", '"..provdb.escape(t.group_name).."', (SELECT param_id FROM provisioning_params WHERE name='"..provdb.escape(t.param).."'), '"..provdb.escape(t.value).."');" end @@ -1929,7 +1924,7 @@ function dump_database(self, db) return db end -function get_file(self, clientdata) +function mymodule.get_file(self, clientdata) clientdata = clientdata or {} local mac = clientdata.mac local ip = clientdata.ip @@ -1947,30 +1942,30 @@ function get_file(self, clientdata) -- Add the device to the table of requests local sql = "SELECT * FROM provisioning_requests WHERE mac='"..provdb.escape(string.upper(mac)).."'" - local requests = getselectresponse(sql) + local requests = mymodule.getselectresponse(sql) if requests and #requests > 0 then sql = "UPDATE provisioning_requests SET ip='"..provdb.escape(ip).."', agent='"..provdb.escape(agent).."', date=now() WHERE mac='"..provdb.escape(string.upper(mac)).."'" else sql = "INSERT INTO provisioning_requests VALUES('"..provdb.escape(string.upper(mac)).."', '"..provdb.escape(ip).."', '"..provdb.escape(agent).."', now())" end - runsqlcommand(sql) + mymodule.runsqlcommand(sql) -- Now, let's see if this device exists - result = get_search_options() + result = mymodule.get_search_options() result.value.id.value = "device.mac" result.value.value.value = string.upper(mac) - result = fetch_device_values(self, result) + result = mymodule.fetch_device_values(self, result) -- If can't find the device, return a file with default settings if #result.value.result.value == 0 then -- Determine which class to use (need a class that specifies a template) - local c = list_classes() + local c = mymodule.list_classes() local class = callscript(self, determineclassscriptfile, agent, c) if class then - local options = get_class_options(self, {}) + local options = mymodule.get_class_options(self, {}) options.value.class_id.value = class - result = get_class_values(self, options) + result = mymodule.get_class_values(self, options) else result.errtxt = "Unknown device" end @@ -1985,7 +1980,7 @@ function get_file(self, clientdata) return result end -function put_file(self, clientdata) +function mymodule.put_file(self, clientdata) clientdata = clientdata or {} local mac = clientdata.mac local data = clientdata.data @@ -2001,10 +1996,10 @@ function put_file(self, clientdata) local connected = databaseconnect() -- Now, let's see if this device exists - local search = get_search_options() + local search = mymodule.get_search_options() search.value.id.value = "device.mac" search.value.value.value = string.upper(mac) - search = search_device_values(self, search) + search = mymodule.search_device_values(self, search) if search.errtxt then retval.errtxt = search.errtxt elseif #search.value.result.value == 0 then @@ -2024,17 +2019,17 @@ function put_file(self, clientdata) return retval end -list_requests = function() +mymodule.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) + retval = mymodule.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 ids = mymodule.getselectresponse(sql) local reverseids = {} for i,v in ipairs(ids) do reverseids[v.value] = v.device_id @@ -2051,26 +2046,26 @@ list_requests = function() return cfe({ type="structure", value=retval, label="List of Requests", errtxt=errtxt }) end -get_delete_request = function(self, clientdata) +mymodule.get_delete_request = function(self, clientdata) clientdata = clientdata or {} local retval = {} retval.mac = cfe({ value=clientdata.mac or "", label="MAC Address" }) return cfe({ type="group", value=retval, label="Delete Request" }) end -delete_request = function(self, delreq) +mymodule.delete_request = function(self, delreq) local mac = delreq.value.mac.value delreq.errtxt = "Failed to delete request" local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_requests WHERE mac='"..provdb.escape(string.upper(mac)).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.getselectresponse(sql) if #tmp == 0 then delreq.value.mac.errtxt = "Request does not exist" else -- Remove the request sql = "DELETE FROM provisioning_requests WHERE mac='"..provdb.escape(string.upper(mac)).."'" - runsqlcommand(sql) + mymodule.runsqlcommand(sql) delreq.errtxt = nil end if connected then provdb.databasedisconnect() end @@ -2082,7 +2077,7 @@ delete_request = function(self, delreq) return delreq end -get_request = function(self, clientdata) +mymodule.get_request = function(self, clientdata) clientdata = clientdata or {} local mac = clientdata.mac local retval = {} @@ -2090,24 +2085,24 @@ get_request = function(self, clientdata) return cfe({ type="group", value=retval, label="Create Device from Request" }) end -create_from_request = function(self, request) +mymodule.create_from_request = function(self, request) success = false local res, err = pcall(function() local connected = databaseconnect() local sql = "SELECT * FROM provisioning_requests WHERE mac='"..provdb.escape(string.upper(request.value.mac.value)).."'" - local tmp = getselectresponse(sql) + local tmp = mymodule.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 c = mymodule.list_classes() local class, group = callscript(self, determineclassscriptfile, tmp[1].agent, c) -- Create the device - local device = get_device(self, nil, true) + local device = mymodule.get_device(self, nil, true) if class and group and device.value.classes.value[group] then device.value.classes.value[group].value = class - device = create_device(self, device) + device = mymodule.create_device(self, device) if device.errtxt then request.errtxt = {device.errtxt} for n,v in pairs(device.value) do @@ -2117,16 +2112,16 @@ create_from_request = function(self, request) end request.errtxt = table.concat(request.errtxt, "\n") else - local params = get_device_params(self, device.value.device_id.value) + local params = mymodule.get_device_params(self, 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(self, params) + params = mymodule.set_device_params(self, params) end if params.errtxt then request.errtxt = params.errtxt - local req = get_delete_device(self, {device_id = device.value.device_id.value}) - delete_device(self, req) + local req = mymodule.get_delete_device(self, {device_id = device.value.device_id.value}) + mymodule.delete_device(self, req) else success = true request.value.device_id = device.value.device_id @@ -2147,3 +2142,5 @@ create_from_request = function(self, request) end return request end + +return mymodule |