def __init__(self, broker=None): self.configuration = Configuration() self._broker_host = broker self._connections = dict() self._channels = dict() self._message_handler = None
def runKubeImpl_local(message): configuration = Configuration("config/config.ini") kubernetes = KubernetesClass() # get hostname node_name = socket.gethostname() print(node_name + " " + socket.gethostbyname(node_name)) # check exist namespaces and create this namespace = kubernetes.get_namespace(configuration.NAMESPACE) if namespace == None or namespace.status.phase != "Active": kubernetes.create_namespace_if_not_exist(configuration.NAMESPACE) # TODO: fare in modo che cambia il file video nello yaml leggendo in fileRequest fileNameMod = vlc_yamlManager.modified_localVideo( path.join(path.dirname(__file__), configuration.YAML_FOLDER + "video-gui-local-video.yaml"), message.components[1]['parameter']) # local run pod #podNameVideoLocal = kubernetes.create_pod(path.join(path.dirname(__file__), configuration.YAML_FOLDER + "video-gui-local-video.yaml"),configuration.NAMESPACE) podNameVideoLocal = kubernetes.create_pod( path.join(path.dirname(__file__), fileNameMod), configuration.NAMESPACE) return podNameVideoLocal
def_yaml['spec']['template']['spec']['containers'][0]['resources'][ 'requests'] = adv_app_component['function']['resources'] def_yaml['spec']['template']['spec']['containers'][0]['resources'][ 'limits'] = adv_app_component['function']['resources'] if adv_app_component['parameters'] is not None: for param_type in adv_app_component['parameters']: def_yaml['spec']['template']['spec']['containers'][0]['args'][0] = \ def_yaml['spec']['template']['spec']['containers'][0]['args'][0].replace( '{' + param_type + '}', str(adv_app_component['parameters'][param_type])) return def_yaml if __name__ == '__main__': # configuration configuration = Configuration("config/config.ini") # kubernetes class kubernetes = KubernetesClass() # init queue shared_queue_res = Queue() shared_queue_adv = Queue() shared_queue_user_req = Queue() # init messaging messaging_result = Messaging_result("localhost", shared_queue_res) messaging_adv = Messaging_adv("localhost", shared_queue_adv, shared_queue_user_req) # run controller drone
def __init__(self, broker=None,queue=None): # init messaging self._messaging = Messaging(broker) self._message_handler = None self.configuration = Configuration("config/config.ini") self.output_queue = queue # queue for read result message
def __init__(self, broker=None, queueAdv=None, queueUser=None): self._messaging = Messaging(broker) self._message_handler = None self.configuration = Configuration("config/config.ini") self.output_queue = queueAdv # queue for read adv message self.output_queue_user = queueUser # queue for read user request
set_policy = 'rabbitmqctl set_policy --apply-to exchanges ' + configuration.POLICY_NAME + ' "' + configuration.PATTERN + '" \'{"federation-upstream-set":"' + configuration.SET_NAME + '"}\'' cmd = os.popen(set_policy).read() print(cmd) def new_rabbitMQ_user(username, password): add_user_command = 'rabbitmqctl add_user ' + username + ' ' + password cmd = os.popen(add_user_command).read() print(cmd) set_user_tag = 'rabbitmqctl set_user_tags ' + username + ' administrator' cmd = os.popen(set_user_tag).read() print(cmd) set_permissions = 'rabbitmqctl set_permissions -p / ' + username + ' ".*" ".*" ".*"' cmd = os.popen(set_permissions).read() print(cmd) if __name__ == '__main__': # [ Configuration ] CONF_FILE = 'config/default-config.ini' configuration = Configuration(CONF_FILE) username = configuration.USERNAME password = configuration.PASSWORD peers = [["rabbit1", "10.0.0.1"], ["rabbit2", "10.0.0.2"]] new_rabbitMQ_user(username=username, password=password) federation(username=username, password=password, peers=peers)
def runKubeExample(): app_possible = ['VLC'] configuration = Configuration("config/config.ini") kubernetes = KubernetesClass() # Definizione della condition variable per il file global request cv = threading.Condition() node_name = socket.gethostname() print(node_name + " " + socket.gethostbyname(node_name)) # Risorse direttamente da os # print(psutil.cpu_percent()) # print(psutil.cpu_count()) # print(psutil.virtual_memory()) # print(Utils.memory()) # print(Utils.memory()['free']) # check exist namespaces and create this namespace = kubernetes.get_namespace(configuration.NAMESPACE) if namespace == None or namespace.status.phase != "Active": kubernetes.create_namespace_if_not_exist(configuration.NAMESPACE) base_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0])) \ .rpartition('/')[0] if os.path.isfile(path.join(path.dirname(__file__), configuration.REQUEST)): # Arriva la richiesta dell'utente la parsifico e decido cosa fare request = parse_json.parse_json_file( path.join(path.dirname(__file__), configuration.REQUEST)) print("Request:") print(request) # if next(iter(request)) not in app_possible: # print("ERROR: Sorry app not yet possible...") # exit(1) else: print("no file") exit(1) # Posso eseguire tutta l'app? # calcolo totale delle risorse necessarie ecc memoryRequired = 0 cpuRequred = 0 app = next(iter(request)) for service in request[app]: memoryRequired += request[app][service]['resources']['memory'] cpuRequred += request[app][service]['resources']['cpu'] values = psutil.virtual_memory() available = values.available >> 20 # display in MB format if memoryRequired < available and cpuRequred < psutil.cpu_count( ) and 1 == 2: # posso eseguire tutto podNameVideoLocal = kubernetes.create_pod( path.join(path.dirname(__file__), configuration.YAML_FOLDER + "video-gui-local-video.yaml"), configuration.NAMESPACE) return podNameVideoLocal else: # non posso eseguire tutto io: creo il problema in dragon --> Avvertisement # parte dragon --> soluzione (so cosa deve deployare ogni nodo) # threadDragon = threading.Thread(name='ThreadDragon', target=dragonOrchestrator, args=(cv,)) # threadDragon.start() # threadDragon.join() result = parse_json.parse_json_file( path.join(path.dirname(__file__), configuration.RESULT)) print(result) order_services = [] node_services = [] for app in result: order_services = result[app] for service in result[app]: if service[2] == node_name: node_services.append(service) # node_services contiene i servizi da deployare su questo nodo: [0] image, [1] name, [2] node print(node_services) def sortKey(val): return val[3] order_services.sort(key=sortKey) # order_services ci sono i servizi ordinati in base a come devono essere deployati print(order_services) threadDeploy = threading.Thread( name='ThreadDeploy1', target=deployTask, args=(kubernetes, cv, path.join(path.dirname(__file__), "YamlFiles/video-streamer.yaml"))) threadDeploy.start() threadDeploy.join() # i task devono essere deployati in ordine. controllo se ci sono if len( node_services ) != 0: # se ho qualcosa da eseguire controllo se quelli prima di me hanno fatto podStreamer_info = None priority = node_services[0][3] for i in range(1, priority): podStreamer_info = kubernetes.get_pod_info( order_services[0][1]) while podStreamer_info.status.pod_ip == None: sleep(1) podStreamer_info = kubernetes.get_pod_info( order_services[0][1]) print(podStreamer_info.status.pod_ip) # creo yaml con ip giusto nameNewFile = vlc_yamlManager.modifiedIp_vlcGUI( path.join( path.dirname(__file__), configuration.YAML_FOLDER + node_services[0][1] + ".yaml"), podStreamer_info.status.pod_ip) # faccio threadDeploy = threading.Thread(name='ThreadDeploy', target=deployTask, args=(kubernetes, cv, path.join( path.dirname(__file__), nameNewFile))) threadDeploy.start() threadDeploy.join() return ["video-gui", "video-streamer"]
def runKubeImpl_distribuitedPods(message): podsRun = [] configuration = Configuration("config/config.ini") kubernetes = KubernetesClass() # get hostname node_name = socket.gethostname() print(node_name + " " + socket.gethostbyname(node_name)) # check exist namespaces and create this namespace = kubernetes.get_namespace(configuration.NAMESPACE) if namespace == None or namespace.status.phase != "Active": kubernetes.create_namespace_if_not_exist(configuration.NAMESPACE) # TODO: fare in modo che cambia il file video nello yaml leggendo in fileRequest # TODO: da cambiare quando si ha una soluzione effettiva di drone... fare come per message!! result = parse_json.parse_json_file( path.join(path.dirname(__file__), configuration.RESULT)) print(result) order_services = [] node_services = [] for app in result: order_services = result[app] for service in result[app]: if service[2] == node_name: node_services.append(service) # node_services contiene i servizi da deployare su questo nodo: [0] image, [1] name, [2] node, [3] priority print(node_services) def sortKey(val): return val[3] order_services.sort(key=sortKey) # order_services ci sono i servizi ordinati in base a come devono essere deployati print(order_services) # run pod for streaming podStreamer_info = kubernetes.create_pod( path.join(path.dirname(__file__), configuration.YAML_FOLDER + "video-streamer.yaml"), configuration.NAMESPACE) podsRun.append(podStreamer_info) # i task devono essere deployati in ordine. controllo se ci sono if len( node_services ) != 0: # se ho qualcosa da eseguire controllo se quelli prima di me hanno fatto podStreamer_info = None priority = node_services[0][3] for i in range(1, priority): podStreamer_info = kubernetes.get_pod_info(order_services[0][1]) while podStreamer_info.status.pod_ip == None: sleep(1) podStreamer_info = kubernetes.get_pod_info( order_services[0][1]) print(podStreamer_info.status.pod_ip) # creo yaml con ip giusto nameNewFile = vlc_yamlManager.modifiedIp_vlcGUI( path.join( path.dirname(__file__), configuration.YAML_FOLDER + node_services[0][1] + ".yaml"), podStreamer_info.status.pod_ip) podGui_info = kubernetes.create_pod( path.join(path.dirname(__file__), nameNewFile), configuration.NAMESPACE) podsRun.append(podGui_info) return podsRun