diff options
author | Zach LeBar <zach@zachlebar.com> | 1980-02-08 22:06:51 +0000 |
---|---|---|
committer | Zach LeBar <zach@zachlebar.com> | 1980-02-08 22:06:51 +0000 |
commit | 82984dcb0b0495859e67662dc4a4f5a9ca83d1de (patch) | |
tree | 7a98f04c1fbec47fbd9db3ddc34ec3da12b7712b /provisioning-model.lua | |
parent | 454e50286e149cc056787173acec49920e632e1e (diff) | |
parent | c11f4f201fa92e73b0fd5953a49286b69586e239 (diff) | |
download | acf-provisioning-82984dcb0b0495859e67662dc4a4f5a9ca83d1de.tar.bz2 acf-provisioning-82984dcb0b0495859e67662dc4a4f5a9ca83d1de.tar.xz |
Fixing merge conflicts.
Diffstat (limited to 'provisioning-model.lua')
-rw-r--r-- | provisioning-model.lua | 206 |
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 |