From feb481a8b35395acabfc7fb9c1d0fe29e944597a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20M=2E=20G=C3=B3mez?= Date: Mon, 20 May 2019 14:21:48 +0200 Subject: [PATCH] Refs #913: Adding loop to connect to the server when OGAgent is activated. --- .../modules/server/OpenGnSys/__init__.py | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/src/opengnsys/modules/server/OpenGnSys/__init__.py b/src/opengnsys/modules/server/OpenGnSys/__init__.py index 850dfb0..5b7c6cb 100644 --- a/src/opengnsys/modules/server/OpenGnSys/__init__.py +++ b/src/opengnsys/modules/server/OpenGnSys/__init__.py @@ -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): """