components/openstack/neutron/files/evs/migrate/evs-neutron-migration.py
author saurabh.vyas@oracle.com
Fri, 17 Jul 2015 17:41:34 -0700
branchs11u2-sru
changeset 4704 fee46b752e18
parent 4688 fbeba4862f2d
permissions -rw-r--r--
21241598 Juno upgrade may not correctly update neutron information 21444880 When the evs information is empty neutron data model is not created in backend
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4156
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     1
#!/usr/bin/python2.6
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     2
#
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     3
# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     4
#
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License"); you may
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     6
# not use this file except in compliance with the License. You may obtain
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     7
# a copy of the License at
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     8
#
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     9
#      http://www.apache.org/licenses/LICENSE-2.0
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    10
#
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    13
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    14
# License for the specific language governing permissions and limitations
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    15
# under the License.
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    16
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    17
#
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    18
# This script migrates the network, subnet and port information from EVS DB to
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    19
# neutron-server DB. It also re-creates routers and floatingips tables with
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    20
# Neutron's l3 schema. This script needs to be run for the proper upgrade of
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    21
# Neutron from Havana to Juno release.
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    22
#
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    23
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    24
import ConfigParser
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    25
import rad.connect as radcon
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    26
import rad.bindings.com.oracle.solaris.rad.evscntl as evsc
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    27
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    28
from neutron import context as ctx
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    29
from neutron.db import common_db_mixin
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    30
from neutron.db import api as db
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    31
from neutron.db import model_base
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    32
from neutron.plugins.evs.migrate import havana_api
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    33
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    34
import sqlalchemy as sa
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    35
from sqlalchemy import MetaData
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    36
from sqlalchemy.orm import sessionmaker
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    37
from sqlalchemy.schema import DropConstraint
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    38
from sqlalchemy import sql
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    39
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    40
from oslo.config import cfg
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    41
from oslo.db import options as db_options
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    42
from oslo.db import exception as excp
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    43
4380
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    44
import time
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    45
4156
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    46
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    47
def create_db_network(nw, engine, ext_ro):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    48
    ''' Method for creating networks table in the neutron-server DB
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    49
        Input params:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    50
        @nw - Dictionary with values from EVS DB
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    51
        @engine - SQL engine
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    52
        @ext_ro - External router
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    53
    '''
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    54
    # Importing locally because these modules end up importing neutron.wsgi
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    55
    # which causes RAD to hang
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    56
    from neutron.db import db_base_plugin_v2
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    57
    from neutron.db import external_net_db as ext_net
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    58
    model_base.BASEV2.metadata.bind = engine
4380
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    59
    for _none in range(60):
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    60
        try:
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    61
            model_base.BASEV2.metadata.create_all(engine)
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    62
            break
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    63
        except sa.exc.OperationalError as err:
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    64
            # mysql is not ready. sleep for 2 more seconds
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    65
            time.sleep(2)
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    66
    else:
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    67
        print "Unable to connect to MySQL:  %s" % err
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    68
        print ("Please verify MySQL is properly configured and online "
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    69
               "before using svcadm(1M) to clear this service.")
2ac4d1fcad4a PSARC/2015/233 OpenStack Common Package
Drew Fisher <drew.fisher@oracle.com>
parents: 4156
diff changeset
    70
        raise RuntimeError
