import vim_db
import logging
# import imp
+import os.path
import argparse
from netaddr import IPNetwork
from jsonschema import validate as js_v, exceptions as js_e
__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
+__version__ = "0.5.13-r529"
+version_date = "May 2017"
+database_version = 18 #needed database schema version
HTTP_Bad_Request = 400
HTTP_Unauthorized = 401
self.logger = logging.getLogger(self.logger_name)
self.db = None
self.db = self._create_database_connection()
- self.db_lock = None
- self.db_of = None
self.of_test_mode = False
def _create_database_connection(self):
# if self.running_info:
# return #TODO service can be checked and rebuild broken threads
r = self.db.get_db_version()
+ db_path = __file__
+ db_path = db_path[:db_path.rfind("/")]
+ if os.path.exists(db_path + "/database_utils/migrate_vim_db.sh"):
+ db_path += "/database_utils"
+ else:
+ db_path += "/../database_utils"
+
if r[0] < 0:
- raise ovimException("DATABASE is not a VIM one or it is a '0.0' version. Try to upgrade to version '{}' with "\
- "'./database_utils/migrate_vim_db.sh'".format(database_version) )
- elif r[1] != database_version:
- raise ovimException("DATABASE wrong version '{}'. Try to upgrade/downgrade to version '{}' with "\
- "'./database_utils/migrate_vim_db.sh'".format(r[1], database_version) )
+ raise ovimException("DATABASE is not valid. If you think it is corrupted, you can init it with"
+ " '{db_path}/init_vim_db.sh' script".format(db_path=db_path))
+ elif r[0] != database_version:
+ raise ovimException("DATABASE wrong version '{current}'. Try to upgrade/downgrade to version '{target}'"
+ " with '{db_path}/migrate_vim_db.sh {target}'".format(
+ current=r[0], target=database_version, db_path=db_path))
self.logger.critical("Starting ovim server version: '{} {}' database version '{}'".format(
self.get_version(), self.get_version_date(), self.get_database_version()))
# create database connection for openflow threads
- self.db_of = self._create_database_connection()
- self.config["db"] = self.db_of
- self.db_lock = threading.Lock()
- self.config["db_lock"] = self.db_lock
+ self.config["db"] = self._create_database_connection()
+ self.config["db_lock"] = threading.Lock()
self.of_test_mode = False if self.config['mode'] == 'normal' or self.config['mode'] == "OF only" else True
# precreate interfaces; [bridge:<host_bridge_name>, VLAN used at Host, uuid of network camping in this bridge,
dhcp_params = self.config.get("dhcp_server")
if dhcp_params:
thread = dt.dhcp_thread(dhcp_params=dhcp_params, test=host_test_mode, dhcp_nets=self.config["dhcp_nets"],
- db=self.db_of, db_lock=self.db_lock, logger_name=self.logger_name + ".dhcp",
+ db=self.config["db"], db_lock=self.config["db_lock"],
+ logger_name=self.logger_name + ".dhcp",
debug=self.config.get('log_level_of'))
thread.start()
self.config['dhcp_thread'] = thread
self.config['host_threads'] = {}
for host in hosts:
host['image_path'] = '/opt/VNF/images/openvim'
- 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.config["db"],
+ db_lock=self.config["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,
logger_name=self.logger_name + ".host." + host['name'],
debug=self.config.get('log_level_host'))
# ofc_net_same_vlan = False
ofc_net_same_vlan = False
- thread = oft.openflow_thread(ofc_uuid, of_conn, of_test=self.of_test_mode, db=self.db_of, db_lock=self.db_lock,
- pmp_with_same_vlan=ofc_net_same_vlan, debug=self.config['log_level_of'])
+ thread = oft.openflow_thread(ofc_uuid, of_conn, of_test=self.of_test_mode, db=self.config["db"],
+ db_lock=self.config["db_lock"],
+ pmp_with_same_vlan=ofc_net_same_vlan,
+ logger_name=self.logger_name + ".ofc." + ofc_uuid,
+ debug=self.config.get('log_level_of'))
#r, c = thread.OF_connector.obtain_port_correspondence()
#if r < 0:
# raise ovimException("Cannot get openflow information %s", c)
net_vlan = network.get("vlan")
net_bind_net = network.get("bind_net")
net_bind_type = network.get("bind_type")
+ net_region = network.get("region")
name = network["name"]
# check if network name ends with :<vlan_tag> and network exist in order to make and automated bindning
net_vlan = bridge_net[1]
elif net_type == 'bridge_data' or net_type == 'bridge_man' and self.config['network_type'] == 'ovs':
net_provider = 'OVS'
+ if not net_region:
+ if net_type == "data" or net_type == "ptp":
+ net_region = "__DATA__"
+ elif net_provider == "OVS":
+ net_region = "__OVS__"
if not net_vlan and (net_type == "data" or net_type == "ptp" or net_provider == "OVS"):
- net_vlan = self.db.get_free_net_vlan()
+ net_vlan = self.db.get_free_net_vlan(net_region)
if net_vlan < 0:
raise ovimException("Error getting an available vlan", HTTP_Internal_Server_Error)
if net_provider == 'OVS':
network['provider'] = net_provider
network['type'] = net_type
network['vlan'] = net_vlan
+ network['region'] = net_region
dhcp_integrity = True
if 'enable_dhcp' in network and network['enable_dhcp']:
dhcp_integrity = self._check_dhcp_data_integrity(network)
host_develop_mode = True if self.config['mode'] == 'development' else False
dhcp_host = ht.host_thread(name='openvim_controller', user=ovs_controller_user, host=controller_ip,
- db=self.db_of,
- db_lock=self.db_lock, test=host_test_mode,
+ db=self.config["db"], db_lock=self.config["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, logger_name=self.logger_name + ".host.controller",
+ develop_bridge_iface=bridge_ifaces,
+ logger_name=self.logger_name + ".host.controller",
debug=self.config.get('log_level_host'))
-
+ dhcp_host.start()
self.config['host_threads']['openvim_controller'] = dhcp_host
if not host_test_mode:
dhcp_host.ssh_connect()