Fix for service target creation in chain

Fixing issue in traffic stitching plumber where if plumbing
info is not provided, it is not creating service targets for
remaining nodes.

Closes-Bug: 1598824

Change-Id: I3026790a380f24aa9e810f32eadb2eba8e3b9334
(cherry picked from commit ab6862783a)
(cherry picked from commit c982511bcd)
This commit is contained in:
Ashutosh Mishra
2016-07-04 17:45:17 +05:30
committed by Hemanth Ravi
parent 7e9beb4be0
commit c13f3fb33b
2 changed files with 34 additions and 1 deletions

View File

@@ -73,7 +73,7 @@ class TrafficStitchingPlumber(plumber_base.NodePlumberBase):
for part in deployment:
info = part['plumbing_info']
if not info:
return
continue
part_context = part['context']
# Management PT can be created immediately
self._create_service_target(

View File

@@ -13,6 +13,7 @@
import mock
from neutron.common import config # noqa
from neutron import context as n_context
from neutron.plugins.common import constants as pconst
from oslo_config import cfg
from gbpservice.neutron.services.servicechain.plugins.ncp import model
@@ -87,6 +88,38 @@ class TrafficStitchingPlumberTestCase(base.NodeCompositionPluginTestCase):
provider['id'])['policy_target_group']
self.assertIsNone(provider['proxy_group_id'])
def get_plumbing_info_base(self, context):
service_type = context.current_profile['service_type']
plumbing_request = {'management': [], 'provider': [{}],
'consumer': [{}]}
if service_type in [pconst.FIREWALL]:
plumbing_request['plumbing_type'] = 'gateway'
else:
plumbing_request = {}
return plumbing_request
def test_get_service_targets_in_chain(self):
context = n_context.get_admin_context()
self.driver.get_plumbing_info = self.get_plumbing_info_base
lb_prof = self._create_service_profile(
service_type='LOADBALANCER',
vendor=self.SERVICE_PROFILE_VENDOR)['service_profile']
lb_node = self.create_servicechain_node(
service_profile_id=lb_prof['id'],
config=self.DEFAULT_LB_CONFIG)['servicechain_node']
fw_prof = self._create_service_profile(
service_type='FIREWALL',
vendor=self.SERVICE_PROFILE_VENDOR)['service_profile']
fw_node = self.create_servicechain_node(
service_profile_id=fw_prof['id'],
config='{}')['servicechain_node']
self._create_chain_with_nodes([fw_node['id'], lb_node['id']])
targets = model.get_service_targets(context.session)
self.assertEqual(2, len(targets))
def test_ptg_delete(self):
self.driver.get_plumbing_info.return_value = {
'provider': [{}], 'consumer': [{}],