# 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
_rtype = "linux::Application"
_help = "Runs an application on a Linux host with a BASH command "
- _backend_type = "linux"
+ _platform = "linux"
@classmethod
def _register_attributes(cls):
if not node:
msg = "Application %s guid %d NOT connected to Node" % (
self._rtype, self.guid)
- raise RuntimeError, msg
+ raise RuntimeError(msg)
self._node = node[0]
for line in out.strip().split("\n"):
parts = line.strip().split(" ")
procs[parts[0]] = parts[1]
- pickle.dump(procs, open("/tmp/save.proc", "wb"))
+ with open("/tmp/save.proc", "wb") as pickle_file:
+ pickle.dump(procs, pickle_file)
# create run dir for application
self.node.mkdir(self.run_home)
# replace application specific paths in the command
command = self.replace_paths(command)
-
# replace application specific paths in the environment
env = self.get("env")
env = env and self.replace_paths(env)
# Wait until node is associated and deployed
node = self.node
if not node or node.state < ResourceState.READY:
- self.debug("---- RESCHEDULING DEPLOY ---- node state %s " % self.node.state )
+ self.debug("---- RESCHEDULING DEPLOY ---- node state %s " % self.node.state)
self.ec.schedule(self.reschedule_delay, self.deploy)
else:
command = self.get("command") or ""
if self._proc.poll():
self.error(msg, out, err)
- raise RuntimeError, msg
+ raise RuntimeError(msg)
def _run_in_background(self):
command = self.get("command")
if proc.poll():
self.error(msg, out, err)
- raise RuntimeError, msg
+ raise RuntimeError(msg)
# Wait for pid file to be generated
pid, ppid = self.node.wait_pid(self.run_home)
if err:
msg = " Failed to start command '%s' " % command
self.error(msg, out, err)
- raise RuntimeError, msg
+ raise RuntimeError(msg)
def do_stop(self):
""" Stops application execution
return self._state
def execute_command(self, command,
- env = None,
- sudo = False,
- tty = False,
- forward_x11 = False,
- blocking = False):
+ env=None,
+ sudo=False,
+ tty=False,
+ forward_x11=False,
+ blocking=False):
environ = ""
if env:
- environ = self.node.format_environment(env, inline = True)
+ environ = self.node.format_environment(env, inline=True)
command = environ + command
command = self.replace_paths(command)
return self.node.execute(command,
- sudo = sudo,
- tty = tty,
- forward_x11 = forward_x11,
- blocking = blocking)
+ sudo=sudo,
+ tty=tty,
+ forward_x11=forward_x11,
+ blocking=blocking)
- def replace_paths(self, command):
+ def replace_paths(self, command, node=None, app_home=None, run_home=None):
"""
Replace all special path tags with shell-escaped actual paths.
"""
+ if not node:
+ node=self.node
+
+ if not app_home:
+ app_home=self.app_home
+
+ if not run_home:
+ run_home = self.run_home
+
return ( command
- .replace("${USR}", self.node.usr_dir)
- .replace("${LIB}", self.node.lib_dir)
- .replace("${BIN}", self.node.bin_dir)
- .replace("${SRC}", self.node.src_dir)
- .replace("${SHARE}", self.node.share_dir)
- .replace("${EXP}", self.node.exp_dir)
- .replace("${EXP_HOME}", self.node.exp_home)
- .replace("${APP_HOME}", self.app_home)
- .replace("${RUN_HOME}", self.run_home)
- .replace("${NODE_HOME}", self.node.node_home)
- .replace("${HOME}", self.node.home_dir)
+ .replace("${USR}", node.usr_dir)
+ .replace("${LIB}", node.lib_dir)
+ .replace("${BIN}", node.bin_dir)
+ .replace("${SRC}", node.src_dir)
+ .replace("${SHARE}", node.share_dir)
+ .replace("${EXP}", node.exp_dir)
+ .replace("${EXP_HOME}", node.exp_home)
+ .replace("${APP_HOME}", app_home)
+ .replace("${RUN_HOME}", run_home)
+ .replace("${NODE_HOME}", node.node_home)
+ .replace("${HOME}", node.home_dir)
)
def valid_connection(self, guid):