Refs #913: Adding loop to connect to the server when OGAgent is activated.

remotes/github/oglive
Ramón M. Gómez 2019-05-20 14:21:48 +02:00
parent 03a1cb28f1
commit feb481a8b3
1 changed files with 25 additions and 18 deletions

View File

@ -82,7 +82,9 @@ class OpenGnSysWorker(ServerWorker):
"""
Sends OGAgent activation notification to OpenGnsys server
"""
self.cmd = None
t = 0
# Generate random secret to send on activation
self.random = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(self.length))
# Ensure cfg has required configuration variables or an exception will be thrown
self.REST = REST(self.service.config.get('opengnsys', 'remote'))
# Get network interfaces until they are active or timeout (5 minutes)
@ -101,6 +103,28 @@ class OpenGnSysWorker(ServerWorker):
# Raise error after timeout
if not self.interface:
raise e
# Loop to send initialization message
for t in range(0, 100):
try:
try:
self.REST.sendMessage('ogagent/started', {'mac': self.interface.mac, 'ip': self.interface.ip,
'secret': self.random, 'ostype': operations.osType,
'osversion': operations.osVersion})
break
except:
# Trying to initialize on alternative server, if defined
# (used in "exam mode" from the University of Seville)
self.REST = REST(self.service.config.get('opengnsys', 'altremote'))
self.REST.sendMessage('ogagent/started', {'mac': self.interface.mac, 'ip': self.interface.ip,
'secret': self.random, 'ostype': operations.osType,
'osversion': operations.osVersion, 'alt_url': True})
break
except:
time.sleep(3)
if 0 < t < 100:
logger.debug("Successful connection after {} tries".format(t))
elif t == 100:
raise Exception('Initialization error: Cannot connect to remote server')
# Delete marking files
for f in ['ogboot.me', 'ogboot.firstboot', 'ogboot.secondboot']:
try:
@ -113,23 +137,6 @@ class OpenGnSysWorker(ServerWorker):
newHostsFile = hostsFile + '.' + self.interface.ip.split('.')[0]
if os.path.isfile(newHostsFile):
shutil.copyfile(newHostsFile, hostsFile)
# Generate random secret to send on activation
self.random = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(self.length))
# Send initialization message
try:
try:
self.REST.sendMessage('ogagent/started', {'mac': self.interface.mac, 'ip': self.interface.ip,
'secret': self.random, 'ostype': operations.osType,
'osversion': operations.osVersion})
except:
# Trying to initialize on alternative server, if defined
# (used in "exam mode" from the University of Seville)
self.REST = REST(self.service.config.get('opengnsys', 'altremote'))
self.REST.sendMessage('ogagent/started', {'mac': self.interface.mac, 'ip': self.interface.ip,
'secret': self.random, 'ostype': operations.osType,
'osversion': operations.osVersion, 'alt_url': True})
except:
logger.error('Initialization error')
def onDeactivation(self):
"""