def Logoff(self, *args): logger.debug('Logoff event: arguments: {}'.format(args)) if self.service is not None and self.service.api is not None and self.service.api.isConnected: try: self.service.api.logout(args[0]) except Exception as e: logger.fatal('Error notifying logoff to server: {}'.format(e)) logger.debug('Invoking onLogout: {}'.format(self.service)) self.service.onLogout(args[0]) logger.debug('Invoked!!')
def Logon(self, *args): logger.debug('Logon event: {}'.format(args)) if self.service.api is not None and self.service.api.isConnected: try: data = self.service.api.login(args[0]) logger.debug('Data received for login: {}'.format(data)) data = data.split('\t') if len(data) >= 2: logger.debug('Data is valid: {}'.format(data)) windir = os.environ['windir'] with open(os.path.join(windir, 'remoteip.txt'), 'w') as f: f.write(data[0]) with open(os.path.join(windir, 'remoteh.txt'), 'w') as f: f.write(data[1]) except Exception as e: logger.fatal('Error notifying logon to server: {}'.format(e))
def joinDomain(self, name, domain, ou, account, password): logger.fatal('Join domain is not supported on linux platforms right now')
def interactWithBroker(self): ''' Returns True to continue to main loop, false to stop & exit service ''' # If no configuration is found, stop service if cfg is None: logger.fatal('No configuration found, stopping service') return False self.api = REST.Api(cfg['host'], cfg['masterKey'], cfg['ssl']) # Wait for Broker to be ready counter = 0 while self.isAlive: try: # getNetworkInfo is a generator function netInfo = tuple(operations.getNetworkInfo()) self.knownIps = dict(((i.mac, i.ip) for i in netInfo)) ids = ','.join([i.mac for i in netInfo]) if ids == '': # Wait for any network interface to be ready logger.debug('No valid network interfaces found, retrying in a while...') raise Exception() logger.debug('Ids: {}'.format(ids)) self.api.init(ids) # Set remote logger to notify log info to broker logger.setRemoteLogger(self.api) break except REST.InvalidKeyError: logger.fatal('Can\'t sync with broker: Invalid broker Master Key') return False except REST.UnmanagedHostError: # Maybe interface that is registered with broker is not enabled already? # Right now, we thing that the interface connected to broker is # the interface that broker will know, let's see how this works logger.fatal('This host is not managed by UDS Broker (ids: {})'.format(ids)) return False # On unmanaged hosts, there is no reason right now to continue running except Exception as e: logger.debug('Exception on network info: retrying') logger.exception() # Any other error is expectable and recoverable, so let's wait a bit and retry again # but, if too many errors, will log it (one every minute, for # example) counter += 1 if counter % 60 == 0: # Every 5 minutes, raise a log logger.info('Trying to inititialize connection with broker (last error: {})'.format(exceptionToMessage(e))) # Wait a bit before next check self.doWait(5000) # Broker connection is initialized, now get information about what to # do counter = 0 while self.isAlive: try: logger.debug('Requesting information of what to do now') info = self.api.information() data = info.split('\r') if len(data) != 2: logger.error('The format of the information message is not correct (got {})'.format(info)) raise Exception params = data[1].split('\t') if data[0] == 'rename': try: if len(params) == 1: # Simple rename logger.debug('Renaming computer to {}'.format(params[0])) self.rename(params[0]) # Rename with change password for an user elif len(params) == 4: logger.debug('Renaming computer to {}'.format(params)) self.rename(params[0], params[1], params[2], params[3]) else: logger.error('Got invalid parameter for rename operation: {}'.format(params)) return False break except Exception as e: logger.error('Error at computer renaming stage: {}'.format(e.message)) return False elif data[0] == 'domain': if len(params) != 5: logger.error('Got invalid parameters for domain message: {}'.format(params)) return False self.joinDomain(params[0], params[1], params[2], params[3], params[4]) break else: logger.error('Unrecognized action sent from broker: {}'.format(data[0])) return False # Stop running service except REST.UserServiceNotFoundError: logger.error('The host has lost the sync state with broker! (host uuid changed?)') return False except Exception: if counter % 60 == 0: logger.warn('Too many retries in progress, though still trying (last error: {})'.format(exceptionToMessage(e))) counter += 1 # Any other error is expectable and recoverable, so let's wait # a bit and retry again # Wait a bit before next check self.doWait(5000) if self.rebootRequested: try: operations.reboot() except Exception as e: logger.error('Exception on reboot: {}'.format(e.message)) return False # Stops service return True
def interactWithBroker(self): ''' Returns True to continue to main loop, false to stop & exit service ''' # If no configuration is found, stop service if cfg is None: logger.fatal('No configuration found, stopping service') return False self.api = REST.Api(cfg['host'], cfg['masterKey'], cfg['ssl']) # Wait for Broker to be ready counter = 0 while self.isAlive: try: # getNetworkInfo is a generator function netInfo = tuple(operations.getNetworkInfo()) self.knownIps = dict(((i.mac, i.ip) for i in netInfo)) ids = ','.join([i.mac for i in netInfo]) if ids == '': # Wait for any network interface to be ready logger.debug('No valid network interfaces found, retrying in a while...') raise Exception() logger.debug('Ids: {}'.format(ids)) self.api.init(ids) # Set remote logger to notify log info to broker logger.setRemoteLogger(self.api) break except REST.InvalidKeyError: logger.fatal('Can\'t sync with broker: Invalid broker Master Key') return False except REST.UnmanagedHostError: # Maybe interface that is registered with broker is not enabled already? # Right now, we thing that the interface connected to broker is # the interface that broker will know, let's see how this works logger.fatal('This host is not managed by UDS Broker (ids: {})'.format(ids)) return False # On unmanaged hosts, there is no reason right now to continue running except Exception as e: logger.debug('Exception on network info: retrying') # Any other error is expectable and recoverable, so let's wait a bit and retry again # but, if too many errors, will log it (one every minute, for # example) counter += 1 if counter % 60 == 0: # Every 5 minutes, raise a log logger.info('Trying to inititialize connection with broker (last error: {})'.format(exceptionToMessage(e))) # Wait a bit before next check self.doWait(5000) # Now try to run the "runonce" element runOnce = store.runApplication() if runOnce is not None: if self.execute(runOnce, 'RunOnce') is True: # operations.reboot() return False # Broker connection is initialized, now get information about what to # do counter = 0 while self.isAlive: try: logger.debug('Requesting information of what to do now') info = self.api.information() data = info.split('\r') if len(data) != 2: logger.error('The format of the information message is not correct (got {})'.format(info)) raise Exception params = data[1].split('\t') if data[0] == 'rename': try: if len(params) == 1: # Simple rename logger.debug('Renaming computer to {}'.format(params[0])) self.rename(params[0]) # Rename with change password for an user elif len(params) == 4: logger.debug('Renaming computer to {}'.format(params)) self.rename(params[0], params[1], params[2], params[3]) else: logger.error('Got invalid parameter for rename operation: {}'.format(params)) return False break except Exception as e: logger.error('Error at computer renaming stage: {}'.format(e.message)) return None # Will retry complete broker connection if this point is reached elif data[0] == 'domain': if len(params) != 5: logger.error('Got invalid parameters for domain message: {}'.format(params)) return False # Stop running service self.joinDomain(params[0], params[1], params[2], params[3], params[4]) break else: logger.error('Unrecognized action sent from broker: {}'.format(data[0])) return False # Stop running service except REST.UserServiceNotFoundError: logger.error('The host has lost the sync state with broker! (host uuid changed?)') return False except Exception as err: if counter % 60 == 0: logger.warn('Too many retries in progress, though still trying (last error: {})'.format(exceptionToMessage(err))) counter += 1 # Any other error is expectable and recoverable, so let's wait # a bit and retry again # Wait a bit before next check self.doWait(5000) if self.rebootRequested: try: operations.reboot() except Exception as e: logger.error('Exception on reboot: {}'.format(e.message)) return False # Stops service return True