Merge "new option --screen at basictest to force launching in a screen"
authorgarciadeblas <gerardo.garciadeblas@telefonica.com>
Tue, 27 Sep 2016 09:38:58 +0000 (11:38 +0200)
committerGerrit Code Review <root@osm.etsi.org>
Tue, 27 Sep 2016 09:38:58 +0000 (11:38 +0200)
database_utils/init_mano_db.sh
database_utils/migrate_mano_db.sh
db_base.py
nfvo.py
nfvo_db.py
openmano
openmanod.cfg
openmanod.py
scripts/install-openmano.sh

index 9fc9b75..224269b 100755 (executable)
@@ -98,7 +98,7 @@ DBHOST_="-h$DBHOST"
 DBPORT_="-P$DBPORT"
 
 TEMPFILE="$(mktemp -q --tmpdir "initmanodb.XXXXXX")"
-trap 'rm -f "$TEMPFILE"' EXIT SIGINT SIGTERM
+trap 'rm -f "$TEMPFILE"' EXIT
 chmod 0600 "$TEMPFILE"
 cat >"$TEMPFILE" <<EOF
 [client]
index 4131c9c..447eb81 100755 (executable)
@@ -111,7 +111,7 @@ OPENMANO_VER_NUM=`printf "%d%03d%03d" ${VERSION_1} ${VERSION_2} ${VERSION_3}`
 
 #Creating temporary file
 TEMPFILE="$(mktemp -q --tmpdir "migratemanodb.XXXXXX")"
-trap 'rm -f "$TEMPFILE"' EXIT SIGINT SIGTERM
+trap 'rm -f "$TEMPFILE"' EXIT
 chmod 0600 "$TEMPFILE"
 cat >"$TEMPFILE" <<EOF
 [client]
@@ -182,6 +182,7 @@ DATABASE_TARGET_VER_NUM=0
 [ $OPENMANO_VER_NUM -ge 4043 ] && DATABASE_TARGET_VER_NUM=11  #0.4.43=>  11
 [ $OPENMANO_VER_NUM -ge 4046 ] && DATABASE_TARGET_VER_NUM=12  #0.4.46=>  12
 [ $OPENMANO_VER_NUM -ge 4047 ] && DATABASE_TARGET_VER_NUM=13  #0.4.47=>  13
+[ $OPENMANO_VER_NUM -ge 4057 ] && DATABASE_TARGET_VER_NUM=14  #0.4.57=>  14
 #TODO ... put next versions here
 
 
@@ -625,6 +626,20 @@ function downgrade_from_13(){
     echo "DELETE FROM schema_version WHERE version_int='13';" | $DBCMD || ! echo "ERROR. Aborted!" || exit -1
 }
 
