File indexing completed on 2026-04-20 07:59:01
0001 import argparse
0002 import sys
0003
0004 from pandaharvester.harvestercore.queue_config_mapper import QueueConfigMapper
0005 from pandaharvester.harvestermiddleware.ssh_tunnel_pool import sshTunnelPool
0006
0007
0008 def main():
0009 parser = argparse.ArgumentParser()
0010 parser.add_argument("--queueName", action="store", dest="queueName", default=None, required=True, help="the name of queue where harvester is installed")
0011 parser.add_argument("--middleware", action="store", dest="middleware", default="rpc", help="middleware to access the remote target machine")
0012 options = parser.parse_args()
0013
0014
0015 qcm = QueueConfigMapper()
0016 qcm.load_data()
0017 queueConfig = qcm.get_queue(options.queueName)
0018 if queueConfig is None:
0019 print(f"ERROR: queue={options.queueName} not found in panda_queueconfig.json")
0020 sys.exit(1)
0021
0022
0023 if not hasattr(queueConfig, options.middleware):
0024 print(f"ERROR: middleware={options.middleware} is not defined for {options.queueName} in panda_queueconfig.json")
0025 sys.exit(1)
0026 middleware = getattr(queueConfig, options.middleware)
0027
0028
0029 sshHost = middleware["remoteHost"]
0030 try:
0031 sshPort = middleware["remotePort"]
0032 except Exception:
0033 sshPort = 22
0034 sshUserName = middleware["sshUserName"]
0035 try:
0036 sshPassword = middleware["sshPassword"]
0037 except Exception:
0038 sshPassword = None
0039
0040 privateKey = None
0041 passPhrase = None
0042 if sshPassword is None:
0043 try:
0044 privateKey = middleware["privateKey"]
0045 except Exception:
0046 print(f"ERROR: set sshPassword or privateKey in middleware={options.middleware}")
0047 sys.exit(1)
0048 try:
0049 passPhrase = middleware["passPhrase"]
0050 except Exception:
0051 passPhrase = None
0052
0053 try:
0054 jumpHost = middleware["jumpHost"]
0055 except Exception:
0056 jumpHost = None
0057 try:
0058 jumpPort = middleware["jumpPort"]
0059 except Exception:
0060 jumpPort = 22
0061
0062
0063 sshTunnelPool.make_tunnel_server(
0064 sshHost,
0065 sshPort,
0066 remote_bind_port=middleware["remoteBindPort"],
0067 num_tunnels=1,
0068 ssh_username=sshUserName,
0069 ssh_password=sshPassword,
0070 private_key=privateKey,
0071 pass_phrase=passPhrase,
0072 jump_host=jumpHost,
0073 jump_port=jumpPort,
0074 )
0075 ssh = sshTunnelPool.get_tunnel(sshHost, sshPort)[-1]
0076 return ssh
0077
0078
0079 if __name__ == "__main__":
0080 ssh = main()
0081 if ssh is None:
0082 print("ERROR: failed to make an SSH tunnel. See ssh_tunnel_pool.log for more details")
0083 else:
0084 print("OK")