X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Flinux%2Ftraceroute.py;h=b9cdf991d5bbf2fcad5c3429c0c62579625b8988;hb=6285ca51026efb69642eea9dfc7c480e722d84a9;hp=80ca3b9395bc28dd19a188e8bf8322e0f3cfd4da;hpb=c50d24eafb5cf584404ec5dbaee7b200e1db3e13;p=nepi.git diff --git a/src/nepi/resources/linux/traceroute.py b/src/nepi/resources/linux/traceroute.py index 80ca3b93..b9cdf991 100644 --- a/src/nepi/resources/linux/traceroute.py +++ b/src/nepi/resources/linux/traceroute.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 @@ -18,15 +17,16 @@ # Author: Alina Quereilhac from nepi.execution.attribute import Attribute, Flags, Types -from nepi.execution.resource import clsinit_copy +from nepi.execution.resource import clsinit_copy, ResourceState from nepi.resources.linux.application import LinuxApplication from nepi.util.timefuncs import tnow import os +import socket @clsinit_copy class LinuxTraceroute(LinuxApplication): - _rtype = "LinuxTraceroute" + _rtype = "linux::Traceroute" @classmethod def _register_attributes(cls): @@ -34,34 +34,70 @@ class LinuxTraceroute(LinuxApplication): "Run traceroute in a while loop", type = Types.Bool, default = False, - flags = Flags.ExecReadOnly) + flags = Flags.Design) print_timestamp = Attribute("printTimestamp", "Print timestamp before running traceroute", type = Types.Bool, default = False, - flags = Flags.ExecReadOnly) + flags = Flags.Design) + + use_ip = Attribute("useIP", + "Use the IP address instead of the host domain name. " + "Useful for environments were dns resolution problems occur " + "frequently", + type = Types.Bool, + default = False, + flags = Flags.Design) target = Attribute("target", "Traceroute target host (host that will be pinged)", - flags = Flags.ExecReadOnly) + flags = Flags.Design) + + early_start = Attribute("earlyStart", + "Start ping as early as deployment. ", + type = Types.Bool, + default = False, + flags = Flags.Design) cls._register_attribute(countinuous) cls._register_attribute(print_timestamp) + cls._register_attribute(use_ip) cls._register_attribute(target) + cls._register_attribute(early_start) def __init__(self, ec, guid): super(LinuxTraceroute, self).__init__(ec, guid) self._home = "traceroute-%s" % self.guid - def deploy(self): + def upload_start_command(self): + super(LinuxTraceroute, self).upload_start_command() + + if self.get("earlyStart") == True: + self._run_in_background() + + def do_deploy(self): if not self.get("command"): self.set("command", self._start_command) if not self.get("depends"): self.set("depends", "traceroute") - super(LinuxTraceroute, self).deploy() + super(LinuxTraceroute, self).do_deploy() + + def do_start(self): + if self.get("earlyStart") == True: + if self.state == ResourceState.READY: + command = self.get("command") + self.info("Starting command '%s'" % command) + + self.set_started() + else: + msg = " Failed to execute command '%s'" % command + self.error(msg, out, err) + raise RuntimeError(msg) + else: + super(LinuxTraceroute, self).do_start() @property def _start_command(self): @@ -71,9 +107,14 @@ class LinuxTraceroute(LinuxApplication): if self.get("printTimestamp") == True: args.append("""echo "`date +'%Y%m%d%H%M%S'`";""") args.append("traceroute") - args.append(self.get("target")) + + target = self.get("target") + if self.get("useIP") == True: + target = socket.gethostbyname(target) + args.append(target) + if self.get("continuous") == True: - args.append("; done ") + args.append("; sleep 2 ; done ") command = " ".join(args)