components/openstack/neutron/files/evs/migrate/evs-neutron-migration.py
author Danek Duvall <danek.duvall@oracle.com>
Mon, 20 Apr 2015 12:35:51 -0700
branchs11u2-sru
changeset 4156 4b1def16fe9b
child 4364 7e498582e773
child 4380 2ac4d1fcad4a
permissions -rw-r--r--
PSARC 2015/110 OpenStack service updates for Juno PSARC 2014/302 oslo.messaging - OpenStack RPC and notifications PSARC 2014/303 concurrent.futures - high-level Python interface for asynchronous execution PSARC 2014/304 networkx - Python module for complex networks PSARC 2014/305 taskflow - Python module for task execution PSARC 2014/329 pycadf - Python interface for CADF (cloud auditing) PSARC 2014/330 posix_ipc - POSIX IPC primitives for Python PSARC 2014/331 oauthlib - Python implementation of OAuth request-signing logic PSARC 2014/377 noVNC - A browser based VNC client PSARC 2015/058 oslo - OpenStack common libraries (context, db, i18n, middleware, serialization, utils, vmware) PSARC 2015/059 glance_store - Glance storage library PSARC 2015/060 ipaddr - an IPv4/IPv6 manipulation library in Python PSARC 2015/061 simplegeneric - single-dispatch generic Python functions PSARC 2015/062 wsme - Web Services Made Easy PSARC 2015/063 retrying - General purpose Python retrying library PSARC 2015/065 osprofiler - an OpenStack cross-project profiling library PSARC 2015/066 OpenStack client for Sahara (Hadoop as a Service) PSARC 2015/067 keystonemiddleware - Middleware for OpenStack Identity PSARC 2015/068 pyScss - Compiler for the SCSS flavor of the Sass language PSARC 2015/069 django-pyscss - pyScss support for Django PSARC 2015/073 barbicanclient - OpenStack client for Barbican (Key Management) PSARC 2015/074 pysendfile - Python interface to sendfile PSARC 2015/097 ldappool - a connection pool for python-ldap PSARC 2015/098 rfc3986 - URI reference validation module for Python PSARC 2015/102 iniparse - python .ini file parsing module 20667775 OpenStack service updates for Juno (Umbrella) 17511386 sqlalchemy-migrate should lose its bypass-gen tags once sqlalchemy is in the CBE 18293987 /usr/bin/alembic should be shipped 18293992 boto's demo scripts aren't delivered executable 18377642 py.test has a requirement on py 18615101 Horizon should prevent network, subnet, and port names with hyphens in them 18772068 instance failed to launch with NoValidHost but no reason 18887457 openstack shouldn't deliver .po files 18905324 hostname.xml should set config/ignore_dhcp_hostname = true 18961031 Duplicate names for role-create and user-create are allowed 19015363 Users should not be allowed to attempt to create volumes when quota exceed 19044301 boto's dependencies need work 19050335 user appears logged in but unauthorised after horizon reboot 19131218 solaris.css: 'Delete Interface' button in Router pop-up menu broken 19131507 solaris.css: 'Project Limits' section of Launch Instance pop-up menu broken 19144215 Instance manipulation buttons greyed out after all instances terminated 19249066 heat stack-preview doesn't appear to do anything 19313272 Need bottom slidebar in horizon for small browser windows 19439030 'nova migration-list' returns python error 19462265 The Python module oslo.messaging should be added to Userland 19462397 The Python module futures should be added to Userland 19476604 The Python module networkx should be added to Userland 19476953 The Python module taskflow should be added to Userland 19519227 The Python module pycadf should be added to Userland 19557488 The noVNC client should be added to Userland 19582394 The Python module posix_ipc should be added to Userland 19596691 instance failed to launch, cinder hit resource busy in stmfadm 19598430 The Python module oauthlib should be added to Userland 19649055 FC connection fails when the target_lun is assigned 0 19815780 nova package should have dependencies on brand-solaris and brand-solaris-kz 19883623 Image snapshots are missing 'instance_uuid' property 19887874 horizon should set up apache log rotation 19888859 six should enable its tests now. 19987962 Cinder lists additional volumes attached to instance with linuxy device names 20046570 rabbitmq & rad-evs-controller should be added to group package 20052466 remove _ai_health_check() from driver.py now that 18857274 is integrated 20164815 The Python module django-pyscss should be added to Userland 20173049 The Python module retrying should be added to Userland 20174489 The Python module WSME should be added to Userland 20176001 The Python module keystonemiddleware should be added to Userland 20182039 The Python module pysendfile should be added to Userland 20200162 The Python module pyScss should be added to Userland 20202461 Websockify is broken on SPARC because of unnecessary byte swapping 20202582 Solaris zones nova compute driver needs console access support 20222184 horizon doesn't send start request on shutdown instance 20312312 The Python module python-saharaclient should be added to Userland 20388250 problem in SERVICE/GLANCE 20433402 The fix for 20388250 is incomplete 20514287 wrong vnic label name used for dhcp vnic in evs 20596802 The Python module oslo.middleware should be added to Userland 20596803 The Python module barbicanclient should be added to Userland 20596804 The Python module oslo.context should be added to Userland 20596805 The Python module iniparse should be added to Userland 20596806 The Python module oslo.vmware should be added to Userland 20596807 The Python module osprofiler should be added to Userland 20596808 The Python module oslo.i18n should be added to Userland 20596809 The Python module oslo.utils should be added to Userland 20596811 The Python module ipaddr should be added to Userland 20596812 The Python module glance_store should be added to Userland 20596813 The Python module oslo.serialization should be added to Userland 20596814 The Python module oslo.db should be added to Userland 20596815 The Python module simplegeneric should be added to Userland 20602690 The Python module ldappool should be added to Userland 20602722 The Python module rfc3986 should be added to Userland 20638369 compilemessages.py requires GNU msgfmt without calling gmsgfmt 20715741 cinder 2014.2.2 20715742 glance 2014.2.2 20715743 heat 2014.2.2 20715744 horizon 2014.2.2 20715745 keystone 2014.2.2 20715746 neutron 2014.2.2 20715747 nova 2014.2.2 20715748 swift 2.2.2 20715749 alembic 0.7.4 20715750 amqp 1.4.6 20715751 boto 2.34.0 20715752 ceilometerclient 1.0.12 20715753 cinderclient 1.1.1 20715754 cliff 1.9.0 20715756 django 1.4.19 20739229 Update django to 1.4.20 20715757 django_compressor 1.4 20715758 django_openstack_auth 1.1.9 20715759 eventlet 0.15.2 20715761 glanceclient 0.15.0 20715762 greenlet 0.4.5 20715763 heatclient 0.2.12 20715764 keystoneclient 1.0.0 20715765 kombu 3.0.7 20715766 mysql 1.2.5 20715767 netaddr 0.7.13 20715769 netifaces 0.10.4 20715770 neutronclient 2.3.10 20715771 novaclient 2.20.0 20715772 oslo.config 1.6.0 20715773 py 1.4.26 20715774 pyflakes 0.8.1 20715775 pytest 2.6.4 20715776 pytz 2014.10 20715777 requests 2.6.0 20715778 simplejson 3.6.5 20715779 six 1.9.0 20715780 sqlalchemy-migrate 0.9.1 20715781 sqlalchemy 0.9.8 20715782 stevedore 1.2.0 20715783 swiftclient 2.3.1 20715784 tox 1.8.1 20715785 troveclient 1.0.8 20715786 virtualenv 12.0.7 20715787 websockify 0.6.0 20739215 problem in PYTHON-MOD/DJANGO 20739295 problem in PYTHON-MOD/DJANGO 20816861 zone-vnc-console instance goes in to maintenance 20829672 support flat network type in neutron
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
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    44
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    45
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
    46
    ''' 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
    47
        Input params:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    48
        @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
    49
        @engine - SQL engine
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    50
        @ext_ro - External router
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    51
    '''
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    52
    # 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
    53
    # which causes RAD to hang
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    54
    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
    55
    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
    56
    model_base.BASEV2.metadata.bind = engine
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    57
    model_base.BASEV2.metadata.create_all(engine)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    58
    ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    59
    inst = db_base_plugin_v2.NeutronDbPluginV2()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    60
    dup = False
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    61
    try:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    62
        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
    63
        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
    64
        if ext_ro:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    65
            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
    66
            session = sessionmaker()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    67
            session.configure(bind=engine)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    68
            s = session()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    69
            s.add(ext_nw)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    70
            s.commit()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    71
    except excp.DBDuplicateEntry:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    72
        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
    73
        dup = True
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    74
    return dup
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    75
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    76
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    77
def create_db_subnet(sub):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    78
    ''' 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
    79
        Input params:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    80
        @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
    81
    '''
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    82
    # 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
    83
    # which causes RAD to hang
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    84
    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
    85
    ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    86
    inst = db_base_plugin_v2.NeutronDbPluginV2()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    87
    try:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    88
        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
    89
        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
    90
    except excp.DBDuplicateEntry:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    91
        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
    92
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    93
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    94
def create_db_port(port):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    95
    ''' 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
    96
        Input params:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    97
        @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
    98
    '''
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    99
    # 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
   100
    # which causes RAD to hang
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   101
    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
   102
    ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   103
    inst = db_base_plugin_v2.NeutronDbPluginV2()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   104
    try:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   105
        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
   106
        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
   107
    except excp.DBDuplicateEntry:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   108
        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
   109
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   110
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   111
def main():
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   112
    print "Start Migration."
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   113
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   114
    # Connect to EVS controller
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   115
    config = ConfigParser.RawConfigParser()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   116
    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
   117
    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
   118
        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
   119
    else:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   120
        config_suh = 'ssh://evsuser@localhost'
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   121
    suh = config_suh.split('://')
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   122
    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
   123
        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
   124
    uh = suh[1].split('@')
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   125
    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
   126
        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
   127
                           "for evs_controller"))
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   128
    try:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   129
        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
   130
    except:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   131
        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
   132
    try:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   133
        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
   134
    except:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   135
        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
   136
    evsinfo = evs_contr.getEVSInfo()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   137
    if not evsinfo:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   138
        raise SystemExit(_("No data to migrate"))
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   139
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   140
    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
   141
    if config.has_option("database", 'connection'):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   142
        SQL_CONNECTION = config.get("database", 'connection')
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   143
    else:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   144
        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
   145
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   146
    conf = cfg.CONF
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   147
    db_options.set_defaults(cfg.CONF,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   148
                            connection=SQL_CONNECTION,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   149
                            sqlite_db='', max_pool_size=10,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   150
                            max_overflow=20, pool_timeout=10)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   151
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   152
    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
   153
    router_port_ids = {}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   154
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   155
    for e in evsinfo:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   156
        ext_ro = False
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   157
        for p in e.props:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   158
            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
   159
                ext_ro = True
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   160
        # Populate networks table
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   161
        n = {
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   162
            'tenant_id': e.tenantname,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   163
            'id': e.uuid,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   164
            'name': e.name,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   165
            'status': 'ACTIVE',
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   166
            'admin_state_up': True,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   167
            'shared': False
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   168
            }
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   169
        nw = {'network': n}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   170
        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
   171
        if dup:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   172
            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
   173
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   174
        # Populate subnets table
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   175
        for i in e.ipnets:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   176
            cidr = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   177
            gateway_ip = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   178
            enable_dhcp = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   179
            dns = []
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   180
            host = []
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   181
            start = []
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   182
            for p in i.props:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   183
                if p.name == 'subnet':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   184
                    cidr = p.value
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   185
                elif p.name == 'defrouter':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   186
                    gateway_ip = p.value
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   187
                elif p.name == 'OpenStack:enable_dhcp':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   188
                    enable_dhcp = p.value == 'True'
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   189
                elif p.name == 'OpenStack:dns_nameservers':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   190
                    dns = p.value.split(',')
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   191
                elif p.name == 'OpenStack:host_routes':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   192
                    hh = p.value.split(',')
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   193
                    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
   194
                        d = {hh[h]: hh[h+1]}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   195
                        host.append(d)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   196
                elif p.name == 'pool':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   197
                    ss = p.value.split(',')
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   198
                    for s in ss:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   199
                        if '-' in s:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   200
                            d = {'start': s.split('-')[0],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   201
                                 'end': s.split('-')[1]}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   202
                            start.append(d)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   203
                        else:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   204
                            d = {'start': s, 'end': s}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   205
                            start.append(d)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   206
            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
   207
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   208
            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
   209
                # Skip autogenerated names
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   210
                name = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   211
            else:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   212
                name = i.name
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   213
            s = {
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   214
                'tenant_id': i.tenantname,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   215
                'id': i.uuid,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   216
                'name': name,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   217
                'network_id': e.uuid,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   218
                'ip_version': ip_version,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   219
                'cidr': cidr,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   220
                'gateway_ip': gateway_ip,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   221
                'enable_dhcp': enable_dhcp,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   222
                'shared': False,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   223
                'allocation_pools': start,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   224
                'dns_nameservers': dns,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   225
                'host_routes': host
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   226
                }
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   227
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   228
            sub = {'subnet': s}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   229
            create_db_subnet(sub)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   230
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   231
        # Populate ports table
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   232
        for j in e.vports:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   233
            device_owner = ''
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   234
            device_id = ''
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   235
            mac_address = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   236
            ipaddr = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   237
            for v in j.props:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   238
                if v.name == 'OpenStack:device_owner':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   239
                    device_owner = v.value
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   240
                    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
   241
                                   'network:router_gateway'):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   242
                        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
   243
                elif v.name == 'OpenStack:device_id':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   244
                    device_id = v.value
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   245
                elif v.name == 'macaddr':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   246
                    mac_address = v.value
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   247
                elif v.name == 'ipaddr':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   248
                    ipaddr = v.value.split('/')[0]
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   249
            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
   250
                # Skip autogenerated names
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   251
                name = None
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   252
            else:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   253
                name = j.name
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   254
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   255
            p = {
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   256
                'tenant_id': j.tenantname,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   257
                'id': j.uuid,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   258
                'name': name,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   259
                'network_id': e.uuid,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   260
                'mac_address': mac_address,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   261
                'admin_state_up': True,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   262
                'status': 'ACTIVE',
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   263
                'device_id': device_id,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   264
                'device_owner': device_owner,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   265
                '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
   266
                               'ip_address': ipaddr}]
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   267
                }
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   268
            port = {'port': p}
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   269
            create_db_port(port)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   270
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   271
    # 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
   272
    # the following:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   273
    #     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
   274
    #     Temporarily store the information,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   275
    #     Delete floatingip, router entry,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   276
    #     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
   277
    #     Drop the routers, floatingips table,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   278
    #     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
   279
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   280
    # 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
   281
    # which causes RAD to hang
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   282
    from neutron.db import l3_db
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   283
    havana_api.configure_db()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   284
    session = havana_api.get_session()
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
    # 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
   287
    query = session.query(havana_api.FloatingIP)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   288
    floatingips = query.all()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   289
    fl = []
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   290
    if floatingips:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   291
        for f in floatingips:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   292
            fi = {
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   293
                'id': f['id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   294
                '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
   295
                '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
   296
                '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
   297
                '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
   298
                '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
   299
                'tenant_id': f['tenant_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   300
                'router_id': f['router_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   301
                }
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   302
            fl.append(fi)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   303
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   304
        # Delete floatingip entry
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   305
        ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   306
        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
   307
        with ctxt.session.begin(subtransactions=True):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   308
            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
   309
            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
   310
                                                               ctxt,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   311
                                                               havana_api.
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   312
                                                               FloatingIP)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   313
            for fip in query:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   314
                ctxt.session.delete(fip)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   315
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   316
    # 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
   317
    query = session.query(havana_api.Router)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   318
    routers = []
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   319
    try:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   320
        routers = query.all()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   321
    except sa.exc.OperationalError:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   322
        pass
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   323
    if routers:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   324
        for r in routers:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   325
            router_id = r['id']
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   326
            rt = {
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   327
                'tenant_id': r['tenant_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   328
                'id': r['id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   329
                'name': r['name'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   330
                '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
   331
                '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
   332
                'status': 'ACTIVE'
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   333
                }
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   334
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   335
        # Delete router entry
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   336
        ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   337
        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
   338
        with ctxt.session.begin(subtransactions=True):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   339
            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
   340
            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
   341
                                                               ctxt,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   342
                                                               havana_api.
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   343
                                                               Router)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   344
            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
   345
            ctxt.session.delete(router)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   346
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   347
    engine = sa.create_engine(SQL_CONNECTION)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   348
    meta = MetaData()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   349
    conn = engine.connect()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   350
    trans = conn.begin()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   351
    meta.reflect(engine)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   352
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   353
    # 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
   354
    # 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
   355
    for t in meta.tables.values():
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   356
        for fk in t.foreign_keys:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   357
            if fk.column.table.name == "routers":
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   358
                engine.execute(DropConstraint(fk.constraint))
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   359
    for t in meta.tables.values():
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   360
        if t.name == "routers":
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   361
            t.drop(bind=conn)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   362
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   363
    # 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
   364
    # 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
   365
    for t in meta.tables.values():
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   366
        for fk in t.foreign_keys:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   367
            if fk.column.table.name == "floatingips":
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   368
                engine.execute(DropConstraint(fk.constraint))
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   369
    for t in meta.tables.values():
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   370
        if t.name == "floatingips":
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   371
            t.drop(bind=conn)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   372
    conn.close()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   373
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   374
    # 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
   375
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   376
    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
   377
            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
   378
    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
   379
    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
   380
    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
   381
    if routers:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   382
        ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   383
        with ctxt.session.begin(subtransactions=True):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   384
            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
   385
                                     tenant_id=r['tenant_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   386
                                     name=rt['name'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   387
                                     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
   388
                                     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
   389
                                     status="ACTIVE")
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   390
            ctxt.session.add(router_db)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   391
            print "\nrouter=%s updated" % rt['name']
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   392
        with ctxt.session.begin(subtransactions=True):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   393
            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
   394
                router_port = l3_db.RouterPort(
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   395
                    port_id=i,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   396
                    router_id=router_id,
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   397
                    port_type=j)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   398
                ctxt.session.add(router_port)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   399
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   400
    if floatingips:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   401
        ctxt = ctx.get_admin_context()
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   402
        with ctxt.session.begin(subtransactions=True):
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   403
            for i in fl:
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   404
                fl_db = l3_db.FloatingIP(
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   405
                    id=i['id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   406
                    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
   407
                    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
   408
                    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
   409
                    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
   410
                    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
   411
                    router_id=i['router_id'],
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   412
                    tenant_id=i['tenant_id'])
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   413
                ctxt.session.add(fl_db)
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   414
                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
   415
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   416
    print "\nEnd Migration."
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   417
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   418
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   419
if __name__ == '__main__':
4b1def16fe9b PSARC 2015/110 OpenStack service updates for Juno
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
   420
    main()