20
20
from sqlalchemy import Column, Integer, String, ForeignKey, Boolean
21
from sqlalchemy.orm import relation
23
from quantum.db.models import BASE
26
class VlanBinding(BASE):
21
from sqlalchemy.ext.declarative import declarative_base
22
from sqlalchemy.orm import relation, object_mapper
24
BASE = declarative_base()
27
class L2NetworkBase(object):
28
"""Base class for L2Network Models."""
29
__table_args__ = {'mysql_engine': 'InnoDB'}
31
def __setitem__(self, key, value):
32
setattr(self, key, value)
34
def __getitem__(self, key):
35
return getattr(self, key)
37
def get(self, key, default=None):
38
return getattr(self, key, default)
41
self._i = iter(object_mapper(self).columns)
45
n = self._i.next().name
46
return n, getattr(self, n)
48
def update(self, values):
49
"""Make the model object behave like a dict"""
50
for k, v in values.iteritems():
54
"""Make the model object behave like a dict.
55
Includes attributes from joins."""
57
joined = dict([(k, v) for k, v in self.__dict__.iteritems()
60
return local.iteritems()
63
class Port(BASE, L2NetworkBase):
64
"""Represents a port on a l2network plugin"""
65
__tablename__ = 'ports'
67
uuid = Column(String(255), primary_key=True)
68
network_id = Column(String(255), ForeignKey("networks.uuid"),
70
interface_id = Column(String(255))
71
state = Column(String(8))
73
def __init__(self, network_id):
74
self.uuid = str(uuid.uuid4())
75
self.network_id = network_id
79
return "<Port(%s,%s,%s,%s)>" % (self.uuid, self.network_id,
80
self.state, self.interface_id)
83
class Network(BASE, L2NetworkBase):
84
"""Represents a networ on l2network plugin"""
85
__tablename__ = 'networks'
87
uuid = Column(String(255), primary_key=True)
88
tenant_id = Column(String(255), nullable=False)
89
name = Column(String(255))
90
ports = relation(Port, order_by=Port.uuid, backref="network")
92
def __init__(self, tenant_id, name):
93
self.uuid = str(uuid.uuid4())
94
self.tenant_id = tenant_id
98
return "<Network(%s,%s,%s)>" % \
99
(self.uuid, self.name, self.tenant_id)
102
class VlanBinding(BASE, L2NetworkBase):
27
103
"""Represents a binding of vlan_id to network_id"""
28
104
__tablename__ = 'vlan_bindings'
30
106
vlan_id = Column(Integer, primary_key=True)
31
107
vlan_name = Column(String(255))
32
network_id = Column(String(255), nullable=False)
33
#foreign key to networks.uuid
108
network_id = Column(String(255), ForeignKey("networks.uuid"), \
110
network = relation(Network, uselist=False)
35
112
def __init__(self, vlan_id, vlan_name, network_id):
36
113
self.vlan_id = vlan_id
62
139
(self.uuid, self.name, self.vlan_id, self.qos)
65
class PortProfileBinding(BASE):
142
class PortProfileBinding(BASE, L2NetworkBase):
66
143
"""Represents PortProfile binding to tenant and network"""
67
144
__tablename__ = 'portprofile_bindings'
69
146
id = Column(Integer, primary_key=True, autoincrement=True)
70
147
tenant_id = Column(String(255))
72
network_id = Column(String(255), nullable=False)
73
#foreign key to networks.uuid
74
portprofile_id = Column(String(255), nullable=False)
75
#foreign key to portprofiles.uuid
149
network_id = Column(String(255), ForeignKey("networks.uuid"), \
151
portprofile_id = Column(String(255), ForeignKey("portprofiles.uuid"), \
76
153
default = Column(Boolean)
154
network = relation(Network, uselist=False)
155
portprofile = relation(PortProfile, uselist=False)
78
157
def __init__(self, tenant_id, network_id, portprofile_id, default):
79
158
self.tenant_id = tenant_id