summaryrefslogtreecommitdiffstats
path: root/provisioning-model.lua
diff options
context:
space:
mode:
authorZach LeBar <zach@zachlebar.com>1980-02-08 22:06:51 +0000
committerZach LeBar <zach@zachlebar.com>1980-02-08 22:06:51 +0000
commit82984dcb0b0495859e67662dc4a4f5a9ca83d1de (patch)
tree7a98f04c1fbec47fbd9db3ddc34ec3da12b7712b /provisioning-model.lua
parent454e50286e149cc056787173acec49920e632e1e (diff)
parentc11f4f201fa92e73b0fd5953a49286b69586e239 (diff)
downloadacf-provisioning-82984dcb0b0495859e67662dc4a4f5a9ca83d1de.tar.bz2
acf-provisioning-82984dcb0b0495859e67662dc4a4f5a9ca83d1de.tar.xz
Fixing merge conflicts.
Diffstat (limited to 'provisioning-model.lua')
-rw-r--r--provisioning-model.lua206
1 files changed, 134 insertions, 72 deletions
diff --git a/provisioning-model.lua b/provisioning-model.lua
index 2703596..9ecf100 100644
--- a/provisioning-model.lua
+++ b/provisioning-model.lua
@@ -28,6 +28,11 @@ local con
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 table_creation_scripts = require("provisioning/provisioning-scripts")
-- ################################################################################
@@ -530,30 +535,36 @@ update_template = function(self, template, action, create)
return template
end
-delete_template = function(filename)
- local result = ""
- local errtxt
+get_delete_template = function(self, clientdata)
+ 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)
+ 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='"..escape(filename).."'"
local tmp = getselectresponse(sql)
if #tmp == 0 then
- errtxt = "Template does not exist"
+ 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='"..escape(filename).."'"
runsqlcommand(sql)
-- Delete the template file
os.remove(filename)
- result = "Template Deleted"
+ delreq.errtxt = nil
end
if connected then databasedisconnect() end
end)
if not res and err then
- errtxt = err
+ delreq.errtxt = err
end
- return cfe({ value=result, errtxt=errtxt, label="Delete Template Result" })
+ return delreq
end
list_class_groups = function()
@@ -674,27 +685,33 @@ update_class_group = function(self, group, action, create)
return group
end
-delete_class_group = function(class_group_id)
- local result = ""
- local errtxt
+get_delete_class_group = function(self, clientdata)
+ 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)
+ 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='"..escape(class_group_id).."'"
local tmp = getselectresponse(sql)
if #tmp == 0 then
- errtxt = "Group does not exist"
+ delreq.value.class_group_id.errtxt = "Group does not exist"
else
sql = "DELETE FROM provisioning_class_groups WHERE class_group_id='"..escape(class_group_id).."'"
runsqlcommand(sql)
- result = "Class Group Deleted"
+ delreq.errtxt = nil
end
if connected then databasedisconnect() end
end)
if not res and err then
- errtxt = err
+ delreq.errtxt = err
end
- return cfe({ value=result, errtxt=errtxt, label="Delete Class Group Result" })
+ return delreq
end
list_classes = function()
@@ -848,15 +865,21 @@ update_class = function(self, class, action, create)
return class
end
-delete_class = function(class_id)
- local result = ""
- local errtxt
+get_delete_class = function(self, clientdata)
+ 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)
+ 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='"..escape(class_id).."'"
local tmp = getselectresponse(sql)
if #tmp == 0 then
- errtxt = "Class does not exist"
+ delreq.value.class_id.errtxt = "Class does not exist"
else
sql = "BEGIN TRANSACTION"
runsqlcommand(sql)
@@ -864,18 +887,18 @@ delete_class = function(class_id)
runsqlcommand(sql, true)
sql = "DELETE FROM provisioning_classes WHERE class_id='"..escape(class_id).."'"
runsqlcommand(sql, true)
- result = "Class Deleted"
sql = "COMMIT"
runsqlcommand(sql)
+ delreq.errtxt = nil
end
if connected then databasedisconnect() end
end)
if not res and err then
pcall(function() con:execute("ROLLBACK") end)
- errtxt = err
+ delreq.errtxt = err
end
- return cfe({ value=result, errtxt=errtxt, label="Delete Class Result" })
+ return delreq
end
list_groups = function()
@@ -1060,15 +1083,21 @@ update_group = function(self, group, action, create)
return group
end
-delete_group = function(group_id)
- local result = ""
- local errtxt
+get_delete_group = function(self, clientdata)
+ 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)
+ 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='"..escape(group_id).."'"
local tmp = getselectresponse(sql)
if #tmp == 0 then
- errtxt = "Group does not exist"
+ delreq.value.group_id.errtxt = "Group does not exist"
else
sql = "BEGIN TRANSACTION"
runsqlcommand(sql)
@@ -1076,18 +1105,18 @@ delete_group = function(group_id)
runsqlcommand(sql, true)
sql = "DELETE FROM provisioning_groups WHERE group_id='"..escape(group_id).."'"
runsqlcommand(sql, true)
- result = "Parameter Group Deleted"
sql = "COMMIT"
runsqlcommand(sql)
+ delreq.errtxt = nil
end
if connected then databasedisconnect() end
end)
if not res and err then
pcall(function() con:execute("ROLLBACK") end)
- errtxt = err
+ delreq.errtxt = err
end
- return cfe({ value=result, errtxt=errtxt, label="Delete Parameter Group Result" })
+ return delreq
end
list_params = function()
@@ -1219,15 +1248,21 @@ update_param = function(self, param, action, create)
return param
end
-delete_param = function(param_id)
- local result = ""
- local errtxt
+get_delete_param = function(self, clientdata)
+ 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)
+ 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='"..escape(param_id).."'"
local tmp = getselectresponse(sql)
if #tmp == 0 then
- errtxt = "Parameter does not exist"
+ delreq.value.param_id.errtxt = "Parameter does not exist"
else
sql = "BEGIN TRANSACTION"
runsqlcommand(sql)
@@ -1235,18 +1270,18 @@ delete_param = function(param_id)
runsqlcommand(sql, true)
sql = "DELETE FROM provisioning_params WHERE param_id='"..escape(param_id).."'"
runsqlcommand(sql, true)
- result = "Parameter Deleted"
sql = "COMMIT"
runsqlcommand(sql)
+ delreq.errtxt = nil
end
if connected then databasedisconnect() end
end)
if not res and err then
pcall(function() con:execute("ROLLBACK") end)
- errtxt = err
+ delreq.errtxt = err
end
- return cfe({ value=result, errtxt=errtxt, label="Delete Parameter Result" })
+ return delreq
end
list_devices = function()
@@ -1274,8 +1309,15 @@ list_devices = function()
return cfe({ type="structure", value=retval, label="List of Devices", errtxt=errtxt })
end
-get_device = function(self, clientdata)
- local device_id = clientdata.device_id
+get_existing_device = function(self, clientdata)
+ return get_device(clientdata.device_id, false)
+end
+
+get_new_device = function(self, clientdata)
+ return get_device(clientdata.device_id, true)
+end
+
+get_device = function(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})
@@ -1283,7 +1325,7 @@ get_device = function(self, clientdata)
local res, err = pcall(function()
local classes={}
local connected = databaseconnect()
- if device_id and device_id ~= "" then
+ 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='"..escape(device_id).."'"
local tmp = getselectresponse(sql)
@@ -1312,7 +1354,7 @@ get_device = function(self, clientdata)
-- Save the device for later use
local output = cfe({ type="group", value=retval, label="Provisioning Device", errtxt=errtxt })
- if device_id and device_id ~= "" then saved_devices[device_id] = duplicatestructure(output) end
+ if not create and device_id and device_id ~= "" then saved_devices[device_id] = duplicatestructure(output) end
return output
end
@@ -1391,15 +1433,21 @@ update_device = function(self, device, action, create)
return device
end
-delete_device = function(device_id)
- local result = ""
- local errtxt
+get_delete_device = function(self, clientdata)
+ 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)
+ 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='"..escape(device_id).."' LIMIT 1"
local tmp = getselectresponse(sql)
if #tmp == 0 then
- errtxt = "Device does not exist"
+ delreq.value.device_id.errtxt = "Device does not exist"
else
if not saved_device_params[device_id] then get_device_params(device_id) end
if not saved_devices[device_id] then get_device(device_id) end
@@ -1410,9 +1458,9 @@ delete_device = function(device_id)
runsqlcommand(sql, true)
sql = "DELETE FROM devices_to_classes WHERE device_id='"..escape(device_id).."'"
runsqlcommand(sql, true)
- result = "Device Deleted"
sql = "COMMIT"
runsqlcommand(sql)
+ delreq.errtxt = nil
callscript(deletedevicescriptfile, saved_devices[device_id], saved_device_params[device_id])
saved_devices[device_id] = nil
@@ -1422,10 +1470,10 @@ delete_device = function(device_id)
end)
if not res and err then
pcall(function() con:execute("ROLLBACK") end)
- errtxt = err
+ delreq.errtxt = err
end
- return cfe({ value=result, errtxt=errtxt, label="Delete Device Result" })
+ return delreq
end
get_editable_device_params = function(self, clientdata, action)
@@ -1436,7 +1484,6 @@ get_all_device_params = function(self, clientdata, action)
return get_device_params(clientdata.device_id, false)
end
-
get_class_options = function(self, clientdata)
local class_id = clientdata.classs_id
local retval = {}
@@ -1495,7 +1542,7 @@ set_all_device_params = function(self, params)
return set_device_params(params, false)
end
-local set_device_params = function(params, editable)
+set_device_params = function(params, editable)
-- Validate the settings
local success = validateparam(params)
local errtxt
@@ -1997,28 +2044,34 @@ list_requests = function()
return cfe({ type="structure", value=retval, label="List of Requests", errtxt=errtxt })
end
-delete_request = function(mac)
- local result = ""
- local errtxt
+get_delete_request = function(self, clientdata)
+ 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)
+ 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='"..escape(string.upper(mac)).."'"
local tmp = getselectresponse(sql)
if #tmp == 0 then
- errtxt = "Request does not exist"
+ delreq.value.mac.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"
+ delreq.errtxt = nil
end
if connected then databasedisconnect() end
end)
if not res and err then
- errtxt = err
+ delreq.errtxt = err
end
- return cfe({ value=result, errtxt=errtxt, label="Delete Request Result" })
+ return delreq
end
get_request = function(self, clientdata)
@@ -2042,27 +2095,36 @@ create_from_request = function(self, request)
local class, group = callscript(determineclassscriptfile, tmp[1].agent, c)
-- Create the device
- local device = get_device()
+ local device = get_device(nil, true)
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)
+ device = create_device(self, device)
+ if device.errtxt then
+ request.errtxt = {device.errtxt}
+ for n,v in pairs(device.value) do
+ if v.errtxt then
+ request.errtxt[#request.errtxt + 1] = v.errtxt
+ end
+ end
+ request.errtxt = table.concat(request.errtxt, "\n")
else
- success = true
- request.value.device_id = device.value.device_id
+ 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
+ local req = get_delete_device(self, {device_id = device.value.device_id.value})
+ delete_device(self, req)
+ else
+ success = true
+ request.value.device_id = device.value.device_id
+ end
end
+ else
+ request.errtxt = "Failed to create device - could not determine class"
end
end
if connected then databasedisconnect() end