From c13f3fb33b6928a94887e9aefa4a99e98957d58e Mon Sep 17 00:00:00 2001 From: Ashutosh Mishra Date: Mon, 4 Jul 2016 17:45:17 +0530 Subject: [PATCH] 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 ab6862783a7260e2074751775794580e6c9ee981) (cherry picked from commit c982511bcdb5f5ba502489c8807d4699f68d1ed7) --- .../traffic_stitching_plumber.py | 2 +- .../ncp/test_traffic_stitching_plumber.py | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/gbpservice/neutron/services/servicechain/plugins/ncp/node_plumbers/traffic_stitching_plumber.py b/gbpservice/neutron/services/servicechain/plugins/ncp/node_plumbers/traffic_stitching_plumber.py index 76a0d9196..3409253d5 100644 --- a/gbpservice/neutron/services/servicechain/plugins/ncp/node_plumbers/traffic_stitching_plumber.py +++ b/gbpservice/neutron/services/servicechain/plugins/ncp/node_plumbers/traffic_stitching_plumber.py @@ -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( diff --git a/gbpservice/neutron/tests/unit/services/servicechain/ncp/test_traffic_stitching_plumber.py b/gbpservice/neutron/tests/unit/services/servicechain/ncp/test_traffic_stitching_plumber.py index 42bb78d96..9180f0d47 100644 --- a/gbpservice/neutron/tests/unit/services/servicechain/ncp/test_traffic_stitching_plumber.py +++ b/gbpservice/neutron/tests/unit/services/servicechain/ncp/test_traffic_stitching_plumber.py @@ -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': [{}],