68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Lua
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Lua
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/lua
 | |
| 
 | |
| local uci = require('simple-uci').cursor()
 | |
| local unistd = require 'posix.unistd'
 | |
| local util = require 'gluon.util'
 | |
| local site = require 'gluon.site'
 | |
| 
 | |
| -- Returns true if node was offline long enough to perform domain switch
 | |
| local function switch_after_min_reached()
 | |
| 	if not unistd.access("/tmp/gluon_offline") then
 | |
| 		return false
 | |
| 	end
 | |
| 
 | |
| 	local switch_after_sec = site.domain_switch.switch_after_offline_mins() * 60
 | |
| 
 | |
| 	local current_uptime = util.get_uptime()
 | |
| 	if current_uptime == nil then
 | |
| 		return false
 | |
| 	end
 | |
| 
 | |
| 	local f = util.readfile("/tmp/gluon_offline")
 | |
| 	if f == nil then
 | |
| 		return false
 | |
| 	end
 | |
| 	local offline_since = tonumber(f)
 | |
| 
 | |
| 	local offline_time_sec = current_uptime - offline_since
 | |
| 
 | |
| 	if offline_time_sec > switch_after_sec then
 | |
| 		return true
 | |
| 	end
 | |
| 	return false
 | |
| end
 | |
| 
 | |
| -- Returns true in case switch time has passed
 | |
| local function switch_time_passed()
 | |
| 	local current_time = os.time()
 | |
| 	local switch_time = site.domain_switch.switch_time()
 | |
| 
 | |
| 	return switch_time < current_time
 | |
| end
 | |
| 
 | |
| if site.domain_switch() == nil then
 | |
| 	-- Switch not applicable for current domain
 | |
| 	print("No domain switch defined for the current domain.")
 | |
| 	os.exit(0)
 | |
| end
 | |
| 
 | |
| local current_domain = uci:get("gluon", "core", "domain")
 | |
| local target_domain = site.domain_switch.target_domain()
 | |
| 
 | |
| if target_domain == current_domain then
 | |
| 	-- Current and target domain are equal
 | |
| 	print("Domain '" .. target_domain .. "' equals current domain.")
 | |
| 	os.exit(1)
 | |
| end
 | |
| 
 | |
| if not switch_after_min_reached() and not switch_time_passed() then
 | |
| 	-- Neither switch-time passed nor switch_after_min reached
 | |
| 	os.exit(0)
 | |
| end
 | |
| 
 | |
| uci:set("gluon", "core", "domain", target_domain)
 | |
| uci:commit("gluon")
 | |
| 
 | |
| os.execute("gluon-reconfigure")
 | |
| os.execute("reboot")
 |