def create_service(reactor, options): """Based on options provided by the user create a service that will provide whatever it is that Nesoi do. """ service = MultiService() listen_address = options['listen-address'] storage = shelve.open(options['data-file'], writeback=True) cluster_node = ClusterNode(reactor, storage) service.addService(cluster_node) model = ResourceModel(reactor, cluster_node.keystore) gossiper = Gossiper(reactor, cluster_node, listen_address) if options['seed']: gossiper.seed([options['seed']]) service.addService(UDPServer(int(options['listen-port']), gossiper, interface=listen_address)) router = rest.Router() router.addController('app', api.ApplicationCollectionResource(model)) router.addController('app/{appname}/web-hooks', api.WebhookCollectionResource(model, 'appname', 'app')) router.addController('app/{appname}/web-hooks/{hookname}', api.WebhookResource(model, 'appname', 'app')) router.addController('app/{appname}', api.ApplicationResource(model)) router.addController('srv', api.ServiceCollectionResource(model)) router.addController('srv/{srvname}', api.ServiceHostCollectionResource(model)) router.addController('srv/{srvname}/web-hooks', api.WebhookCollectionResource(model, 'srvname', 'service')) router.addController('srv/{srvname}/web-hooks/{hookname}', api.WebhookResource(model, 'srvname', 'service')) router.addController('srv/{srvname}/{hostname}', api.ServiceHostResource(model)) service.addService(TCPServer(int(options['listen-port']), Site(router), interface=listen_address)) #gossiper.set(cluster_node.election.PRIO_KEY, 0) #cluster_node.keystore.load_from(storage) return service