# Copyright (C) 2013 INRIA
#
# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation;
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
#
# 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 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()
else:
msg = " Failed to execute command '%s'" % command
self.error(msg, out, err)
- raise RuntimeError, msg
+ raise RuntimeError(msg)
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