X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fvim-emu.git;a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Fopenstack%2Fopenstack_api_endpoint.py;h=f554f0c505b7b4f21bcb44386af109325e068210;hp=0235a24e19c146f98e06a29c163911a7f101acc9;hb=ae58801332baaa66ea71c9e233e23f0f68a0afe2;hpb=00199782de7042b51927bbbac5540d6f671597bb diff --git a/src/emuvim/api/openstack/openstack_api_endpoint.py b/src/emuvim/api/openstack/openstack_api_endpoint.py old mode 100644 new mode 100755 index 0235a24..f554f0c --- a/src/emuvim/api/openstack/openstack_api_endpoint.py +++ b/src/emuvim/api/openstack/openstack_api_endpoint.py @@ -4,6 +4,8 @@ import logging import threading import compute import requests +import socket +import time class OpenstackApiEndpoint(): @@ -55,7 +57,7 @@ class OpenstackApiEndpoint(): logging.info("Connected DCNetwork to API endpoint %s(%s:%d)" % ( self.__class__.__name__, self.ip, self.port)) - def start(self): + def start(self, wait_for_port=False): """ Start all connected OpenStack endpoints that are connected to this API endpoint. """ @@ -66,6 +68,9 @@ class OpenstackApiEndpoint(): thread.daemon = True thread.name = component.__class__ thread.start() + if wait_for_port: + self._wait_for_port(component.ip, component.port) + def stop(self): """ @@ -73,4 +78,19 @@ class OpenstackApiEndpoint(): """ for component in self.openstack_endpoints.values(): url = "http://" + component.ip + ":" + str(component.port) + "/shutdown" - requests.get(url) + try: + requests.get(url) + except: + # seems to be stopped + pass + + def _wait_for_port(self, ip, port): + for i in range(0, 10): + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.settimeout(1) # 1 Second Timeout + r = s.connect_ex((ip, port)) + if r == 0: + break # port is open proceed + else: + logging.warning("Waiting for {}:{} ... ({}/10)".format(ip, port, i + 1)) + time.sleep(1)