X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Flinux%2Fnode.py;h=047dfe96d52369667521f812d18996703e6af9bf;hb=dceafc553de152296b99e8c2f4b3fef1321bd7ef;hp=8ad69f32fdaa4014a823b0901230e4047ab96eca;hpb=e0447bc7e91d169d6d88498981421572d939b6fb;p=nepi.git diff --git a/src/nepi/resources/linux/node.py b/src/nepi/resources/linux/node.py index 8ad69f32..047dfe96 100644 --- a/src/nepi/resources/linux/node.py +++ b/src/nepi/resources/linux/node.py @@ -28,6 +28,7 @@ import collections import os import random import re +import socket import tempfile import time import threading @@ -194,6 +195,9 @@ class LinuxNode(ResourceManager): gateway = Attribute("gateway", "Hostname of the gateway machine", flags = Flags.Design) + ip = Attribute("ip", "Linux host public IP address", + flags = Flags.NoWrite) + cls._register_attribute(hostname) cls._register_attribute(username) cls._register_attribute(port) @@ -206,6 +210,7 @@ class LinuxNode(ResourceManager): cls._register_attribute(tear_down) cls._register_attribute(gateway_user) cls._register_attribute(gateway) + cls._register_attribute(ip) def __init__(self, ec, guid): super(LinuxNode, self).__init__(ec, guid) @@ -278,8 +283,7 @@ class LinuxNode(ResourceManager): if self._os: return self._os - if self.get("hostname") not in ["localhost", "127.0.0.1"] and \ - not self.get("username"): + if not self.localhost and not self.get("username"): msg = "Can't resolve OS, insufficient data " self.error(msg) raise RuntimeError, msg @@ -333,7 +337,7 @@ class LinuxNode(ResourceManager): @property def localhost(self): - return self.get("hostname") in ['localhost', '127.0.0.7', '::1'] + return self.get("hostname") in ['localhost', '127.0.0.1', '::1'] def do_provision(self): # check if host is alive @@ -362,6 +366,14 @@ class LinuxNode(ResourceManager): self.mkdir(paths) + # Get Public IP address + if self.localhost: + ip = socket.gethostbyname(socket.gethostname()) + else: + ip = socket.gethostbyname(self.get("hostname")) + + self.set("ip", ip) + super(LinuxNode, self).do_provision() def do_deploy(self): @@ -404,8 +416,8 @@ class LinuxNode(ResourceManager): def clean_processes(self): self.info("Cleaning up processes") - - if self.get("hostname") in ["localhost", "127.0.0.2"]: + + if self.localhost: return if self.get("username") != 'root': @@ -418,15 +430,19 @@ class LinuxNode(ResourceManager): pids_temp = dict() ps_aux = "ps aux |awk '{print $2,$11}'" (out, err), proc = self.execute(ps_aux) - for line in out.strip().split("\n"): - parts = line.strip().split(" ") - pids_temp[parts[0]] = parts[1] - kill_pids = set(pids_temp.items()) - set(pids.items()) - kill_pids = ' '.join(dict(kill_pids).keys()) - - cmd = ("killall tcpdump || /bin/true ; " + - "kill $(ps aux | grep '[n]epi' | awk '{print $2}') || /bin/true ; " + - "kill %s || /bin/true ; " % kill_pids) + if len(out) != 0: + for line in out.strip().split("\n"): + parts = line.strip().split(" ") + pids_temp[parts[0]] = parts[1] + kill_pids = set(pids_temp.items()) - set(pids.items()) + kill_pids = ' '.join(dict(kill_pids).keys()) + + cmd = ("killall tcpdump || /bin/true ; " + + "kill $(ps aux | grep '[n]epi' | awk '{print $2}') || /bin/true ; " + + "kill %s || /bin/true ; " % kill_pids) + else: + cmd = ("killall tcpdump || /bin/true ; " + + "kill $(ps aux | grep '[n]epi' | awk '{print $2}') || /bin/true ; ") else: cmd = ("killall tcpdump || /bin/true ; " + "kill $(ps aux | grep '[n]epi' | awk '{print $2}') || /bin/true ; ") @@ -701,7 +717,8 @@ class LinuxNode(ResourceManager): if err: msg = " Failed to upload files - src: %s dst: %s" % (";".join(src), dst) self.error(msg, out, err) - + + msg = "%s out: %s err: %s" % (msg, out, err) if raise_on_error: raise RuntimeError, msg