X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=vim_thread.py;fp=vim_thread.py;h=5460523b0b7e5e412230ba1a95d638e7f608d0d9;hb=42026a022e4ff54d4670ea65b821838a70243771;hp=0000000000000000000000000000000000000000;hpb=0a3fc475690c26c63fb61269315dc17e05584b55;p=osm%2FRO.git diff --git a/vim_thread.py b/vim_thread.py new file mode 100644 index 00000000..5460523b --- /dev/null +++ b/vim_thread.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- + +## +# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U. +# This file is part of openvim +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# For those usages not covered by the Apache License, Version 2.0 please +# contact with: nfvlabs@tid.es +## + +''' +This is thread that interact with the host and the libvirt to manage VM +One thread will be launched per host +''' +__author__ = "Alfonso Tierno" +__date__ = "$10-feb-2017 12:07:15$" + +import threading +import time +import Queue +import logging +import vimconn + + + +# from logging import Logger +# import auxiliary_functions as af + +# TODO: insert a logging system + + +class vim_thread(threading.Thread): + + def __init__(self, vimconn, name=None): + '''Init a thread. + Arguments: + 'id' number of thead + 'name' name of thread + 'host','user': host ip or name to manage and user + 'db', 'db_lock': database class and lock to use it in exclusion + ''' + threading.Thread.__init__(self) + self.vim = vimconn + if not name: + self.name = vimconn["id"] + "-" + vimconn["config"]["datacenter_tenant_id"] + else: + self.name = name + + self.logger = logging.getLogger('openmano.vim.'+self.name) + + self.queueLock = threading.Lock() + self.taskQueue = Queue.Queue(2000) + + + def insert_task(self, task, *aditional): + try: + self.queueLock.acquire() + task = self.taskQueue.put( (task,) + aditional, timeout=5) + self.queueLock.release() + return 1, None + except Queue.Full: + return -1, "timeout inserting a task over host " + self.name + + def run(self): + self.logger.debug("Starting") + while True: + #TODO reload service + while True: + self.queueLock.acquire() + if not self.taskQueue.empty(): + task = self.taskQueue.get() + else: + task = None + self.queueLock.release() + + if task is None: + now=time.time() + time.sleep(1) + continue + + if task[0] == 'instance': + pass + elif task[0] == 'image': + pass + elif task[0] == 'exit': + print self.name, ": processing task exit" + self.terminate() + return 0 + elif task[0] == 'reload': + print self.name, ": processing task reload terminating and relaunching" + self.terminate() + break + elif task[0] == 'edit-iface': + pass + elif task[0] == 'restore-iface': + pass + elif task[0] == 'new-ovsbridge': + pass + elif task[0] == 'new-vxlan': + pass + elif task[0] == 'del-ovsbridge': + pass + elif task[0] == 'del-vxlan': + pass + elif task[0] == 'create-ovs-bridge-port': + pass + elif task[0] == 'del-ovs-port': + pass + else: + self.logger.error("unknown task %s", str(task)) + + self.logger.debug("Finishing") + + def terminate(self): + pass +