def dispatch(self, test=False):
        if not self.new_to_dispatch:
            raise DispatcherError("Dispatcher cannot dispatch, "
                                  "because no configuration is prepared!")
        if self.first_dispatch_done:
            raise DispatcherError("Dispatcher cannot dispatch, "
                                  "because the configuration is still dispatched!")
        if self.dispatch_ok:
            logger.info("Dispatching is already done and ok...")
            return
        logger.info("Trying to send configuration to the satellites...")
        self.dispatch_ok = True
        for link in self.arbiters:
            if link == self.arbiter_link:
                continue
            if not link.active:
                continue
            if not link.spare:
                continue
            if link.configuration_sent:
                logger.debug("Arbiter %s already sent!", link.name)
                continue
            if not link.reachable:
                logger.debug("Arbiter %s is not reachable to receive its configuration",
                             link.name)
                continue
            logger.info("Sending configuration to the arbiter %s", link.name)
            logger.debug("- %s", link.cfg)
            link.put_conf(link.cfg, test=test)
            link.configuration_sent = True
            logger.info("- sent")
            link.do_not_run()
        for link in self.schedulers:
            if link.configuration_sent:
                logger.debug("Scheduler %s already sent!", link.name)
                continue
            if not link.active:
                continue
            if not link.reachable:
                logger.debug("Scheduler %s is not reachable to receive its configuration",
                             link.name)
                continue
            logger.info("Sending configuration to the scheduler %s", link.name)
            logger.debug("- %s", link.cfg)
            link.put_conf(link.cfg, test=test)
            link.configuration_sent = True
            logger.info("- sent")
        for link in self.satellites:
            if link.configuration_sent:
                logger.debug("%s %s already sent!", link.type, link.name)
                continue
            if not link.active:
                continue
            if not link.reachable:
                logger.warning("%s %s is not reachable to receive its configuration",
                               link.type, link.name)
                continue
            logger.info("Sending configuration to the %s %s", link.type, link.name)
            logger.debug("- %s", link.cfg)
            link.put_conf(link.cfg, test=test)
            link.configuration_sent = True
            logger.info("- sent")
        if self.dispatch_ok:
            self.new_to_dispatch = False
            self.first_dispatch_done = True