4156
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    71
    ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    72
    inst = db_base_plugin_v2.NeutronDbPluginV2()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    73
    dup = False
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    74
    try:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    75
        db_base_plugin_v2.NeutronDbPluginV2.create_network(inst, ctxt, nw)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    76
        print "\nnetwork=%s added" % nw['network']['name']
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    77
        if ext_ro:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    78
            ext_nw = ext_net.ExternalNetwork(network_id=nw['network']['id'])
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    79
            session = sessionmaker()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    80
            session.configure(bind=engine)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    81
            s = session()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    82
            s.add(ext_nw)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    83
            s.commit()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    84
    except excp.DBDuplicateEntry:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    85
        print "\nnetwork '%s' already exists" % nw['network']['name']
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    86
        dup = True
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    87
    return dup
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    88
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    89
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    90
def create_db_subnet(sub):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    91
    ''' Method for creating subnets table in the neutron-server DB
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    92
        Input params:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    93
        @sub - Dictionary with values from EVS DB
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    94
    '''
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    95
    # Importing locally because this module ends up importing neutron.wsgi
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    96
    # which causes RAD to hang
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    97
    from neutron.db import db_base_plugin_v2
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    98
    ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    99
    inst = db_base_plugin_v2.NeutronDbPluginV2()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   100
    try:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   101
        db_base_plugin_v2.NeutronDbPluginV2.create_subnet(inst, ctxt, sub)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   102
        print "\nsubnet=%s added" % sub['subnet']['id']
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   103
    except excp.DBDuplicateEntry:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   104
        print "\nsubnet '%s' already exists" % sub['subnet']['id']
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   105
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   106
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   107
def create_db_port(port):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   108
    ''' Method for creating ports table in the neutron-server DB
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   109
        Input params:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   110
        @port - Dictionary with values from EVS DB
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   111
    '''
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   112
    # Importing locally because this module ends up importing neutron.wsgi
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   113
    # which causes RAD to hang
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   114
    from neutron.db import db_base_plugin_v2
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   115
    ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   116
    inst = db_base_plugin_v2.NeutronDbPluginV2()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   117
    try:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   118
        db_base_plugin_v2.NeutronDbPluginV2.create_port(inst, ctxt, port)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   119
        print "\nport=%s added" % port['port']['id']
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   120
    except excp.DBDuplicateEntry:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   121
        print "\nport '%s' already exists" % port['port']['id']
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   122
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   123
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   124
def main():
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   125
    print "Start Migration."
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   126
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   127
    # Connect to EVS controller
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   128
    config = ConfigParser.RawConfigParser()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   129
    config.readfp(open("/etc/neutron/plugins/evs/evs_plugin.ini"))
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   130
    if config.has_option("EVS", 'evs_controller'):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   131
        config_suh = config.get("EVS", 'evs_controller')
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   132
    else:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   133
        config_suh = 'ssh://evsuser@localhost'
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   134
    suh = config_suh.split('://')
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   135
    if len(suh) != 2 or suh[0] != 'ssh' or not suh[1].strip():
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   136
        raise SystemExit(_("Specified evs_controller is invalid"))
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   137
    uh = suh[1].split('@')
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   138
    if len(uh) != 2 or not uh[0].strip() or not uh[1].strip():
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   139
        raise SystemExit(_("'user' and 'hostname' need to be specified "
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   140
                           "for evs_controller"))
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   141
    try:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   142
        rc = radcon.connect_ssh(uh[1], user=uh[0])
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   143
    except:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   144
        raise SystemExit(_("Cannot connect to EVS Controller"))
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   145
    try:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   146
        evs_contr = rc.get_object(evsc.EVSController())
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   147
    except:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   148
        raise SystemExit(_("Could not retrieve EVS info from EVS Controller"))
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   149
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   150
    config.readfp(open("/etc/neutron/neutron.conf"))
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   151
    if config.has_option("database", 'connection'):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   152
        SQL_CONNECTION = config.get("database", 'connection')
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   153
    else:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   154
        SQL_CONNECTION = 'sqlite:////var/lib/neutron/neutron.sqlite'
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   155
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   156
    conf = cfg.CONF
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   157
    db_options.set_defaults(cfg.CONF,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   158
                            connection=SQL_CONNECTION,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   159
                            sqlite_db='', max_pool_size=10,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   160
                            max_overflow=20, pool_timeout=10)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   161
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   162
    neutron_engine = sa.create_engine(SQL_CONNECTION)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   163
    router_port_ids = {}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   164
4704
fee46b752e18 21241598 Juno upgrade may not correctly update neutron information
saurabh.vyas@oracle.com
parents: 4688
diff changeset
   165
    evsinfo = evs_contr.getEVSInfo()
