diff options
author | Pedro Alvarez <pedro.alvarez@codethink.co.uk> | 2016-03-13 16:41:32 +0000 |
---|---|---|
committer | Pedro Alvarez <pedro.alvarez@codethink.co.uk> | 2016-03-27 11:53:02 +0000 |
commit | 587f68d422c27ac0267253adedadfa1ce9c5ceca (patch) | |
tree | f19df81f2130aaa8521ce04617ea8bd818e4a2de | |
parent | c527bf1c7da1f54cced68e7af25483e9db89baf5 (diff) | |
download | morph-587f68d422c27ac0267253adedadfa1ce9c5ceca.tar.gz |
first attempt paramiko
Change-Id: Iea6523d7ee6fde41cffb2dc4b55aae7f59806c39
-rw-r--r-- | gear/worker.py | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/gear/worker.py b/gear/worker.py index d1e961aa..8b782be5 100644 --- a/gear/worker.py +++ b/gear/worker.py @@ -9,6 +9,53 @@ import json from subprocess import Popen, PIPE, STDOUT import distbuild +from contextlib import contextmanager +import paramiko + +import logging +logging.basicConfig() + + +@contextmanager +def ssh_manager(host, port, username, key): + ''' + returns -> ssh connection ready to be used + ''' + connected = False + + t = paramiko.Transport((host, port)) +use client?? http://docs.paramiko.org/en/1.16/api/client.html + t.start_client() + + try: + ki = paramiko.RSAKey.from_private_key_file(key) + except Exception, e: + print 'Failed loading' % (key, e) + raise e + + agent = paramiko.Agent() + agent_keys = agent.get_keys() + (ki,) + if len(agent_keys) == 0: + print 'No agent keys found in %s!!' % (key) + return + + for key in agent_keys: + print 'Trying ssh-agent key %s' % key.get_fingerprint().encode('hex'), + try: + t.auth_publickey(username, key) + print '... success!' + connected = True + continue + except paramiko.SSHException, e: + print '... failed!', e + + try: + if connected: + yield t + else: + yield False + finally: + t.close() while True: print "DEBUG: Waiting for job" @@ -56,5 +103,10 @@ while True: if kind == 'stratum': suffixes.append(filename + '.meta') - + + with ssh_manager('localhost', 22, 'root', '/root/gerritbot/gerritbot_rsa') as conn: + print conn job.sendWorkComplete(artifact.cache_key) + + + |