21241598 Juno upgrade may not correctly update neutron information s11u2-sru
authorsaurabh.vyas@oracle.com
Fri, 17 Jul 2015 17:41:34 -0700
branchs11u2-sru
changeset 4704 fee46b752e18
parent 4694 0715c1f72362
child 4705 19671f39ce55
21241598 Juno upgrade may not correctly update neutron information 21444880 When the evs information is empty neutron data model is not created in backend
components/openstack/neutron/files/evs/migrate/evs-neutron-migration.py
components/openstack/neutron/files/neutron-upgrade
--- a/components/openstack/neutron/files/evs/migrate/evs-neutron-migration.py	Wed Jul 22 23:19:15 2015 -0700
+++ b/components/openstack/neutron/files/evs/migrate/evs-neutron-migration.py	Fri Jul 17 17:41:34 2015 -0700
@@ -146,10 +146,6 @@
         evs_contr = rc.get_object(evsc.EVSController())
     except:
         raise SystemExit(_("Could not retrieve EVS info from EVS Controller"))
-    evsinfo = evs_contr.getEVSInfo()
-    if not evsinfo:
-        print "No data to migrate"
-        return
 
     config.readfp(open("/etc/neutron/neutron.conf"))
     if config.has_option("database", 'connection'):
@@ -166,6 +162,7 @@
     neutron_engine = sa.create_engine(SQL_CONNECTION)
     router_port_ids = {}
 
+    evsinfo = evs_contr.getEVSInfo()
     for e in evsinfo:
         ext_ro = False
         for p in e.props:
@@ -373,7 +370,8 @@
     for t in meta.tables.values():
         for fk in t.foreign_keys:
             if fk.column.table.name == "routers":
-                engine.execute(DropConstraint(fk.constraint))
+                if fk.constraint.name:
+                    engine.execute(DropConstraint(fk.constraint))
     for t in meta.tables.values():
         if t.name == "routers":
             t.drop(bind=conn)
@@ -383,7 +381,8 @@
     for t in meta.tables.values():
         for fk in t.foreign_keys:
             if fk.column.table.name == "floatingips":
-                engine.execute(DropConstraint(fk.constraint))
+                if fk.constraint.name:
+                    engine.execute(DropConstraint(fk.constraint))
     for t in meta.tables.values():
         if t.name == "floatingips":
             t.drop(bind=conn)
--- a/components/openstack/neutron/files/neutron-upgrade	Wed Jul 22 23:19:15 2015 -0700
+++ b/components/openstack/neutron/files/neutron-upgrade	Fri Jul 17 17:41:34 2015 -0700
@@ -44,7 +44,6 @@
     ('keystone_authtoken', 'admin_user'),
     ('keystone_authtoken', 'admin_password'),
     ('keystone_authtoken', 'signing_dir'),
-    ('database', 'connection'),
 ]
 
 
@@ -91,7 +90,16 @@
         sys.exit(smf_include.SMF_EXIT_OK)
 
     # look for any .new files
+    db_connection = None
     if glob.glob('/etc/neutron/*.new'):
+        # extract sql_connection from evs_plugin.ini
+        db_connection = 'sqlite:////var/lib/neutron/neutron.sqlite'
+        evs_ini = iniparse.RawConfigParser()
+        evs_ini.read('/etc/neutron/plugins/evs/evs_plugin.ini')
+        if evs_ini.has_section('DATABASE'):
+            if evs_ini.has_option('DATABASE', 'sql_connection'):
+                db_connection = evs_ini.get('DATABASE', 'sql_connection')
+
         # the versions are different, so perform an upgrade
         # modify the configuration files
 
@@ -113,7 +121,21 @@
     # In certain cases the database section does not exist and the
     # default database chosen is sqlite.
     if config.has_section('database'):
-        db_connection = config.get('database', 'connection')
+        if db_connection:
+            config.set('database', 'connection', db_connection)
+            with open('/etc/neutron/neutron.conf', 'wb+') as fh:
+                config.write(fh)
+            if 'sqlite' in db_connection:
+                print "WARNING: Neutron database is on sqlite"
+                print "which is not a supported backend for"
+                print "Solaris Openstack. Please make sure"
+                print "to migrate to MySQL after upgrade to Juno"
+        # Need this else part because this code path is exercised
+        # during fresh install of Juno, when the
+        # [database].connection is set to default mysql
+        else:
+            db_connection = config.get('database', 'connection')
+
         engine = sqlalchemy.create_engine(db_connection)
 
         # migrate EVS to Neutron db