def __init__(self, backend_endpoint='http://127.0.0.1:5000'): self.backend_endpoint = backend_endpoint self.alignak_backend = Backend(backend_endpoint) self.connected = False
def setUpClass(cls): # Set test mode for alignak backend os.environ['TEST_ALIGNAK_BACKEND'] = '1' os.environ['ALIGNAK_BACKEND_MONGO_DBNAME'] = 'alignak-module-backend-update-status' # Delete used mongo DBs print ("Deleting Alignak backend DB...") exit_code = subprocess.call( shlex.split( 'mongo %s --eval "db.dropDatabase()"' % os.environ[ 'ALIGNAK_BACKEND_MONGO_DBNAME']) ) assert exit_code == 0 cls.p = subprocess.Popen(['uwsgi', '--plugin', 'python', '-w', 'alignakbackend:app', '--socket', '0.0.0.0:5000', '--protocol=http', '--enable-threads', '--pidfile', '/tmp/uwsgi.pid']) time.sleep(3) cls.backend = Backend('http://127.0.0.1:5000') cls.backend.login("admin", "admin", "force") realms = cls.backend.get_all('realm') for cont in realms['_items']: cls.realm_all = cont['_id'] timeperiods = cls.backend.get_all('timeperiod') for tp in timeperiods['_items']: if tp['name'] == '24x7': timeperiods_id = tp['_id'] # add commands data = json.loads(open('cfg/command_ping.json').read()) data['_realm'] = cls.realm_all data_cmd_ping = cls.backend.post("command", data) data = json.loads(open('cfg/command_http.json').read()) data['_realm'] = cls.realm_all data_cmd_http = cls.backend.post("command", data) # add user data = {'name': 'jeronimo', 'host_notification_period': timeperiods_id, 'service_notification_period': timeperiods_id, '_realm': cls.realm_all} data_user_jeronimo = cls.backend.post("user", data) # add usergroup data = {'name': 'admins', '_realm': cls.realm_all, 'users': [data_user_jeronimo['_id']]} data_usergroup = cls.backend.post("usergroup", data) # add host template data = json.loads(open('cfg/host_srvtemplate.json').read()) data['check_command'] = data_cmd_ping['_id'] del data['realm'] data['_realm'] = cls.realm_all cls.data_host = cls.backend.post("host", data) # add host data = json.loads(open('cfg/host_srv001.json').read()) data['check_command'] = data_cmd_ping['_id'] del data['realm'] data['_realm'] = cls.realm_all data['users'] = [data_user_jeronimo['_id']] data['usergroups'] = [data_usergroup['_id']] cls.data_host = cls.backend.post("host", data) # Add hostgroup data = {'name': 'allmyhosts', '_realm': cls.realm_all, 'hosts': [cls.data_host['_id']]} cls.data_hostgroup = cls.backend.post("hostgroup", data) # add service ping data = json.loads(open('cfg/service_srv001_ping.json').read()) data['host'] = cls.data_host['_id'] data['check_command'] = data_cmd_ping['_id'] data['_realm'] = cls.realm_all data['users'] = [data_user_jeronimo['_id']] data['usergroups'] = [data_usergroup['_id']] cls.data_srv_ping = cls.backend.post("service", data) # add service pong data = json.loads(open('cfg/service_srv001_pong.json').read()) data['host'] = cls.data_host['_id'] data['check_command'] = data_cmd_ping['_id'] data['_realm'] = cls.realm_all data['users'] = [data_user_jeronimo['_id']] data['usergroups'] = [data_usergroup['_id']] data['hostgroups'] = [cls.data_hostgroup['_id']] cls.data_srv_pong = cls.backend.post("service", data) # add service http data = json.loads(open('cfg/service_srv001_http.json').read()) data['host'] = cls.data_host['_id'] data['check_command'] = data_cmd_http['_id'] data['_realm'] = cls.realm_all data['users'] = [data_user_jeronimo['_id']] data['usergroups'] = [data_usergroup['_id']] cls.data_srv_http = cls.backend.post("service", data) # Add some realms data = { 'name': 'All-A', '_parent': cls.realm_all } realm_a = cls.backend.post("realm", data) data = { 'name': 'All-B', '_parent': cls.realm_all } cls.backend.post("realm", data) data = { 'name': 'All-A-1', '_parent': realm_a['_id'] } cls.backend.post("realm", data)
def setUpClass(cls): # Set test mode for alignak backend os.environ['TEST_ALIGNAK_BACKEND'] = '1' os.environ[ 'ALIGNAK_BACKEND_MONGO_DBNAME'] = 'alignak-module-backend-test' # Delete used mongo DBs print("Deleting Alignak backend DB...") exit_code = subprocess.call( shlex.split('mongo %s --eval "db.dropDatabase()"' % os.environ['ALIGNAK_BACKEND_MONGO_DBNAME'])) assert exit_code == 0 cls.p = subprocess.Popen([ 'uwsgi', '--plugin', 'python', '-w', 'alignakbackend:app', '--socket', '0.0.0.0:5000', '--protocol=http', '--enable-threads', '--pidfile', '/tmp/uwsgi.pid' ]) time.sleep(3) cls.backend = Backend('http://127.0.0.1:5000') cls.backend.login("admin", "admin", "force") realms = cls.backend.get_all('realm') for cont in realms['_items']: cls.realm_all = cont['_id'] # Get admin user users = cls.backend.get_all('user') for user in users['_items']: if user['name'] == 'admin': cls.user_admin = user # add commands data = json.loads(open('cfg/command_ping.json').read()) data['_realm'] = cls.realm_all data_cmd_ping = cls.backend.post("command", data) data = json.loads(open('cfg/command_http.json').read()) data['_realm'] = cls.realm_all data_cmd_http = cls.backend.post("command", data) # add host data = json.loads(open('cfg/host_srv001.json').read()) data['check_command'] = data_cmd_ping['_id'] del data['realm'] data['_realm'] = cls.realm_all cls.data_host = cls.backend.post("host", data) # add 2 services data = json.loads(open('cfg/service_srv001_ping.json').read()) data['host'] = cls.data_host['_id'] data['check_command'] = data_cmd_ping['_id'] data['_realm'] = cls.realm_all cls.data_srv_ping = cls.backend.post("service", data) data = json.loads(open('cfg/service_srv001_http.json').read()) data['host'] = cls.data_host['_id'] data['check_command'] = data_cmd_http['_id'] data['_realm'] = cls.realm_all cls.data_srv_http = cls.backend.post("service", data) # Start arbiter module modconf = Module() modconf.module_alias = "backend_arbiter" modconf.username = "******" modconf.password = "******" modconf.api_url = 'http://127.0.0.1:5000' cls.arbmodule = AlignakBackendArbiter(modconf) cls.objects = cls.arbmodule.get_objects()
def login(self, username=None, password=None, proxies=None, check=False): """ Connect to alignak backend :param username: name or token of user :type username: str :param password: password of user. If token given, this parameter is useless :type password: str :param proxies: dictionnary for proxy :type proxies: dict :param check: define if login is a check or a first login :type check: bool :return: True if connected or False if not :rtype: bool """ # Credentials if not username and not password: if 'token' in self.user: username = self.user['token'] # Create Backend object backend_url = settings.get_config('Alignak', 'backend') processes = int(settings.get_config('Alignak', 'processes')) self.backend = Backend(backend_url, processes=processes) logger.debug('Backend URL : %s', backend_url) if not check: logger.info('Try to connect to the Alignak backend...') if username and password: # Username & password : not recommended, without login QDialog try: self.connected = self.backend.login(username, password, proxies=proxies) if self.connected: self.user['username'] = username self.user['token'] = self.backend.token logger.info('Connection by password: %s', self.connection_status[self.connected]) except BackendException: # pragma: no cover logger.error('Connection to Backend has failed !') elif username and not password: # Username as token : recommended if 'token' in self.user: self.backend.set_token(self.user['token']) else: self.backend.set_token(username) self.user['token'] = username # Make backend connected to test token self.connected = True connection_test = self.get('user', {'projection': json.dumps({'name': 1})}) self.connected = bool(connection_test) if not check: logger.info('Connection by token: %s', self.connection_status[self.connected]) else: logger.warning( 'Connection to Backend has failed.\n' 'Check [Alignak] section in configuration file or use login window of application.' ) if self.connected and not check: if settings.get_config('Alignak', 'webservice'): self.ws_client.login(self.user['token']) else: logger.info('No configured Web Service.') return self.connected