4156
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   166
    for e in evsinfo:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   167
        ext_ro = False
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   168
        for p in e.props:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   169
            if p.name == 'OpenStack:router:external' and p.value == 'True':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   170
                ext_ro = True
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   171
        # Populate networks table
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   172
        n = {
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   173
            'tenant_id': e.tenantname,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   174
            'id': e.uuid,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   175
            'name': e.name,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   176
            'status': 'ACTIVE',
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   177
            'admin_state_up': True,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   178
            'shared': False
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   179
            }
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   180
        nw = {'network': n}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   181
        dup = create_db_network(nw, neutron_engine, ext_ro)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   182
        if dup:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   183
            continue  # No need to iterate over subnets and ports
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   184
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   185
        # Populate subnets table
4473
9ef7eed37f24 21101942 EVS to Neutron migration script should check for empty IPnets and VPorts list
Padma Dakoju <padma.dakoju@oracle.com>
parents: 4380
diff changeset
   186
        if not e.ipnets:
9ef7eed37f24 21101942 EVS to Neutron migration script should check for empty IPnets and VPorts list
Padma Dakoju <padma.dakoju@oracle.com>
parents: 4380
diff changeset
   187
            continue
4156
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   188
        for i in e.ipnets:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   189
            cidr = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   190
            gateway_ip = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   191
            enable_dhcp = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   192
            dns = []
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   193
            host = []
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   194
            start = []
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   195
            for p in i.props:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   196
                if p.name == 'subnet':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   197
                    cidr = p.value
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   198
                elif p.name == 'defrouter':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   199
                    gateway_ip = p.value
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   200
                elif p.name == 'OpenStack:enable_dhcp':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   201
                    enable_dhcp = p.value == 'True'
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   202
                elif p.name == 'OpenStack:dns_nameservers':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   203
                    dns = p.value.split(',')
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   204
                elif p.name == 'OpenStack:host_routes':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   205
                    hh = p.value.split(',')
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   206
                    for h in range(0, len(hh), 2):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   207
                        d = {hh[h]: hh[h+1]}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   208
                        host.append(d)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   209
                elif p.name == 'pool':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   210
                    ss = p.value.split(',')
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   211
                    for s in ss:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   212
                        if '-' in s:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   213
                            d = {'start': s.split('-')[0],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   214
                                 'end': s.split('-')[1]}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   215
                            start.append(d)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   216
                        else:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   217
                            d = {'start': s, 'end': s}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   218
                            start.append(d)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   219
            ip_version = 4 if i.ipvers == evsc.IPVersion.IPV4 else 6
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   220
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   221
            if i.name.startswith(i.uuid[:8]):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   222
                # Skip autogenerated names
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   223
                name = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   224
            else:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   225
                name = i.name
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   226
            s = {
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   227
                'tenant_id': i.tenantname,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   228
                'id': i.uuid,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   229
                'name': name,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   230
                'network_id': e.uuid,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   231
                'ip_version': ip_version,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   232
                'cidr': cidr,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   233
                'gateway_ip': gateway_ip,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   234
                'enable_dhcp': enable_dhcp,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   235
                'shared': False,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   236
                'allocation_pools': start,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   237
                'dns_nameservers': dns,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   238
                'host_routes': host
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   239
                }
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   240
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   241
            sub = {'subnet': s}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   242
            create_db_subnet(sub)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   243
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   244
        # Populate ports table
4473
9ef7eed37f24 21101942 EVS to Neutron migration script should check for empty IPnets and VPorts list
Padma Dakoju <padma.dakoju@oracle.com>
parents: 4380
diff changeset
   245
        if not e.vports:
9ef7eed37f24 21101942 EVS to Neutron migration script should check for empty IPnets and VPorts list
Padma Dakoju <padma.dakoju@oracle.com>
parents: 4380
diff changeset
   246
            continue
