18d991a6b2
The patch adds NVP advanced LBaaS service support for NVP with VCNS: * NVP LBaaS is an advanced Service of NVP depending on NVP advanced service router - Once an advanced router id created, one corresponding vshield edge will be deployed, and then we can configure LB service On the vshield edge * NVP LBaaS service plugin still uses LBaaS DB service logic, while finally calling vShield Edge to support FWaaS service - When creating VIP object, service attaches the object to the advanced router with routedserviceinsertion service. Then before pushing VIP VCNS call, the server would first pushing associated POOL VCNS call and associated Monitor VCNS call to vShield Edge. Deleting VIP is opposite operation - Refering to CUD operation of other objects, service would first find the associated VIP object and then find the edge bound to the router which vip inserted. Then service would push corresponding VCNS call to Vshield Edge * on driver part, the driver will first convert the object to VSM known object input, and then send a synchronous JSON calling to VSM, and receive the result Implements: blueprint nvp-lbaas-plugin Change-Id: Iec41f2dc103daddf3bed4d09c147df3865b3dccd
204 lines
7.5 KiB
Python
204 lines
7.5 KiB
Python
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
|
|
|
# Copyright 2013 Nicira, Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from sqlalchemy.orm import exc
|
|
|
|
from neutron.openstack.common import log as logging
|
|
from neutron.plugins.nicira.common import exceptions as nvp_exc
|
|
from neutron.plugins.nicira.dbexts import vcns_models
|
|
from neutron.plugins.nicira.vshield.common import (
|
|
exceptions as vcns_exc)
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
def add_vcns_router_binding(session, router_id, vse_id, lswitch_id, status):
|
|
with session.begin(subtransactions=True):
|
|
binding = vcns_models.VcnsRouterBinding(
|
|
router_id=router_id,
|
|
edge_id=vse_id,
|
|
lswitch_id=lswitch_id,
|
|
status=status)
|
|
session.add(binding)
|
|
return binding
|
|
|
|
|
|
def get_vcns_router_binding(session, router_id):
|
|
with session.begin(subtransactions=True):
|
|
return (session.query(vcns_models.VcnsRouterBinding).
|
|
filter_by(router_id=router_id).first())
|
|
|
|
|
|
def update_vcns_router_binding(session, router_id, **kwargs):
|
|
with session.begin(subtransactions=True):
|
|
binding = (session.query(vcns_models.VcnsRouterBinding).
|
|
filter_by(router_id=router_id).one())
|
|
for key, value in kwargs.iteritems():
|
|
binding[key] = value
|
|
|
|
|
|
def delete_vcns_router_binding(session, router_id):
|
|
with session.begin(subtransactions=True):
|
|
binding = (session.query(vcns_models.VcnsRouterBinding).
|
|
filter_by(router_id=router_id).one())
|
|
session.delete(binding)
|
|
|
|
|
|
#
|
|
# Edge Firewall binding methods
|
|
#
|
|
def add_vcns_edge_firewallrule_binding(session, map_info):
|
|
with session.begin(subtransactions=True):
|
|
binding = vcns_models.VcnsEdgeFirewallRuleBinding(
|
|
rule_id=map_info['rule_id'],
|
|
rule_vseid=map_info['rule_vseid'],
|
|
edge_id=map_info['edge_id'])
|
|
session.add(binding)
|
|
return binding
|
|
|
|
|
|
def delete_vcns_edge_firewallrule_binding(session, id):
|
|
with session.begin(subtransactions=True):
|
|
if not (session.query(vcns_models.VcnsEdgeFirewallRuleBinding).
|
|
filter_by(rule_id=id).delete()):
|
|
msg = _("Rule Resource binding with id:%s not found!") % id
|
|
raise nvp_exc.NvpServicePluginException(err_msg=msg)
|
|
|
|
|
|
def get_vcns_edge_firewallrule_binding(session, id, edge_id):
|
|
with session.begin(subtransactions=True):
|
|
return (session.query(vcns_models.VcnsEdgeFirewallRuleBinding).
|
|
filter_by(rule_id=id, edge_id=edge_id).first())
|
|
|
|
|
|
def get_vcns_edge_firewallrule_binding_by_vseid(
|
|
session, edge_id, rule_vseid):
|
|
with session.begin(subtransactions=True):
|
|
try:
|
|
return (session.query(vcns_models.VcnsEdgeFirewallRuleBinding).
|
|
filter_by(edge_id=edge_id, rule_vseid=rule_vseid).one())
|
|
except exc.NoResultFound:
|
|
msg = _("Rule Resource binding not found!")
|
|
raise nvp_exc.NvpServicePluginException(err_msg=msg)
|
|
|
|
|
|
def cleanup_vcns_edge_firewallrule_binding(session, edge_id):
|
|
with session.begin(subtransactions=True):
|
|
session.query(
|
|
vcns_models.VcnsEdgeFirewallRuleBinding).filter_by(
|
|
edge_id=edge_id).delete()
|
|
|
|
|
|
def add_vcns_edge_vip_binding(session, map_info):
|
|
with session.begin(subtransactions=True):
|
|
binding = vcns_models.VcnsEdgeVipBinding(
|
|
vip_id=map_info['vip_id'],
|
|
edge_id=map_info['edge_id'],
|
|
vip_vseid=map_info['vip_vseid'],
|
|
app_profileid=map_info['app_profileid'])
|
|
session.add(binding)
|
|
|
|
return binding
|
|
|
|
|
|
def get_vcns_edge_vip_binding(session, id):
|
|
with session.begin(subtransactions=True):
|
|
try:
|
|
qry = session.query(vcns_models.VcnsEdgeVipBinding)
|
|
return qry.filter_by(vip_id=id).one()
|
|
except exc.NoResultFound:
|
|
msg = _("VIP Resource binding with id:%s not found!") % id
|
|
LOG.exception(msg)
|
|
raise vcns_exc.VcnsNotFound(
|
|
resource='router_service_binding', msg=msg)
|
|
|
|
|
|
def delete_vcns_edge_vip_binding(session, id):
|
|
with session.begin(subtransactions=True):
|
|
qry = session.query(vcns_models.VcnsEdgeVipBinding)
|
|
if not qry.filter_by(vip_id=id).delete():
|
|
msg = _("VIP Resource binding with id:%s not found!") % id
|
|
LOG.exception(msg)
|
|
raise nvp_exc.NvpServicePluginException(err_msg=msg)
|
|
|
|
|
|
def add_vcns_edge_pool_binding(session, map_info):
|
|
with session.begin(subtransactions=True):
|
|
binding = vcns_models.VcnsEdgePoolBinding(
|
|
pool_id=map_info['pool_id'],
|
|
edge_id=map_info['edge_id'],
|
|
pool_vseid=map_info['pool_vseid'])
|
|
session.add(binding)
|
|
|
|
return binding
|
|
|
|
|
|
def get_vcns_edge_pool_binding(session, id, edge_id):
|
|
with session.begin(subtransactions=True):
|
|
return (session.query(vcns_models.VcnsEdgePoolBinding).
|
|
filter_by(pool_id=id, edge_id=edge_id).first())
|
|
|
|
|
|
def get_vcns_edge_pool_binding_by_vseid(session, edge_id, pool_vseid):
|
|
with session.begin(subtransactions=True):
|
|
try:
|
|
qry = session.query(vcns_models.VcnsEdgePoolBinding)
|
|
binding = qry.filter_by(edge_id=edge_id,
|
|
pool_vseid=pool_vseid).one()
|
|
except exc.NoResultFound:
|
|
msg = (_("Pool Resource binding with edge_id:%(edge_id)s "
|
|
"pool_vseid:%(pool_vseid)s not found!") %
|
|
{'edge_id': edge_id, 'pool_vseid': pool_vseid})
|
|
LOG.exception(msg)
|
|
raise nvp_exc.NvpServicePluginException(err_msg=msg)
|
|
return binding
|
|
|
|
|
|
def delete_vcns_edge_pool_binding(session, id, edge_id):
|
|
with session.begin(subtransactions=True):
|
|
qry = session.query(vcns_models.VcnsEdgePoolBinding)
|
|
if not qry.filter_by(pool_id=id, edge_id=edge_id).delete():
|
|
msg = _("Pool Resource binding with id:%s not found!") % id
|
|
LOG.exception(msg)
|
|
raise nvp_exc.NvpServicePluginException(err_msg=msg)
|
|
|
|
|
|
def add_vcns_edge_monitor_binding(session, map_info):
|
|
with session.begin(subtransactions=True):
|
|
binding = vcns_models.VcnsEdgeMonitorBinding(
|
|
monitor_id=map_info['monitor_id'],
|
|
edge_id=map_info['edge_id'],
|
|
monitor_vseid=map_info['monitor_vseid'])
|
|
session.add(binding)
|
|
|
|
return binding
|
|
|
|
|
|
def get_vcns_edge_monitor_binding(session, id, edge_id):
|
|
with session.begin(subtransactions=True):
|
|
return (session.query(vcns_models.VcnsEdgeMonitorBinding).
|
|
filter_by(monitor_id=id, edge_id=edge_id).first())
|
|
|
|
|
|
def delete_vcns_edge_monitor_binding(session, id, edge_id):
|
|
with session.begin(subtransactions=True):
|
|
qry = session.query(vcns_models.VcnsEdgeMonitorBinding)
|
|
if not qry.filter_by(monitor_id=id, edge_id=edge_id).delete():
|
|
msg = _("Monitor Resource binding with id:%s not found!") % id
|
|
LOG.exception(msg)
|
|
raise nvp_exc.NvpServicePluginException(err_msg=msg)
|