summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gear/worker.py54
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)
+
+
+