4156
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   247
        for j in e.vports:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   248
            device_owner = ''
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   249
            device_id = ''
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   250
            mac_address = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   251
            ipaddr = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   252
            for v in j.props:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   253
                if v.name == 'OpenStack:device_owner':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   254
                    device_owner = v.value
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   255
                    if v.value in ('network:router_interface',
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   256
                                   'network:router_gateway'):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   257
                        router_port_ids[j.uuid] = v.value
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   258
                elif v.name == 'OpenStack:device_id':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   259
                    device_id = v.value
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   260
                elif v.name == 'macaddr':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   261
                    mac_address = v.value
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   262
                elif v.name == 'ipaddr':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   263
                    ipaddr = v.value.split('/')[0]
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   264
            if j.name.startswith(j.uuid[:8]):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   265
                # Skip autogenerated names
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   266
                name = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   267
            else:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   268
                name = j.name
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   269
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   270
            p = {
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   271
                'tenant_id': j.tenantname,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   272
                'id': j.uuid,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   273
                'name': name,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   274
                'network_id': e.uuid,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   275
                'mac_address': mac_address,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   276
                'admin_state_up': True,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   277
                'status': 'ACTIVE',
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   278
                'device_id': device_id,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   279
                'device_owner': device_owner,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   280
                'fixed_ips': [{'subnet_id': e.ipnets[0].uuid,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   281
                               'ip_address': ipaddr}]
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   282
                }
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   283
            port = {'port': p}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   284
            create_db_port(port)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   285
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   286
    # Change the schema of the floatingips and routers tables by doing
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   287
    # the following:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   288
    #     Fetch the floatingip, router entry using EVS API,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   289
    #     Temporarily store the information,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   290
    #     Delete floatingip, router entry,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   291
    #     Remove floatingip, router as a constraint from existing tables,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   292
    #     Drop the routers, floatingips table,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   293
    #     Add router, floatingip entry using Neutron API
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   294
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   295
    # Importing locally because this module ends up importing neutron.wsgi
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   296
    # which causes RAD to hang
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   297
    from neutron.db import l3_db
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   298
    havana_api.configure_db()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   299
    session = havana_api.get_session()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   300
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   301
    # Fetch the floatingip entry using EVS API
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   302
    query = session.query(havana_api.FloatingIP)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   303
    floatingips = query.all()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   304
    fl = []
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   305
    if floatingips:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   306
        for f in floatingips:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   307
            fi = {
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   308
                'id': f['id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   309
                'floating_ip_address': f['floating_ip_address'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   310
                'floating_network_id': f['floating_network_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   311
                'floating_port_id': f['floating_port_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   312
                'fixed_port_id': f['fixed_port_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   313
                'fixed_ip_address': f['fixed_ip_address'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   314
                'tenant_id': f['tenant_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   315
                'router_id': f['router_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   316
                }
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   317
            fl.append(fi)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   318
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   319
        # Delete floatingip entry
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   320
        ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   321
        ctxt = havana_api.get_evs_context(ctxt)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   322
        with ctxt.session.begin(subtransactions=True):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   323
            cm_db_inst = common_db_mixin.CommonDbMixin()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   324
            query = common_db_mixin.CommonDbMixin._model_query(cm_db_inst,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   325
                                                               ctxt,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   326
                                                               havana_api.
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   327
                                                               FloatingIP)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   328
            for fip in query:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   329
                ctxt.session.delete(fip)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   330
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   331
    # Fetch the router entry using EVS API
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   332
    query = session.query(havana_api.Router)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   333
    routers = []
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   334
    try:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   335
        routers = query.all()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   336
    except sa.exc.OperationalError:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   337
        pass
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   338
    if routers:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   339
        for r in routers:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   340
            router_id = r['id']
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   341
            rt = {
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   342
                'tenant_id': r['tenant_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   343
                'id': r['id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   344
                'name': r['name'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   345
                'admin_state_up': r['admin_state_up'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   346
                'gw_port_id': r['gw_port_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   347
                'status': 'ACTIVE'
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   348
                }
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   349
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   350
        # Delete router entry
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   351
        ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   352
        ctxt = havana_api.get_evs_context(ctxt)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   353
        with ctxt.session.begin(subtransactions=True):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   354
            cm_db_inst = common_db_mixin.CommonDbMixin()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   355
            query = common_db_mixin.CommonDbMixin._model_query(cm_db_inst,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   356
                                                               ctxt,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   357
                                                               havana_api.
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   358
                                                               Router)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   359
            router = query.filter(havana_api.Router.id == router_id).one()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   360
            ctxt.session.delete(router)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   361
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   362
    engine = sa.create_engine(SQL_CONNECTION)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   363
    meta = MetaData()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   364
    conn = engine.connect()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   365
    trans = conn.begin()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   366
    meta.reflect(engine)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   367
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   368
    # Remove router as a constraint from existing tables,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   369
    # Drop the routers table to remove old schema
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   370
    for t in meta.tables.values():
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   371
        for fk in t.foreign_keys:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   372
            if fk.column.table.name == "routers":
4704
fee46b752e18 21241598 Juno upgrade may not correctly update neutron information
saurabh.vyas@oracle.com
parents: 4688
diff changeset
   373
                if fk.constraint.name:
fee46b752e18 21241598 Juno upgrade may not correctly update neutron information
saurabh.vyas@oracle.com
parents: 4688
diff changeset
   374
                    engine.execute(DropConstraint(fk.constraint))
4156
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   375
    for t in meta.tables.values():
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   376
        if t.name == "routers":
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   377
            t.drop(bind=conn)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   378
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   379
    # Remove floatingip as a constraint from existing tables,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   380
    # Drop the floatingip table to remove old schema
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   381
    for t in meta.tables.values():
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   382
        for fk in t.foreign_keys:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   383
            if fk.column.table.name == "floatingips":
4704
fee46b752e18 21241598 Juno upgrade may not correctly update neutron information
saurabh.vyas@oracle.com
parents: 4688
diff changeset
   384
                if fk.constraint.name:
fee46b752e18 21241598 Juno upgrade may not correctly update neutron information
saurabh.vyas@oracle.com
parents: 4688
diff changeset
   385
                    engine.execute(DropConstraint(fk.constraint))
4156
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   386
    for t in meta.tables.values():
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   387
        if t.name == "floatingips":
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   388
            t.drop(bind=conn)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   389
    conn.close()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   390
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   391
    # Add the routers and floatingips using the schema in l3_db.py
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   392
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   393
    setattr(l3_db.Router, 'enable_snat', sa.Column(sa.Boolean,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   394
            default=True, server_default=sql.true(), nullable=False))
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   395
    neutron_engine = sa.create_engine(SQL_CONNECTION)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   396
    model_base.BASEV2.metadata.bind = neutron_engine
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   397
    model_base.BASEV2.metadata.create_all(neutron_engine)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   398
    if routers:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   399
        ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   400
        with ctxt.session.begin(subtransactions=True):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   401
            router_db = l3_db.Router(id=router_id,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   402
                                     tenant_id=r['tenant_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   403
                                     name=rt['name'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   404
                                     admin_state_up=rt['admin_state_up'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   405
                                     gw_port_id=rt['gw_port_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   406
                                     status="ACTIVE")
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   407
            ctxt.session.add(router_db)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   408
            print "\nrouter=%s updated" % rt['name']
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   409
        with ctxt.session.begin(subtransactions=True):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   410
            for i, j in router_port_ids.iteritems():
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   411
                router_port = l3_db.RouterPort(
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   412
                    port_id=i,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   413
                    router_id=router_id,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   414
                    port_type=j)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   415
                ctxt.session.add(router_port)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   416
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   417
    if floatingips:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   418
        ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   419
        with ctxt.session.begin(subtransactions=True):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   420
            for i in fl:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   421
                fl_db = l3_db.FloatingIP(
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   422
                    id=i['id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   423
                    floating_ip_address=i['floating_ip_address'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   424
                    floating_network_id=i['floating_network_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   425
                    floating_port_id=i['floating_port_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   426
                    fixed_port_id=i['fixed_port_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   427
                    fixed_ip_address=i['fixed_ip_address'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   428
                    router_id=i['router_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   429
                    tenant_id=i['tenant_id'])
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   430
                ctxt.session.add(fl_db)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   431
                print "\nfloatingip=%s updated" % i['floating_ip_address']
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   432
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   433
    print "\nEnd Migration."
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   434
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   435
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   436
if __name__ == '__main__':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   437
    main()