X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Fresources%2Flinux%2Fnode.py;h=7873b97a57fa234e9e4e51ee45dbee48cc35ebfe;hb=86b59802e1320a98db8be3b8ca546d5ffa15023a;hp=6de7cd97e104c46eeefbf5b4c4d39c2e396ab656;hpb=1e2eb157cb569e9c28a5b7888ed97076d27414cb;p=nepi.git diff --git a/src/nepi/resources/linux/node.py b/src/nepi/resources/linux/node.py index 6de7cd97..7873b97a 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,10 @@ class LinuxNode(ResourceManager): gateway = Attribute("gateway", "Hostname of the gateway machine", flags = Flags.Design) + ip = Attribute("ip", "Linux host public IP address. " + "Must not be modified by the user unless hostname is 'localhost'", + flags = Flags.Design) + cls._register_attribute(hostname) cls._register_attribute(username) cls._register_attribute(port) @@ -206,6 +211,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 +284,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 +338,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 +367,19 @@ class LinuxNode(ResourceManager): self.mkdir(paths) + # Get Public IP address if possible + if not self.get("ip"): + if self.localhost: + try: + ip = socket.gethostbyname(socket.gethostname()) + except: + msg = "DNS can not resolve hostname %s" % self.get("hostname") + self.debug(msg) + else: + ip = socket.gethostbyname(self.get("hostname")) + + self.set("ip", ip) + super(LinuxNode, self).do_provision() def do_deploy(self): @@ -404,8 +422,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 +436,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 ; ") @@ -535,7 +557,8 @@ class LinuxNode(ResourceManager): stdout = 'stdout', stderr = 'stderr', sudo = False, - tty = False): + tty = False, + strict_host_checking = False): self.debug("Running command '%s'" % command) @@ -566,7 +589,8 @@ class LinuxNode(ResourceManager): agent = True, identity = self.get("identity"), server_key = self.get("serverKey"), - tty = tty + tty = tty, + strict_host_checking = strict_host_checking ) return (out, err), proc @@ -585,7 +609,8 @@ class LinuxNode(ResourceManager): gw = self.get("gateway"), agent = True, identity = self.get("identity"), - server_key = self.get("serverKey") + server_key = self.get("serverKey"), + strict_host_checking = False ) return pidtuple @@ -604,7 +629,8 @@ class LinuxNode(ResourceManager): gw = self.get("gateway"), agent = True, identity = self.get("identity"), - server_key = self.get("serverKey") + server_key = self.get("serverKey"), + strict_host_checking = False ) return status @@ -629,7 +655,8 @@ class LinuxNode(ResourceManager): agent = True, sudo = sudo, identity = self.get("identity"), - server_key = self.get("serverKey") + server_key = self.get("serverKey"), + strict_host_checking = False ) return (out, err), proc