Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
def load():
    """
    Loads all services from the modules that reside under core.services.

    :return: nothing
    """
    ServiceManager.add_services(_PATH)
Ejemplo n.º 4
0
    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")
Ejemplo n.º 5
0
    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")
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    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
Ejemplo n.º 9
0
    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
Ejemplo n.º 10
0
    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
Ejemplo n.º 11
0
    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)
Ejemplo n.º 12
0
    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
Ejemplo n.º 13
0
    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
Ejemplo n.º 14
0
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)
Ejemplo n.º 15
0
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
Ejemplo n.º 16
0
    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)
Ejemplo n.º 17
0
    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
Ejemplo n.º 18
0
    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
Ejemplo n.º 19
0
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'])
Ejemplo n.º 20
0
    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
Ejemplo n.º 21
0
    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)
Ejemplo n.º 22
0
    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
Ejemplo n.º 23
0
def load_services():
    # this line is required to add the above class to the list of available
    # services
    ServiceManager.add(MyService)
Ejemplo n.º 24
0
 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)
Ejemplo n.º 25
0
def load_services():
    # this line is required to add the above class to the list of available services
    ServiceManager.add(MyService)
Ejemplo n.º 26
0
    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