X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Flinux%2Fapplication.py;h=e73c867fec4509452461849cb32bc62adcb2c97a;hb=e55924b6886bd7382a28e1ae235c4810f852e163;hp=35a78849485d1ce9d43f1c05ded78effdc188a99;hpb=327c0ed98930e561cf240a2e4d0b2ddd2d4c1c84;p=nepi.git diff --git a/src/nepi/resources/linux/application.py b/src/nepi/resources/linux/application.py index 35a78849..e73c867f 100644 --- a/src/nepi/resources/linux/application.py +++ b/src/nepi/resources/linux/application.py @@ -3,9 +3,8 @@ # 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 @@ -20,7 +19,7 @@ from nepi.execution.attribute import Attribute, Flags, Types from nepi.execution.trace import Trace, TraceAttr from nepi.execution.resource import ResourceManager, clsinit_copy, \ - ResourceState, reschedule_delay + ResourceState from nepi.resources.linux.node import LinuxNode from nepi.util.sshfuncs import ProcStatus from nepi.util.timefuncs import tnow, tdiffsec @@ -81,9 +80,9 @@ class LinuxApplication(ResourceManager): """ - _rtype = "LinuxApplication" + _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): @@ -355,7 +354,6 @@ class LinuxApplication(ResourceManager): # 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) @@ -526,8 +524,8 @@ class LinuxApplication(ResourceManager): # 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.ec.schedule(reschedule_delay, self.deploy) + self.debug("---- RESCHEDULING DEPLOY ---- node state %s " % self.node.state) + self.ec.schedule(self.reschedule_delay, self.deploy) else: command = self.get("command") or "" self.info("Deploying command '%s' " % command) @@ -720,40 +718,49 @@ class LinuxApplication(ResourceManager): 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):