better parsing of user answers
[osm/openvim.git] / osm_openvim / ovim.py
index 39ab578..a0c380d 100755 (executable)
 # contact with: nfvlabs@tid.es
 ##
 
 # contact with: nfvlabs@tid.es
 ##
 
-'''
+"""
 This is the thread for the http server North API. 
 Two thread will be launched, with normal and administrative permissions.
 This is the thread for the http server North API. 
 Two thread will be launched, with normal and administrative permissions.
-'''
-
-__author__ = "Alfonso Tierno, Leonardo Mirabal"
-__date__ = "$06-Feb-2017 12:07:15$"
-__version__ = "0.5.10-r526"
-version_date = "Apr 2017"
-database_version = "0.17"      #expected database schema version
+"""
 
 import threading
 
 import threading
-import osm_openvim.vim_db as vim_db
+import vim_db
 import logging
 import logging
-import imp
+import imp
 import argparse
 from netaddr import IPNetwork
 from jsonschema import validate as js_v, exceptions as js_e
 import argparse
 from netaddr import IPNetwork
 from jsonschema import validate as js_v, exceptions as js_e
-import osm_openvim.host_thread as ht
-import osm_openvim.dhcp_thread as dt
-import osm_openvim.openflow_thread as oft
-import osm_openvim.openflow_conn as openflow_conn
+import host_thread as ht
+import dhcp_thread as dt
+import openflow_thread as oft
+import openflow_conn
 
 
+__author__ = "Alfonso Tierno, Leonardo Mirabal"
+__date__ = "$06-Feb-2017 12:07:15$"
+__version__ = "0.5.11-r527"
+version_date = "Apr 2017"
+database_version = "0.17"      #expected database schema version
 
 HTTP_Bad_Request =          400
 HTTP_Unauthorized =         401
 
 HTTP_Bad_Request =          400
 HTTP_Unauthorized =         401
@@ -249,7 +248,9 @@ class ovim():
             thread = ht.host_thread(name=host['name'], user=host['user'], host=host['ip_name'], db=self.db_of,
                                     db_lock=self.db_lock, test=host_test_mode, image_path=self.config['image_path'],
                                     version=self.config['version'], host_id=host['uuid'], develop_mode=host_develop_mode,
             thread = ht.host_thread(name=host['name'], user=host['user'], host=host['ip_name'], db=self.db_of,
                                     db_lock=self.db_lock, test=host_test_mode, image_path=self.config['image_path'],
                                     version=self.config['version'], host_id=host['uuid'], develop_mode=host_develop_mode,
-                                    develop_bridge_iface=host_develop_bridge_iface)
+                                    develop_bridge_iface=host_develop_bridge_iface,
+                                    logger_name=self.logger_name + ".host." + host['name'],
+                                    debug=self.config.get('log_level_host'))
             thread.start()
             self.config['host_threads'][host['uuid']] = thread
 
             thread.start()
             self.config['host_threads'][host['uuid']] = thread
 
@@ -369,27 +370,29 @@ class ovim():
                 module = temp_dict['of_controller']
 
             if module not in ovim.of_module:
                 module = temp_dict['of_controller']
 
             if module not in ovim.of_module:
-                module_info = imp.find_module(module)
-                of_conn_module = imp.load_module("OF_conn", *module_info)
-                ovim.of_module[module] = of_conn_module
+                for base in ("", "osm_openvim.", "lib_osm_openvim."):
+                    try:
+                        pkg = __import__(base + module)
+                        if base:
+                            of_conn_module = getattr(pkg, module)
+                        else:
+                            of_conn_module = pkg
+                        ovim.of_module[module] = of_conn_module
+                        self.logger.debug("Module load from {}".format(base + module))
+                        break
+                    except Exception as e:
+                        self.logger.warning("Module {} not found {}".format(base + module, e))
+                else:
+                    self.logger.error("Cannot open openflow controller module of type '%s'", module)
+                    raise ovimException("Cannot open openflow controller of type module '{}'"
+                                        "Revise it is installed".format(module),
+                                        HTTP_Internal_Server_Error)
             else:
                 of_conn_module = ovim.of_module[module]
             else:
                 of_conn_module = ovim.of_module[module]
-
-            try:
-                return of_conn_module.OF_conn(temp_dict)
-            except Exception as e:
-                self.logger.error("Cannot open the Openflow controller '%s': %s", type(e).__name__, str(e))
-                if module_info and module_info[0]:
-                    file.close(module_info[0])
-                raise ovimException("Cannot open the Openflow controller '{}': '{}'".format(type(e).__name__, str(e)),
-                                    HTTP_Internal_Server_Error)
-        except (IOError, ImportError) as e:
-            if module_info and module_info[0]:
-                file.close(module_info[0])
-            self.logger.error("Cannot open openflow controller module '%s'; %s: %s; revise 'of_controller' "
-                              "field of configuration file.", module, type(e).__name__, str(e))
-            raise ovimException("Cannot open openflow controller module '{}'; {}: {}; revise 'of_controller' "
-                                "field of configuration file.".format(module, type(e).__name__, str(e)),
+            return of_conn_module.OF_conn(temp_dict)
+        except Exception as e:
+            self.logger.error("Cannot open the Openflow controller '%s': %s", type(e).__name__, str(e))
+            raise ovimException("Cannot open the Openflow controller '{}': '{}'".format(type(e).__name__, str(e)),
                                 HTTP_Internal_Server_Error)
 
     def _create_ofc_thread(self, of_conn, ofc_uuid="Default"):
                                 HTTP_Internal_Server_Error)
 
     def _create_ofc_thread(self, of_conn, ofc_uuid="Default"):
@@ -1342,7 +1345,8 @@ class ovim():
                                    db_lock=self.db_lock, test=host_test_mode,
                                    image_path=self.config['image_path'], version=self.config['version'],
                                    host_id='openvim_controller', develop_mode=host_develop_mode,
                                    db_lock=self.db_lock, test=host_test_mode,
                                    image_path=self.config['image_path'], version=self.config['version'],
                                    host_id='openvim_controller', develop_mode=host_develop_mode,
-                                   develop_bridge_iface=bridge_ifaces)
+                                   develop_bridge_iface=bridge_ifaces, logger_name=self.logger_name + ".host.controller",
+                                   debug=self.config.get('log_level_host'))
 
         self.config['host_threads']['openvim_controller'] = dhcp_host
         if not host_test_mode:
 
         self.config['host_threads']['openvim_controller'] = dhcp_host
         if not host_test_mode: