Exemplo n.º 1
0
    def __init__(self, broker=None):
        self.configuration = Configuration()

        self._broker_host = broker
        self._connections = dict()
        self._channels = dict()
        self._message_handler = None
Exemplo n.º 2
0
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
Exemplo n.º 3
0
    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
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
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"]
Exemplo n.º 8
0
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