def test_service_set_file(self, session): # given ServiceManager.add_services(_SERVICES_PATH) my_service = ServiceManager.get(SERVICE_ONE) node_one = session.add_node() node_two = session.add_node() file_name = my_service.configs[0] file_data_one = "# custom file one" file_data_two = "# custom file two" session.services.set_service_file(node_one.objid, my_service.name, file_name, file_data_one) session.services.set_service_file(node_two.objid, my_service.name, file_name, file_data_two) # when custom_service_one = session.services.get_service(node_one.objid, my_service.name) session.services.create_service_files(node_one, custom_service_one) custom_service_two = session.services.get_service(node_two.objid, my_service.name) session.services.create_service_files(node_two, custom_service_two) # then file_path_one = node_one.hostfilename(file_name) assert os.path.exists(file_path_one) with open(file_path_one, "r") as custom_file: assert custom_file.read() == file_data_one file_path_two = node_two.hostfilename(file_name) assert os.path.exists(file_path_two) with open(file_path_two, "r") as custom_file: assert custom_file.read() == file_data_two
def test_service_import(self): """ Test importing a custom service. """ ServiceManager.add_services(_SERVICES_PATH) assert ServiceManager.get(SERVICE_ONE) assert ServiceManager.get(SERVICE_TWO)
def load(): """ Loads all services from the modules that reside under core.services. :return: nothing """ ServiceManager.add_services(_PATH)
def test_import_service(self): """ Test importing a custom service. :param conftest.Core core: core fixture to test with """ ServiceManager.add_services(_SERVICES_PATH) assert ServiceManager.get("MyService") assert ServiceManager.get("MyService2")
def test_import_service(self, core): """ Test importing a custom service. :param conftest.Core core: core fixture to test with """ core.session.services.importcustom(_SERVICES_PATH) assert ServiceManager.get("MyService") assert ServiceManager.get("MyService2")
def test_service_stop_error(self, session): # given ServiceManager.add_services(_SERVICES_PATH) my_service = ServiceManager.get(SERVICE_TWO) node = session.add_node() session.services.create_service_files(node, my_service) # when status = session.services.stop_service(node, my_service) # then assert status
def test_service_add_services(self, session): # given ServiceManager.add_services(_SERVICES_PATH) node = session.add_node() total_service = len(node.services) # when session.services.add_services(node, node.type, [SERVICE_ONE, SERVICE_TWO]) # then assert node.services assert len(node.services) == total_service + 2
def test_service_startup(self, session): # given ServiceManager.add_services(_SERVICES_PATH) my_service = ServiceManager.get(SERVICE_ONE) node = session.add_node() session.services.create_service_files(node, my_service) # when status = session.services.startup_service(node, my_service, wait=True) # then assert not status
def test_service_custom_startup(self, session): # given ServiceManager.add_services(_SERVICES_PATH) my_service = ServiceManager.get(SERVICE_ONE) node = session.add_node() # when session.services.set_service(node.objid, my_service.name) custom_my_service = session.services.get_service(node.objid, my_service.name) custom_my_service.startup = ("sh custom.sh",) # then assert my_service.startup != custom_my_service.startup
def test_service_all_configs(self, session): # given ServiceManager.add_services(_SERVICES_PATH) node = session.add_node() # when session.services.set_service(node.objid, SERVICE_ONE) session.services.set_service(node.objid, SERVICE_TWO) # then all_configs = session.services.all_configs() assert all_configs assert len(all_configs) == 2
def test_service_file(self, session): # given ServiceManager.add_services(_SERVICES_PATH) my_service = ServiceManager.get(SERVICE_ONE) node = session.add_node() file_name = my_service.configs[0] file_path = node.hostfilename(file_name) # when session.services.create_service_files(node, my_service) # then assert os.path.exists(file_path)
def test_service_all_files(self, session): # given ServiceManager.add_services(_SERVICES_PATH) file_name = "myservice.sh" node = session.add_node() # when session.services.set_service_file(node.objid, SERVICE_ONE, file_name, "# test") # then service = session.services.get_service(node.objid, SERVICE_ONE) all_files = session.services.all_files(service) assert service assert all_files and len(all_files) == 1
def test_service_setget(self, session): # given ServiceManager.add_services(_SERVICES_PATH) my_service = ServiceManager.get(SERVICE_ONE) node = session.add_node() # when no_service = session.services.get_service(node.objid, SERVICE_ONE) default_service = session.services.get_service(node.objid, SERVICE_ONE, default_service=True) session.services.set_service(node.objid, SERVICE_ONE) custom_service = session.services.get_service(node.objid, SERVICE_ONE, default_service=True) # then assert no_service is None assert default_service == my_service assert custom_service and custom_service != my_service
def load(): """ Loads all services from the modules that reside under core.services. :return: list of services that failed to load :rtype: list[str] """ return ServiceManager.add_services(_PATH)
def create_session(topo_path, _id, dtn_software): coreemu = CoreEmu() session = coreemu.create_session(_id=_id) session.set_state(EventTypes.CONFIGURATION_STATE) ServiceManager.add_services('/root/.core/myservices') session.open_xml(topo_path) for obj in session.objects.itervalues(): if type(obj) is CoreNode: session.services.add_services(obj, obj.type, ['pidstat', 'bwm-ng', dtn_software]) session.instantiate() return session
def load_services(self): # load default services self.service_errors = core.services.load() # load custom services service_paths = self.config.get("custom_services_dir") logger.debug("custom service paths: %s", service_paths) if service_paths: for service_path in service_paths.split(','): service_path = service_path.strip() custom_service_errors = ServiceManager.add_services(service_path) self.service_errors.extend(custom_service_errors)
def on_load(cls): logging.debug("loading custom docker services") if "Client" in globals(): client = Client(version="1.10") images = client.images() del client else: images = [] for image in images: if u"<none>" in image["RepoTags"][0]: continue for repo in image["RepoTags"]: if u":core" not in repo: continue dockerid = repo.encode("ascii", "ignore").split(":")[0] sub_class = type("SubClass", (DockerService,), {"_name": dockerid, "_image": dockerid}) ServiceManager.add(sub_class) del images
def on_load(cls): logger.debug("loading custom docker services") if "Client" in globals(): client = Client(version="1.10") images = client.images() del client else: images = [] for image in images: if u"<none>" in image["RepoTags"][0]: continue for repo in image["RepoTags"]: if u":core" not in repo: continue dockerid = repo.encode("ascii", "ignore").split(":")[0] sub_class = type("SubClass", (DockerService,), {"_name": dockerid, "_image": dockerid}) ServiceManager.add(sub_class) del images
async def before_server_start(app, loop): queue = asyncio.Queue() app.queue = queue if consul_enabled: app.service_manager = ServiceManager( consul_host=app.config['CONSUL_AGENT_HOST'], consul_port=app.config['CONSUL_AGENT_PORT'], loop=loop, ) loop.create_task(service_watcher(app, loop)) loop.create_task(consume(queue, app)) reporter = AioReporter(queue=queue) tracer = BasicTracer(recorder=reporter) tracer.register_required_propagators() opentracing.tracer = tracer app.db = await ConnectionPool(loop=loop).init(app.config['DB_CONFIG'])
def parseservice(self, service, n): """ Use session.services manager to store service customizations before they are added to a node. """ name = service.getAttribute("name") svc = ServiceManager.get(name) if svc is None: return False values = [] startup_idx = service.getAttribute("startup_idx") if startup_idx is not None: values.append("startidx=%s" % startup_idx) startup_time = service.getAttribute("start_time") if startup_time is not None: values.append("starttime=%s" % startup_time) dirs = [] for dir in service.getElementsByTagName("Directory"): dirname = dir.getAttribute("name") dirs.append(dirname) if len(dirs): values.append("dirs=%s" % dirs) startup = [] shutdown = [] validate = [] for cmd in service.getElementsByTagName("Command"): type = cmd.getAttribute("type") cmdstr = xmlutils.get_text_child(cmd) if cmdstr is None: continue if type == "start": startup.append(cmdstr) elif type == "stop": shutdown.append(cmdstr) elif type == "validate": validate.append(cmdstr) if len(startup): values.append("cmdup=%s" % startup) if len(shutdown): values.append("cmddown=%s" % shutdown) if len(validate): values.append("cmdval=%s" % validate) files = [] for file in service.getElementsByTagName("File"): filename = file.getAttribute("name") files.append(filename) data = xmlutils.get_text_child(file) self.session.services.set_service_file(node_id=n.objid, service_name=name, file_name=filename, data=data) if len(files): values.append("files=%s" % files) if not bool(service.getAttribute("custom")): return True self.session.services.set_service(n.objid, svc) # set custom values for custom service svc = self.session.services.get_service(n.objid, None) if not svc: raise ValueError("custom service(%s) for node(%s) does not exist", svc.name, n.objid) values = ConfigShim.str_to_dict("|".join(values)) for name, value in values.iteritems(): ServiceShim.setvalue(svc, name, value) return True
def parse_device_service(self, service, node): name = service.getAttribute('name') session_service = ServiceManager.get(name) if not session_service: assert False # XXX for testing values = [] startup_idx = service.getAttribute('startup_idx') if startup_idx: values.append('startidx=%s' % startup_idx) startup_time = service.getAttribute('start_time') if startup_time: values.append('starttime=%s' % startup_time) dirs = [] for directory in xmlutils.iter_children_with_name(service, 'directory'): dirname = directory.getAttribute('name') dirs.append(str(dirname)) if dirs: values.append("dirs=%s" % dirs) startup = [] shutdown = [] validate = [] for command in xmlutils.iter_children_with_name(service, 'command'): command_type = command.getAttribute('type') command_text = xmlutils.get_child_text_trim(command) if not command_text: continue if command_type == 'start': startup.append(str(command_text)) elif command_type == 'stop': shutdown.append(str(command_text)) elif command_type == 'validate': validate.append(str(command_text)) if startup: values.append('cmdup=%s' % startup) if shutdown: values.append('cmddown=%s' % shutdown) if validate: values.append('cmdval=%s' % validate) filenames = [] files = [] for f in xmlutils.iter_children_with_name(service, 'file'): filename = f.getAttribute('name') if not filename: continue filenames.append(filename) data = xmlutils.get_child_text_trim(f) if data: data = str(data) else: data = None typestr = 'service:%s:%s' % (name, filename) files.append((typestr, filename, data)) if filenames: values.append('files=%s' % filenames) custom = service.getAttribute('custom') if custom and custom.lower() == 'true': self.session.services.set_service(node.objid, session_service.name) values = ConfigShim.str_to_dict("|".join(values)) for key, value in values.iteritems(): ServiceShim.setvalue(session_service, key, value) # NOTE: if a custom service is used, setservicefile() must be # called after the custom service exists for typestr, filename, data in files: svcname = typestr.split(":")[1] self.session.services.set_service_file( node_id=node.objid, service_name=svcname, file_name=filename, data=data ) return str(name)
def load_services(): # this line is required to add the above class to the list of available # services ServiceManager.add(MyService)
def parse_device_service(self, service, node): name = service.getAttribute('name') session_service = ServiceManager.get(name) if not session_service: assert False # XXX for testing values = [] startup_idx = service.getAttribute('startup_idx') if startup_idx: values.append('startidx=%s' % startup_idx) startup_time = service.getAttribute('start_time') if startup_time: values.append('starttime=%s' % startup_time) dirs = [] for directory in xmlutils.iter_children_with_name( service, 'directory'): dirname = directory.getAttribute('name') dirs.append(str(dirname)) if dirs: values.append("dirs=%s" % dirs) startup = [] shutdown = [] validate = [] for command in xmlutils.iter_children_with_name(service, 'command'): command_type = command.getAttribute('type') command_text = xmlutils.get_child_text_trim(command) if not command_text: continue if command_type == 'start': startup.append(str(command_text)) elif command_type == 'stop': shutdown.append(str(command_text)) elif command_type == 'validate': validate.append(str(command_text)) if startup: values.append('cmdup=%s' % startup) if shutdown: values.append('cmddown=%s' % shutdown) if validate: values.append('cmdval=%s' % validate) filenames = [] files = [] for f in xmlutils.iter_children_with_name(service, 'file'): filename = f.getAttribute('name') if not filename: continue filenames.append(filename) data = xmlutils.get_child_text_trim(f) if data: data = str(data) else: data = None typestr = 'service:%s:%s' % (name, filename) files.append((typestr, filename, data)) if filenames: values.append('files=%s' % filenames) custom = service.getAttribute('custom') if custom and custom.lower() == 'true': self.session.services.setcustomservice(node.objid, session_service, values) # NOTE: if a custom service is used, setservicefile() must be # called after the custom service exists for typestr, filename, data in files: self.session.services.setservicefile(nodenum=node.objid, type=typestr, filename=filename, srcname=None, data=data) return str(name)
def load_services(): # this line is required to add the above class to the list of available services ServiceManager.add(MyService)
def parseservice(self, service, n): """ Use session.services manager to store service customizations before they are added to a node. """ name = service.getAttribute("name") svc = ServiceManager.get(name) if svc is None: return False values = [] startup_idx = service.getAttribute("startup_idx") if startup_idx is not None: values.append("startidx=%s" % startup_idx) startup_time = service.getAttribute("start_time") if startup_time is not None: values.append("starttime=%s" % startup_time) dirs = [] for dir in service.getElementsByTagName("Directory"): dirname = dir.getAttribute("name") dirs.append(dirname) if len(dirs): values.append("dirs=%s" % dirs) startup = [] shutdown = [] validate = [] for cmd in service.getElementsByTagName("Command"): type = cmd.getAttribute("type") cmdstr = xmlutils.get_text_child(cmd) if cmdstr is None: continue if type == "start": startup.append(cmdstr) elif type == "stop": shutdown.append(cmdstr) elif type == "validate": validate.append(cmdstr) if len(startup): values.append("cmdup=%s" % startup) if len(shutdown): values.append("cmddown=%s" % shutdown) if len(validate): values.append("cmdval=%s" % validate) files = [] for file in service.getElementsByTagName("File"): filename = file.getAttribute("name") files.append(filename) data = xmlutils.get_text_child(file) typestr = "service:%s:%s" % (name, filename) self.session.services.setservicefile(nodenum=n.objid, type=typestr, filename=filename, srcname=None, data=data) if len(files): values.append("files=%s" % files) if not bool(service.getAttribute("custom")): return True self.session.services.setcustomservice(n.objid, svc, values) return True