~hudson-openstack/nova/trunk

« back to all changes in this revision

Viewing changes to nova/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py

  • Committer: Tarmac
  • Author(s): Dan Wendlandt, Brad Hall, danwent at gmail
  • Date: 2011-09-08 07:43:11 UTC
  • mfrom: (1476.2.39 nova-trunk)
  • Revision ID: tarmac-20110908074311-j8grm3qj79bx04ra
This code contains contains a new NetworkManager class that can leverage Quantum + Melange.  

Thierry suggested that I merge prop this to get feedback, even though it is too late to get a branch of this size in for D-4.  Feedback will help determine whether we can get this code in during the Diablo time frame or not.  This branch was developed stacked on top of the melange branch, which is still not merged, but I am merge-propping it without that branch so that the diff is correct.  

The vast majority of the code is in nova/network/quantum and is only invoked if the network manager is set to nova.network.quantum.QuantumManager

In addition to implementing networks with Quantum instead of the linux bridge, the QuantumManager also provides a new, more flexible model of associating vNICs with networks.  It supports the creation of networks that are specific to a project and networks that are "global".  When a VM is created, it gets a vNIC for each project network, as well as each global network.  For example, this could support giving a VM a "public" vNIC on a shared network and a "private" vNIC on a tenant-specific network.  

The branch also implements Tushar's 'os-create-server-ext' extension, so that the server create API call can indicate the set of networks the VM should be attached to (if this extension is used, it replaces the above mechanism for determining vNICs).  

QuantumManager can use either the traditional IPAM functionality in nova DB (i.e., the networks, fixed_ips tables) or melange.  Similar to FlatManager, QuantumManager does not currently support DHCP, gateway/NAT, or floating IPs.  

This branch requires additional testing before it is really ready for merge, but we thought it would be best to merge prop as soon as possible to identify any significant concerns people had. 

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2011 Nicira, Inc.
 
2
# All Rights Reserved.
 
3
#
 
4
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
 
5
#    not use this file except in compliance with the License. You may obtain
 
6
#    a copy of the License at
 
7
#
 
8
#         http://www.apache.org/licenses/LICENSE-2.0
 
9
#
 
10
#    Unless required by applicable law or agreed to in writing, software
 
11
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 
12
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 
13
#    License for the specific language governing permissions and limitations
 
14
#    under the License.
 
15
 
 
16
from sqlalchemy import *
 
17
from migrate import *
 
18
 
 
19
from nova import log as logging
 
20
from nova import utils
 
21
 
 
22
 
 
23
meta = MetaData()
 
24
 
 
25
networks = Table('networks', meta,
 
26
    Column("id", Integer(), primary_key=True, nullable=False))
 
27
 
 
28
# Add priority column to networks table
 
29
priority = Column('priority', Integer())
 
30
 
 
31
 
 
32
def upgrade(migrate_engine):
 
33
    meta.bind = migrate_engine
 
34
 
 
35
    try:
 
36
        networks.create_column(priority)
 
37
    except Exception:
 
38
        logging.error(_("priority column not added to networks table"))
 
39
        raise
 
40
 
 
41
 
 
42
def downgrade(migrate_engine):
 
43
    meta.bind = migrate_engine
 
44
    networks.drop_column(priority)