+function upgrade_to_14(){
+    echo "    upgrade database from version 0.13 to version 0.14"
+    echo "      remove unique index vim_net_id, instance_scenario_id at table 'instance_nets'"
+    echo "ALTER TABLE instance_nets DROP INDEX vim_net_id_instance_scenario_id;"  | $DBCMD || ! echo "ERROR. Aborted!" || exit -1
+    echo "ALTER TABLE instance_nets CHANGE COLUMN external created ENUM('true','false') NOT NULL DEFAULT 'false' COMMENT 'Created or already exists at VIM' AFTER multipoint;" | $DBCMD || ! echo "ERROR. Aborted!" || exit -1
+    echo "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (14, '0.14', '0.4.57', 'remove unique index vim_net_id, instance_scenario_id', '2016-09-26');" | $DBCMD || ! echo "ERROR. Aborted!" || exit -1
+}
+function downgrade_from_14(){
+    echo "    downgrade database from version 0.14 to version 0.13"
+    echo "      remove cloud_config at 'scenarios', 'instance_scenarios'"
+    echo "ALTER TABLE instance_nets ADD UNIQUE INDEX vim_net_id_instance_scenario_id (vim_net_id, instance_scenario_id);"  | $DBCMD || ! echo "ERROR. Aborted!" || exit -1
+    echo "ALTER TABLE instance_nets CHANGE COLUMN created external ENUM('true','false') NOT NULL DEFAULT 'false' COMMENT 'If external, means that it already exists at VIM' AFTER multipoint;" | $DBCMD || ! echo "ERROR. Aborted!" || exit -1
+    echo "DELETE FROM schema_version WHERE version_int='14';" | $DBCMD || ! echo "ERROR. Aborted!" || exit -1
+}
 
 function upgrade_to_X(){
     echo "      change 'datacenter_nets'"
index 265752f..f6a5c59 100644 (file)
@@ -141,7 +141,7 @@ class db_base_Exception(Exception):
 class db_base():
     tables_with_created_field=()
     
-    def __init__(self, host=None, user=None, passwd=None, database=None, log_name='db', log_level="ERROR"):
+    def __init__(self, host=None, user=None, passwd=None, database=None, log_name='db', log_level=None):
         self.host = host
         self.user = user
         self.passwd = passwd
@@ -149,7 +149,8 @@ class db_base():
         self.con = None
         self.log_level=log_level
         self.logger = logging.getLogger(log_name)
-        self.logger.setLevel( getattr(logging, log_level) )
+        if self.log_level:
+            self.logger.setLevel( getattr(logging, log_level) )
         
     def connect(self, host=None, user=None, passwd=None, database=None):
         '''Connect to specific data base. 
diff --git a/nfvo.py b/nfvo.py
index c27c51e..dd3eb55 100644 (file)
--- a/nfvo.py
+++ b/nfvo.py
@@ -1320,6 +1320,7 @@ def start_scenario(mydb, tenant_id, scenario_id, instance_scenario_name, instanc
                 sce_net['vim_id'] = network_id
                 auxNetDict['scenario'][sce_net['uuid']] = network_id
                 rollbackList.append({'what':'network','where':'vim','vim_id':datacenter_id,'uuid':network_id})
+                sce_net["created"] = True
             else:
                 if sce_net['vim_id'] == None:
                     error_text = "Error, datacenter '%s' does not have external network '%s'." % (datacenter_name, sce_net['name'])
@@ -1353,6 +1354,7 @@ def start_scenario(mydb, tenant_id, scenario_id, instance_scenario_name, instanc
                     auxNetDict[sce_vnf['uuid']] = {}
                 auxNetDict[sce_vnf['uuid']][net['uuid']] = network_id
                 rollbackList.append({'what':'network','where':'vim','vim_id':datacenter_id,'uuid':network_id})
+                net["created"] = True
     
         #print "auxNetDict:"
         #print yaml.safe_dump(auxNetDict, indent=4, default_flow_style=False)
@@ -1820,6 +1822,7 @@ def create_instance(mydb, tenant_id, instance_dict):
                     sce_net["vim_id_sites"][datacenter_id] = network_id
                     auxNetDict['scenario'][sce_net['uuid']][datacenter_id] = network_id
                     rollbackList.append({'what':'network', 'where':'vim', 'vim_id':datacenter_id, 'uuid':network_id})
+                    sce_net["created"] = True
         
     #2. Creating new nets (vnf internal nets) in the VIM"
         #For each vnf net, we create it and we add it to instanceNetlist.
@@ -1843,6 +1846,8 @@ def create_instance(mydb, tenant_id, instance_dict):
                     auxNetDict[sce_vnf['uuid']] = {}
                 auxNetDict[sce_vnf['uuid']][net['uuid']] = network_id
                 rollbackList.append({'what':'network','where':'vim','vim_id':datacenter_id,'uuid':network_id})
+                net["created"] = True
+
     
         #print "auxNetDict:"
         #print yaml.safe_dump(auxNetDict, indent=4, default_flow_style=False)
@@ -2014,7 +2019,7 @@ def delete_instance(mydb, tenant_id, instance_id):
     #2.2 deleting NETS
     #net_fail_list=[]
     for net in instanceDict['nets']:
-        if net['external']:
+        if not net['created']:
             continue #skip not created nets
         if not myvim:
             continue
@@ -2080,7 +2085,7 @@ def refresh_instance(mydb, nfvo_tenant, instanceDict, datacenter=None, vim_tenan
                     if iface["type"]=="mgmt":
                         has_mgmt_iface = True
                 if vm_dict[vm_id]['status'] == "ACTIVE:NoMgmtIP" and not has_mgmt_iface:
-                        vm_dict[vm_id]['status'] = "ACTIVE"
+                    vm_dict[vm_id]['status'] = "ACTIVE"
                 if vm['status'] != vm_dict[vm_id]['status'] or vm.get('error_msg')!=vm_dict[vm_id].get('error_msg') or vm.get('vim_info')!=vm_dict[vm_id].get('vim_info'):
                     vm['status']    = vm_dict[vm_id]['status']
                     vm['error_msg'] = vm_dict[vm_id].get('error_msg')
@@ -2096,16 +2101,16 @@ def refresh_instance(mydb, nfvo_tenant, instanceDict, datacenter=None, vim_tenan
                 # 2.2. Update in openmano DB the interface VMs
                 for interface in interfaces:
                     #translate from vim_net_id to instance_net_id
-                    network_id=None
+                    network_id_list=[]
                     for net in instanceDict['nets']:
                         if net["vim_net_id"] == interface["vim_net_id"]:
-                            network_id = net["uuid"]
-                            break
-                    if not network_id:
+                            network_id_list.append(net["uuid"])
+                    if not network_id_list:
                         continue
                     del interface["vim_net_id"]
-                    try: 
-                        mydb.update_rows('instance_interfaces', UPDATE=interface, WHERE={'instance_vm_id':vm["uuid"], "instance_net_id":network_id})
+                    try:
+                        for network_id in network_id_list:
+                            mydb.update_rows('instance_interfaces', UPDATE=interface, WHERE={'instance_vm_id':vm["uuid"], "instance_net_id":network_id})
                     except db_base_Exception as e:
                         logger.error( "nfvo.refresh_instance error with vm=%s, interface_net_id=%s", vm["uuid"], network_id)        
         
index 5b47f1d..9d3b648 100644 (file)
@@ -39,7 +39,7 @@ tables_with_createdat_field=["datacenters","instance_nets","instance_scenarios",
                            "sce_vnfs","tenants_datacenters","datacenter_tenants","vms","vnfs", "datacenter_nets"]
 
 class nfvo_db(db_base.db_base):
-    def __init__(self, host=None, user=None, passwd=None, database=None, log_name='openmano.db', log_level="ERROR"):
+    def __init__(self, host=None, user=None, passwd=None, database=None, log_name='openmano.db', log_level=None):
         db_base.db_base.__init__(self, host, user, passwd, database, log_name, log_level)
         db_base.db_base.tables_with_created_field=tables_with_createdat_field
         return
@@ -776,7 +776,7 @@ class nfvo_db(db_base.db_base):
                         sce_net_id = net.get("uuid")
                         
                         for datacenter_site_id,vim_id in net["vim_id_sites"].iteritems():
-                            INSERT_={'vim_net_id': vim_id, 'external': net['external'], 'instance_scenario_id':instance_uuid } #,  'type': net['type']
+                            INSERT_={'vim_net_id': vim_id, 'created': net.get('created', False), 'instance_scenario_id':instance_uuid } #,  'type': net['type']
                             INSERT_['datacenter_id'] = datacenter_site_id 
                             INSERT_['datacenter_tenant_id'] = net.get('datacenter_tenant_id', datacenter_tenant_id) #TODO revise
                             if sce_net_id:
@@ -809,7 +809,7 @@ class nfvo_db(db_base.db_base):
                         #instance_nets   #nets intraVNF
                         for net in vnf['nets']:
                             net_scene2instance[ net['uuid'] ] = {}
-                            INSERT_={'vim_net_id': net['vim_id'], 'external': 'false', 'instance_scenario_id':instance_uuid  } #,  'type': net['type']
+                            INSERT_={'vim_net_id': net['vim_id'], 'created': net.get('created', False), 'instance_scenario_id':instance_uuid  } #,  'type': net['type']
                             INSERT_['datacenter_id'] = net.get('datacenter_id', datacenter_site_id) 
                             INSERT_['datacenter_tenant_id'] = net.get('datacenter_tenant_id', datacenter_site_tenant_id)
                             if net.get("uuid"):
@@ -935,7 +935,7 @@ class nfvo_db(db_base.db_base):
                     #from_text = "instance_nets join instance_scenarios on instance_nets.instance_scenario_id=instance_scenarios.uuid " + \
                     #            "join sce_nets on instance_scenarios.scenario_id=sce_nets.scenario_id"
                     #where_text = "instance_nets.instance_scenario_id='"+ instance_dict['uuid'] + "'"
-                    cmd = "SELECT uuid,vim_net_id,status,error_msg,vim_info,external, sce_net_id, net_id as vnf_net_id, datacenter_id, datacenter_tenant_id"\
+                    cmd = "SELECT uuid,vim_net_id,status,error_msg,vim_info,created, sce_net_id, net_id as vnf_net_id, datacenter_id, datacenter_tenant_id"\
                             " FROM instance_nets" \
                             " WHERE instance_scenario_id='{}' ORDER BY created_at".format(instance_dict['uuid'])
                     self.logger.debug(cmd)
@@ -943,7 +943,7 @@ class nfvo_db(db_base.db_base):
                     instance_dict['nets'] = self.cur.fetchall()
                     
                     db_base._convert_datetime2str(instance_dict)
-                    db_base._convert_str2boolean(instance_dict, ('public','shared','external') )
+                    db_base._convert_str2boolean(instance_dict, ('public','shared','created') )
                     return instance_dict
             except (mdb.Error, AttributeError) as e:
                 self._format_error(e, tries)
index 9697bbc..818e717 100755 (executable)
--- a/openmano
+++ b/openmano
@@ -28,8 +28,8 @@ openmano client used to interact with openmano-server (openmanod)
 '''
 __author__="Alfonso Tierno, Gerardo Garcia"
 __date__ ="$09-oct-2014 09:09:48$"
-__version__="0.4.5-r489"
-version_date="Aug 2016"
+__version__="0.4.6-r500"
+version_date="Sep 2016"
 
 from argcomplete.completers import FilesCompleter
 import os
@@ -742,12 +742,12 @@ def instance_scenario_list(args):
                 print "---------------------------------------"
                 print "Internal nets:"
                 for net in instance['nets']:
-                    if not net['external']:
+                    if net['created']:
                         print "    %s %s VIM ID: %s" %(net['uuid'].ljust(38), net['status'].ljust(12), net['vim_net_id'])
                 print "---------------------------------------"
                 print "External nets:"
                 for net in instance['nets']:
-                    if net['external']:
+                    if not net['created']:
                         print "    %s %s VIM ID: %s" %(net['uuid'].ljust(38), net['status'].ljust(12), net['vim_net_id'])
             print "---------------------------------------"
             print "VM instances:"
index 1a10191..4ae845b 100644 (file)
@@ -51,21 +51,21 @@ db_name:   mano_db            # Name of the MANO DB
 #vnf_repository: "./vnfrepo"   # Use an absolute path to avoid misunderstandings 
 
 
-#logging parameters for internal file stororage
+#general logging parameters 
    #choose among: DEBUG, INFO, WARNING, ERROR, CRITICAL
 log_level:         DEBUG  #general log levels for internal logging      
 #standard output is used unless 'log_file' is specify 
 #log_file:          /var/log/openmano/openmano.log
 
-#individual loggin settings
+#individual logging settings
 #log_level_db:      DEBUG  #database log levels
-log_file_db:       /opt/openmano/logs/openmano_db.log
+#log_file_db:       /opt/openmano/logs/openmano_db.log
 #log_level_vim:     DEBUG  #VIM connection log levels
-log_file_vim:      /opt/openmano/logs/openmano_vimconn.log
+#log_file_vim:      /opt/openmano/logs/openmano_vimconn.log
 #log_level_nfvo:    DEBUG  #Main engine log levels
-log_file_nfvo:      /opt/openmano/logs/openmano_nfvo.log
+#log_file_nfvo:      /opt/openmano/logs/openmano_nfvo.log
 #log_level_http:    DEBUG  #Main engine log levels
-log_file_http:      /opt/openmano/logs/openmano_http.log
+#log_file_http:      /opt/openmano/logs/openmano_http.log
 
 #Uncomment to send logs via IP to an external host
 #log_socket_host:   localhost
index 5b67cf0..2becccf 100755 (executable)
@@ -33,9 +33,9 @@ It loads the configuration file and launches the http_server thread that will li
 '''
 __author__="Alfonso Tierno, Gerardo Garcia, Pablo Montes"
 __date__ ="$26-aug-2014 11:09:29$"
-__version__="0.4.55-r497"
+__version__="0.4.58-r501"
 version_date="Sep 2016"
-database_version="0.13"      #expected database schema version
+database_version="0.14"      #expected database schema version
 
 import httpserver
 import time
@@ -62,9 +62,6 @@ def load_configuration(configuration_file):
                      'http_console_proxy': True,
                      'http_console_host': None,
                      'log_level': 'DEBUG',
-                     'log_level_db': 'ERROR',
-                     'log_level_vimconn': 'DEBUG',
-                     'log_level_nfvo': 'DEBUG',
                      'log_socket_port': 9022,
                     }
     try:
@@ -259,7 +256,7 @@ if __name__=="__main__":
         #nfvo.logger = global_config["logger_nfvo"]
         
         # Initialize DB connection
-        mydb = nfvo_db.nfvo_db(log_level=global_config["log_level_db"]);
+        mydb = nfvo_db.nfvo_db();
         if mydb.connect(global_config['db_host'], global_config['db_user'], global_config['db_passwd'], global_config['db_name']) == -1:
             logger.critical("Cannot connect to database %s at %s@%s", global_config['db_name'], global_config['db_user'], global_config['db_host'])
             exit(-1)
index 9ffcdab..d46b22b 100755 (executable)
@@ -267,7 +267,7 @@ echo '
 #################################################################'
 echo -e "\nCreating temporary file form MYSQL installation and initialization"
 TEMPFILE="$(mktemp -q --tmpdir "installopenmano.XXXXXX")"
-trap 'rm -f "$TEMPFILE"' EXIT SIGINT SIGTERM
+trap 'rm -f "$TEMPFILE"' EXIT
 chmod 0600 "$TEMPFILE"
 cat >"$TEMPFILE" <<EOF
 [client]