#
# Author: Alina Quereilhac <alina.quereilhac@inria.fr>
-from nepi.execution.resource import clsinit_copy, ResourceState, \
- reschedule_delay
+from nepi.execution.resource import clsinit_copy, ResourceState
from nepi.resources.linux.application import LinuxApplication
from nepi.util.timefuncs import tnow, tdiffsec
@clsinit_copy
class LinuxTunnel(LinuxApplication):
- _rtype = "abstract::LinuxTunnel"
+ _rtype = "abstract::linux::Tunnel"
_help = "Constructs a tunnel between two Linux endpoints"
- _backend = "linux"
def __init__(self, ec, guid):
super(LinuxTunnel, self).__init__(ec, guid)
def get_endpoints(self):
""" Returns the list of RM that are endpoints to the tunnel
"""
- connected = []
- for guid in self.connections:
- rm = self.ec.get_resource(guid)
- if hasattr(rm, "udp_connect_command"):
- connected.append(rm)
- return connected
+ raise NotImplementedError
@property
def endpoint1(self):
def run_home(self, endpoint):
return os.path.join(self.app_home(endpoint), self.ec.run_id)
+ def endpoint_mkdir(self, endpoint):
+ endpoint.node.mkdir(self.run_home(endpoint))
+
def initiate_connection(self, endpoint, remote_endpoint):
raise NotImplementedError
def do_provision(self):
# create run dir for tunnel on each node
- self.endpoint1.node.mkdir(self.run_home(self.endpoint1))
- self.endpoint2.node.mkdir(self.run_home(self.endpoint2))
+ self.endpoint_mkdir(self.endpoint1)
+ self.endpoint_mkdir(self.endpoint2)
+ self.debug("Initiate the connection")
# Start 2 step connection
# Initiate connection from endpoint 1 to endpoint 2
data1 = self.initiate_connection(self.endpoint1, self.endpoint2)
# Initiate connection from endpoint 2 to endpoint 1
data2 = self.initiate_connection(self.endpoint2, self.endpoint1)
+ self.debug("Establish the connection")
# Establish connection from endpoint 1 to endpoint 2
self.establish_connection(self.endpoint1, self.endpoint2, data2)
# Establish connection from endpoint 2 to endpoint 1
self.establish_connection(self.endpoint2, self.endpoint1, data1)
+ self.debug("Verify the connection")
# check if connection was successful on both sides
self.verify_connection(self.endpoint1, self.endpoint2)
self.verify_connection(self.endpoint2, self.endpoint1)
def do_deploy(self):
if (not self.endpoint1 or self.endpoint1.state < ResourceState.READY) or \
(not self.endpoint2 or self.endpoint2.state < ResourceState.READY):
- self.ec.schedule(reschedule_delay, self.deploy)
+ self.ec.schedule(self.reschedule_delay, self.deploy)
else:
self.do_discover()
self.do_provision()
def do_stop(self):
""" Stops application execution
"""
+
if self.state == ResourceState.STARTED:
self.info("Stopping tunnel")
return self._state
-
def valid_connection(self, guid):
# TODO: Validate!
return True