mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-24 07:26:29 +00:00

The work consists of three parts: * Allow for bootstrapping remotely, this makes it possible to run the tests on e.g. OSX with VirtualBox installed * Make bootstrapping a fully automated process where the manifests can be generated by the tests and the tests can call the bootstrapper directly in python * Create a framework wherein instances can be booted up using the bootstrapped images and subsequently tested
97 lines
2.2 KiB
Python
Executable file
97 lines
2.2 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
import time
|
|
import Pyro4
|
|
import logging
|
|
Pyro4.config.COMMTIMEOUT = 5
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
class Worker(object):
|
|
def __init__(self, number, callback):
|
|
self.number = number
|
|
self.callback = callback
|
|
log.info("Worker %d created" % self.number)
|
|
|
|
def work(self, amount):
|
|
print("Worker %d busy..." % self.number)
|
|
time.sleep(amount)
|
|
print("Worker %d done. Informing callback client." % self.number)
|
|
self._pyroDaemon.unregister(self)
|
|
self.callback.done(self.number) # invoke the callback object
|
|
|
|
|
|
class LogForwarder(logging.Handler):
|
|
|
|
def __init__(self, level=logging.NOTSET):
|
|
self.server = None
|
|
super(LogForwarder, self).__init__(level)
|
|
|
|
def set_server(self, server):
|
|
self.server = server
|
|
|
|
def emit(self, record):
|
|
if self.server is not None:
|
|
self.server.handle('hans')
|
|
|
|
|
|
class CallbackServer(object):
|
|
|
|
def __init__(self):
|
|
self.number = 0
|
|
self.serve = True
|
|
|
|
def addworker(self, callback):
|
|
self.number += 1
|
|
print("server: adding worker %d" % self.number)
|
|
worker = Worker(self.number, callback)
|
|
self._pyroDaemon.register(worker) # make it a Pyro object
|
|
return worker
|
|
|
|
def stop(self):
|
|
print('called stop()')
|
|
self.serve = False
|
|
|
|
def still_serve(self):
|
|
print('called still_serve()')
|
|
return self.serve
|
|
|
|
def set_log_server(self, server):
|
|
import logging
|
|
log_forwarder = LogForwarder()
|
|
root = logging.getLogger()
|
|
root.addHandler(log_forwarder)
|
|
root.setLevel(logging.NOTSET)
|
|
log_forwarder.set_server(server)
|
|
|
|
def test(self, msg):
|
|
import logging
|
|
root = logging.getLogger()
|
|
root.info(msg)
|
|
|
|
|
|
def main():
|
|
opts = getopts()
|
|
with Pyro4.Daemon('localhost', port=int(opts['--listen-port']), unixsocket=None) as daemon:
|
|
obj = CallbackServer()
|
|
uri = daemon.register(obj, 'srv')
|
|
print uri
|
|
print("Server ready.")
|
|
daemon.requestLoop(loopCondition=lambda: obj.still_serve())
|
|
|
|
|
|
def getopts():
|
|
from docopt import docopt
|
|
usage = """bootstrap-vz-server
|
|
|
|
Usage: bootstrap-vz-server [options]
|
|
|
|
Options:
|
|
--listen-port <port> Serve on specified port [default: 46675]
|
|
--callback-port <port> Connect callback to specified port [default: 46674]
|
|
-h, --help show this help
|
|
"""
|
|
return docopt(usage)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|