Back to home page

EIC code displayed by LXR

 
 

    


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     # get queue
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     # get middleware
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     # get ssh parameters
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     # ssh
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")