20
20
from quantum.db import api as db
21
21
from quantum.db import model_base
22
from quantum.db import models_v2
23
from quantum.db import securitygroups_db as sg_db
24
from quantum.extensions import securitygroup as ext_sg
25
from quantum import manager
22
26
from quantum.openstack.common import log as logging
27
# NOTE (e0ne): this import is needed for config init
23
28
from quantum.plugins.nec.common import config
24
29
from quantum.plugins.nec.common import exceptions as nexc
25
30
from quantum.plugins.nec.db import models as nmodels
29
34
OFP_VLAN_NONE = 0xffff
37
resource_map = {'ofc_tenant': nmodels.OFCTenantMapping,
38
'ofc_network': nmodels.OFCNetworkMapping,
39
'ofc_port': nmodels.OFCPortMapping,
40
'ofc_packet_filter': nmodels.OFCFilterMapping}
42
old_resource_map = {'ofc_tenant': nmodels.OFCTenant,
43
'ofc_network': nmodels.OFCNetwork,
44
'ofc_port': nmodels.OFCPort,
45
'ofc_packet_filter': nmodels.OFCFilter}
50
def _get_resource_model(resource, old_style):
52
return old_resource_map[resource]
54
return resource_map[resource]
40
def get_ofc_item(model, id):
41
session = db.get_session()
43
return (session.query(model).
46
except sa.orm.exc.NoResultFound:
50
def find_ofc_item(model, quantum_id):
51
session = db.get_session()
53
return (session.query(model).
54
filter_by(quantum_id=quantum_id).
56
except sa.orm.exc.NoResultFound:
60
def add_ofc_item(model, id, quantum_id):
61
session = db.get_session()
63
item = model(id=id, quantum_id=quantum_id)
65
def get_ofc_item(session, resource, quantum_id, old_style=False):
67
model = _get_resource_model(resource, old_style)
68
return session.query(model).filter_by(quantum_id=quantum_id).one()
69
except sa.orm.exc.NoResultFound:
73
def get_ofc_id(session, resource, quantum_id, old_style=False):
74
ofc_item = get_ofc_item(session, resource, quantum_id, old_style)
79
return ofc_item.ofc_id
84
def exists_ofc_item(session, resource, quantum_id, old_style=False):
85
if get_ofc_item(session, resource, quantum_id, old_style):
91
def find_ofc_item(session, resource, ofc_id, old_style=False):
93
model = _get_resource_model(resource, old_style)
95
params = dict(id=ofc_id)
97
params = dict(ofc_id=ofc_id)
98
return (session.query(model).filter_by(**params).one())
99
except sa.orm.exc.NoResultFound:
103
def add_ofc_item(session, resource, quantum_id, ofc_id, old_style=False):
105
model = _get_resource_model(resource, old_style)
107
params = dict(quantum_id=quantum_id, id=ofc_id)
109
params = dict(quantum_id=quantum_id, ofc_id=ofc_id)
110
item = model(**params)
66
113
except Exception as exc:
72
def del_ofc_item(model, id):
73
session = db.get_session()
119
def del_ofc_item(session, resource, quantum_id, old_style=False,
75
item = (session.query(model).
122
model = _get_resource_model(resource, old_style)
123
item = session.query(model).filter_by(quantum_id=quantum_id).one()
78
124
session.delete(item)
80
127
except sa.orm.exc.NoResultFound:
81
LOG.warning(_("_del_ofc_item(): NotFound item "
82
"(model=%(model)s, id=%(id)s) "), locals())
86
session = db.get_session()
129
LOG.warning(_("_del_ofc_item(): NotFound item "
130
"(model=%(model)s, id=%(id)s) "),
131
{'model': model, 'id': quantum_id})
135
def get_ofc_id_lookup_both(session, resource, quantum_id):
136
ofc_id = get_ofc_id(session, resource, quantum_id)
137
# Lookup old style of OFC mapping table
139
ofc_id = get_ofc_id(session, resource, quantum_id,
142
reason = (_("NotFound %(resource)s for quantum_id=%(id)s.")
143
% {'resource': resource, 'id': quantum_id})
144
raise nexc.OFCConsistencyBroken(reason=reason)
148
def exists_ofc_item_lookup_both(session, resource, quantum_id):
149
if exists_ofc_item(session, resource, quantum_id):
151
# Check old style of OFC mapping table
152
if exists_ofc_item(session, resource, quantum_id,
158
def del_ofc_item_lookup_both(session, resource, quantum_id):
159
# Delete the mapping from new style of OFC mapping table
160
if del_ofc_item(session, resource, quantum_id,
161
old_style=False, warning=False):
163
# Delete old style of OFC mapping table
164
if del_ofc_item(session, resource, quantum_id,
165
old_style=True, warning=False):
167
# The specified resource not found
168
LOG.warning(_("_del_ofc_item(): NotFound item "
169
"(resource=%(resource)s, id=%(id)s) "),
170
{'resource': resource, 'id': quantum_id})
173
def get_portinfo(session, id):
88
175
return (session.query(nmodels.PortInfo).
95
def add_portinfo(id, datapath_id='', port_no=0, vlan_id=OFP_VLAN_NONE, mac=''):
96
session = db.get_session()
182
def add_portinfo(session, id, datapath_id='', port_no=0,
183
vlan_id=OFP_VLAN_NONE, mac=''):
98
185
portinfo = nmodels.PortInfo(id=id, datapath_id=datapath_id,
99
186
port_no=port_no, vlan_id=vlan_id, mac=mac)
108
def del_portinfo(id):
109
session = db.get_session()
195
def del_portinfo(session, id):
111
portinfo = (session.query(nmodels.PortInfo).
197
portinfo = session.query(nmodels.PortInfo).filter_by(id=id).one()
114
198
session.delete(portinfo)
116
200
except sa.orm.exc.NoResultFound:
117
201
LOG.warning(_("del_portinfo(): NotFound portinfo for "
118
202
"port_id: %s"), id)
205
def get_port_from_device(port_id):
206
"""Get port from database"""
207
LOG.debug(_("get_port_with_securitygroups() called:port_id=%s"), port_id)
208
session = db.get_session()
209
sg_binding_port = sg_db.SecurityGroupPortBinding.port_id
211
query = session.query(models_v2.Port,
212
sg_db.SecurityGroupPortBinding.security_group_id)
213
query = query.outerjoin(sg_db.SecurityGroupPortBinding,
214
models_v2.Port.id == sg_binding_port)
215
query = query.filter(models_v2.Port.id == port_id)
216
port_and_sgs = query.all()
219
port = port_and_sgs[0][0]
220
plugin = manager.QuantumManager.get_plugin()
221
port_dict = plugin._make_port_dict(port)
222
port_dict[ext_sg.SECURITYGROUPS] = [
223
sg_id for port, sg_id in port_and_sgs if sg_id]
224
port_dict['security_group_rules'] = []
225
port_dict['security_group_source_groups'] = []
226
port_dict['fixed_ips'] = [ip['ip_address']
227
for ip in port['fixed_ips']]