bootstrap-vz/tests/integration/build/remote/test.py

57 lines
1.4 KiB
Python
Raw Normal View History

#!/usr/bin/env python
from remote.ssh_rpc_client import SSHRPCClient
import logging
log = logging.getLogger(__name__)
def main():
import os.path
settings_path = os.path.normpath(os.path.join(os.path.dirname(__file__), 'settings.yml'))
with open(settings_path, 'r') as stream:
import yaml
settings = yaml.safe_load(stream)
bootstrapvz_root = os.path.normpath(os.path.join(os.path.dirname(__file__), '../../../'))
import sys
sys.path.append(bootstrapvz_root)
from bootstrapvz.base.log import get_console_handler
console_handler = get_console_handler(debug=True)
root_logger = logging.getLogger()
root_logger.setLevel(logging.NOTSET)
root_logger.addHandler(console_handler)
rpc_server = SSHRPCClient(settings)
try:
rpc_server.start_server()
log.info('connecting to Pyro on remote')
import Pyro4
main_uri = 'PYRO:runner@localhost:{local_port}'.format(local_port=rpc_server.local_port)
main = Pyro4.Proxy(main_uri)
log.info('running command')
remaining_retries = 5
while True:
try:
main.run('eogubhswg')
break
except Pyro4.errors.ConnectionClosedError as e:
if remaining_retries > 0:
remaining_retries -= 1
from time import sleep
sleep(2)
else:
raise e
log.info('stopping server')
rpc_server.stop_server()
except (Exception, KeyboardInterrupt) as e:
log.error(e.__class__.__name__ + ': ' + str(e))
finally:
print 'cleaning up'
rpc_server.cleanup()
if __name__ == '__main__':
main()