diff options
author | Vikash082 <vikash.kumar@oneconvergence.com> | 2017-08-05 19:52:55 +0530 |
---|---|---|
committer | Akihiro Motoki <amotoki@gmail.com> | 2017-11-16 10:33:12 +0000 |
commit | d24c41dde55635d9f14c960f2b9718741040c90b (patch) | |
tree | b1f822c5afc46fe862b4cc3ec06ee884818f1efd | |
parent | 0907ccc4df68c71f1af71976819bff741829e434 (diff) | |
download | python-neutronclient-d24c41dde55635d9f14c960f2b9718741040c90b.tar.gz |
Added 'tap_enabled' parameter for Port-pair-group
Adding 'tap_enabled' parameters to port-pair-group.
If '--enable-tap' set to True, port pairs in port-pair-group will
be deployed as passive Tap service function.
Change-Id: I7267b7ce782f040d0951a3b522d183931debe818
4 files changed, 94 insertions, 20 deletions
diff --git a/neutronclient/osc/v2/sfc/sfc_port_pair_group.py b/neutronclient/osc/v2/sfc/sfc_port_pair_group.py index 688e5c3..c2114ec 100755 --- a/neutronclient/osc/v2/sfc/sfc_port_pair_group.py +++ b/neutronclient/osc/v2/sfc/sfc_port_pair_group.py @@ -36,6 +36,7 @@ _attr_map = ( ('description', 'Description', nc_osc_utils.LIST_LONG_ONLY), ('group_id', 'Loadbalance ID', nc_osc_utils.LIST_LONG_ONLY), ('project_id', 'Project', nc_osc_utils.LIST_LONG_ONLY), + ('tap_enabled', 'Tap Enabled', nc_osc_utils.LIST_BOTH) ) @@ -60,6 +61,19 @@ class CreateSfcPortPairGroup(command.ShowOne): action='append', help=_('Port pair (name or ID). ' 'This option can be repeated.')) + tap_enable = parser.add_mutually_exclusive_group() + tap_enable.add_argument( + '--enable-tap', + action='store_true', + help=_('Port pairs of this port pair group are deployed as ' + 'passive tap service function') + ) + tap_enable.add_argument( + '--disable-tap', + action='store_true', + help=_('Port pairs of this port pair group are deployed as l3 ' + 'service function (default)') + ) parser.add_argument( '--port-pair-group-parameters', metavar='lb-fields=<lb-fields>', @@ -285,6 +299,10 @@ def _get_attrs(attrs, parsed_args): parsed_args.port_pair_group_parameters is not None): attrs['port_pair_group_parameters'] = ( _get_ppg_param(attrs, parsed_args.port_pair_group_parameters)) + if parsed_args.enable_tap: + attrs['tap_enabled'] = True + if parsed_args.disable_tap: + attrs['tap_enabled'] = False def _get_id(client, id_or_name, resource): diff --git a/neutronclient/tests/unit/osc/v2/sfc/fakes.py b/neutronclient/tests/unit/osc/v2/sfc/fakes.py index 54bd5a8..e9e3f79 100755 --- a/neutronclient/tests/unit/osc/v2/sfc/fakes.py +++ b/neutronclient/tests/unit/osc/v2/sfc/fakes.py @@ -107,7 +107,8 @@ class FakeSfcPortPairGroup(object): 'description': 'description', 'port_pairs': uuidutils.generate_uuid(), 'port_pair_group_parameters': '{"lb_fields": []}', - 'project_id': uuidutils.generate_uuid() + 'project_id': uuidutils.generate_uuid(), + 'tap_enabled': False } # port_pair_group_attrs default attributes. diff --git a/neutronclient/tests/unit/osc/v2/sfc/test_port_pair_group.py b/neutronclient/tests/unit/osc/v2/sfc/test_port_pair_group.py index 894c1be..c59e961 100755 --- a/neutronclient/tests/unit/osc/v2/sfc/test_port_pair_group.py +++ b/neutronclient/tests/unit/osc/v2/sfc/test_port_pair_group.py @@ -33,17 +33,19 @@ class TestCreateSfcPortPairGroup(fakes.TestNeutronClientOSCV2): 'Name', 'Port Pair', 'Port Pair Group Parameters', - 'Project') + 'Project', + 'Tap Enabled') - def get_data(self): + def get_data(self, ppg): return ( - self._port_pair_group['description'], - self._port_pair_group['id'], - self._port_pair_group['group_id'], - self._port_pair_group['name'], - self._port_pair_group['port_pairs'], - self._port_pair_group['port_pair_group_parameters'], - self._port_pair_group['project_id'] + ppg['description'], + ppg['id'], + ppg['group_id'], + ppg['name'], + ppg['port_pairs'], + ppg['port_pair_group_parameters'], + ppg['project_id'], + ppg['tap_enabled'] ) def setUp(self): @@ -53,7 +55,7 @@ class TestCreateSfcPortPairGroup(fakes.TestNeutronClientOSCV2): new=_get_id).start() self.neutronclient.create_sfc_port_pair_group = mock.Mock( return_value={'port_pair_group': self._port_pair_group}) - self.data = self.get_data() + self.data = self.get_data(self._port_pair_group) # Get the command object to test self.cmd = sfc_port_pair_group.CreateSfcPortPairGroup(self.app, self.namespace) @@ -73,7 +75,8 @@ class TestCreateSfcPortPairGroup(fakes.TestNeutronClientOSCV2): self.neutronclient.create_sfc_port_pair_group.assert_called_once_with({ 'port_pair_group': { 'name': self._port_pair_group['name'], - 'port_pairs': [self._port_pair_group['port_pairs']]} + 'port_pairs': [self._port_pair_group['port_pairs']] + } }) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) @@ -102,6 +105,46 @@ class TestCreateSfcPortPairGroup(fakes.TestNeutronClientOSCV2): self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) + def test_create_tap_enabled_port_pair_group(self): + arglist = [ + "--description", self._port_pair_group['description'], + "--port-pair", self._port_pair_group['port_pairs'], + self._port_pair_group['name'], + "--enable-tap" + ] + verifylist = [ + ('port_pairs', [self._port_pair_group['port_pairs']]), + ('name', self._port_pair_group['name']), + ('description', self._port_pair_group['description']), + ('enable_tap', True) + ] + + expected_data = self._update_expected_response_data( + data={ + 'tap_enabled': True + } + ) + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = (self.cmd.take_action(parsed_args)) + + self.neutronclient.create_sfc_port_pair_group.assert_called_once_with({ + 'port_pair_group': { + 'name': self._port_pair_group['name'], + 'port_pairs': [self._port_pair_group['port_pairs']], + 'description': self._port_pair_group['description'], + 'tap_enabled': True + } + }) + self.assertEqual(self.columns, columns) + self.assertEqual(expected_data, data) + + def _update_expected_response_data(self, data): + # REVISIT(vks1) - This method can be common for other test functions. + ppg = fakes.FakeSfcPortPairGroup.create_port_pair_group(data) + self.neutronclient.create_sfc_port_pair_group.return_value = { + 'port_pair_group': ppg} + return self.get_data(ppg) + class TestDeleteSfcPortPairGroup(fakes.TestNeutronClientOSCV2): @@ -136,22 +179,25 @@ class TestDeleteSfcPortPairGroup(fakes.TestNeutronClientOSCV2): class TestListSfcPortPairGroup(fakes.TestNeutronClientOSCV2): _ppgs = fakes.FakeSfcPortPairGroup.create_port_pair_groups(count=1) - columns = ('ID', 'Name', 'Port Pair', 'Port Pair Group Parameters') + columns = ('ID', 'Name', 'Port Pair', 'Port Pair Group Parameters', + 'Tap Enabled') columns_long = ('ID', 'Name', 'Port Pair', 'Port Pair Group Parameters', - 'Description', 'Loadbalance ID', 'Project') + 'Description', 'Loadbalance ID', 'Project', 'Tap Enabled') _port_pair_group = _ppgs[0] data = [ _port_pair_group['id'], _port_pair_group['name'], _port_pair_group['port_pairs'], - _port_pair_group['port_pair_group_parameters'] + _port_pair_group['port_pair_group_parameters'], + _port_pair_group['tap_enabled'] ] data_long = [ _port_pair_group['id'], _port_pair_group['name'], _port_pair_group['port_pairs'], _port_pair_group['port_pair_group_parameters'], - _port_pair_group['description'] + _port_pair_group['description'], + _port_pair_group['tap_enabled'] ] _port_pair_group1 = {'port_pair_groups': _port_pair_group} _port_pair_id = _port_pair_group['id'] @@ -181,7 +227,8 @@ class TestListSfcPortPairGroup(fakes.TestNeutronClientOSCV2): ppg['id'], ppg['name'], ppg['port_pairs'], - ppg['port_pair_group_parameters'] + ppg['port_pair_group_parameters'], + ppg['tap_enabled'] ] self.assertEqual(list(self.columns), columns) self.assertEqual(self.data, data) @@ -197,7 +244,8 @@ class TestListSfcPortPairGroup(fakes.TestNeutronClientOSCV2): ppg['name'], ppg['port_pairs'], ppg['port_pair_group_parameters'], - ppg['description'] + ppg['description'], + ppg['tap_enabled'] ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns_long = self.cmd.take_action(parsed_args)[0] @@ -301,7 +349,8 @@ class TestShowSfcPortPairGroup(fakes.TestNeutronClientOSCV2): _ppg['name'], _ppg['port_pairs'], _ppg['port_pair_group_parameters'], - _ppg['project_id']) + _ppg['project_id'], + _ppg['tap_enabled']) _port_pair_group = {'port_pair_group': _ppg} _port_pair_group_id = _ppg['id'] columns = ( @@ -311,7 +360,9 @@ class TestShowSfcPortPairGroup(fakes.TestNeutronClientOSCV2): 'Name', 'Port Pair', 'Port Pair Group Parameters', - 'Project') + 'Project', + 'Tap Enabled' + ) def setUp(self): super(TestShowSfcPortPairGroup, self).setUp() diff --git a/releasenotes/notes/sfc-tap-service-function-support-a05242f25f79066b.yaml b/releasenotes/notes/sfc-tap-service-function-support-a05242f25f79066b.yaml new file mode 100644 index 0000000..ccfcc82 --- /dev/null +++ b/releasenotes/notes/sfc-tap-service-function-support-a05242f25f79066b.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add OSC support to create Port pair group for Tap service functions. |