This topic contains 1 reply, has 1 voice, and was last updated by Ryan McBee 8 years, 5 months ago.
Updating Licenses on Remote Iguana Servers
-
I work for a vendor that bundles Iguana on our servers and I’ve been working to automate Upgrading Iguana. Upgrading the application is straightforward enough (stage new files, stop service, deploy files, start service) but updating the licenses has been a manual process so I set out to automate the chore.
I am able to update all of our servers using this Lua script because we are using a site to site VPN connection so I have http access to our Iguana instances. I have them all registered in Iguana’s Remote server list and I have synchronized credentials across them. If these conditions cannot be met this script will fail.
The license file is a CSV formatted simply as ServerID,License. It was obtained from the Interfaceware website after I opened each customer and refreshing the maintenance expiration date. I then downloaded, by clicking ‘Save to CSV’ and manually removed the columns we don’t need.
require("stringutil") require("node") serverList = {} user = 'admin' password = 'password' licensefile = 'D:/activations.csv' function main() getServerIPs() getRemoteIDs() parseLicenseFile() updateLicenses() end function getServerIPs () local f = io.open('IguanaConfiguration.xml','r') local iguanaConfig = f:read('*a') f:close() local parsedConfig = xml.parse{data=iguanaConfig} local remoteList = parsedConfig.iguana_config.remote_iguana_list for i=1, remoteList:childCount() do local s = remoteList:child('remote_iguana',i) serverList[i]={ip=s.host} end return 'Remote Server IPs read from IguanaConfiguration.xml' end function getRemoteIDs() for i=1, #serverList do local s=serverList[i].ip local serverInfo=net.http.get{url='http://'..s..':6543/monitor_query?', auth={username=user,password=password}, timeout=60, live=true} local x=xml.parse{data=serverInfo} serverList[i]={ip=serverList[i].ip, id=x.IguanaStatus.IguanaId} end return 'Retrieved Server IDs from Remote Server List' end function parseLicenseFile() local f = io.open(licensefile) local r = f:read('*a') f:close() local t=r:split('\n') local x ={} for i=1,#t do local s = t[i]:split(',') x[s[1]] = s[2] end for i=1, #serverList do local l = x[serverList[i].id:S()] trace(l) serverList[i]={ip=serverList[i].ip, id=serverList[i].id, lisc=l} end trace(serverList) return 'Server Licenses Mapped to IPs' end function updateLicenses() for i=1, #serverList do local u = 'http://'..serverList[i].ip:S()..':6543/submit_license_settings.html?NewLicenseHex='..serverList[i].lisc trace(u) local updatelisc = net.http.get{url=u, auth={username=user,password=password}, timeout=60, live=true} end return 'Server Licenses Applied' end
M.R. McBee
Upon further review this isn’t actually working, the update settings page requires javascript. I was tricked because the first chunk of my license were already updated. I’m going to post this in the questions forum.
M.R. McBee
You must be logged in to reply to this topic.