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
This commit is contained in:
Vikash082
2017-08-05 19:52:55 +05:30
committed by Akihiro Motoki
parent 0907ccc4df
commit d24c41dde5
4 changed files with 94 additions and 20 deletions

View File

@@ -36,6 +36,7 @@ _attr_map = (
('description', 'Description', nc_osc_utils.LIST_LONG_ONLY), ('description', 'Description', nc_osc_utils.LIST_LONG_ONLY),
('group_id', 'Loadbalance ID', 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), ('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', action='append',
help=_('Port pair (name or ID). ' help=_('Port pair (name or ID). '
'This option can be repeated.')) '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( parser.add_argument(
'--port-pair-group-parameters', '--port-pair-group-parameters',
metavar='lb-fields=<lb-fields>', metavar='lb-fields=<lb-fields>',
@@ -285,6 +299,10 @@ def _get_attrs(attrs, parsed_args):
parsed_args.port_pair_group_parameters is not None): parsed_args.port_pair_group_parameters is not None):
attrs['port_pair_group_parameters'] = ( attrs['port_pair_group_parameters'] = (
_get_ppg_param(attrs, parsed_args.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): def _get_id(client, id_or_name, resource):

View File

@@ -107,7 +107,8 @@ class FakeSfcPortPairGroup(object):
'description': 'description', 'description': 'description',
'port_pairs': uuidutils.generate_uuid(), 'port_pairs': uuidutils.generate_uuid(),
'port_pair_group_parameters': '{"lb_fields": []}', '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. # port_pair_group_attrs default attributes.

View File

@@ -33,17 +33,19 @@ class TestCreateSfcPortPairGroup(fakes.TestNeutronClientOSCV2):
'Name', 'Name',
'Port Pair', 'Port Pair',
'Port Pair Group Parameters', 'Port Pair Group Parameters',
'Project') 'Project',
'Tap Enabled')
def get_data(self): def get_data(self, ppg):
return ( return (
self._port_pair_group['description'], ppg['description'],
self._port_pair_group['id'], ppg['id'],
self._port_pair_group['group_id'], ppg['group_id'],
self._port_pair_group['name'], ppg['name'],
self._port_pair_group['port_pairs'], ppg['port_pairs'],
self._port_pair_group['port_pair_group_parameters'], ppg['port_pair_group_parameters'],
self._port_pair_group['project_id'] ppg['project_id'],
ppg['tap_enabled']
) )
def setUp(self): def setUp(self):
@@ -53,7 +55,7 @@ class TestCreateSfcPortPairGroup(fakes.TestNeutronClientOSCV2):
new=_get_id).start() new=_get_id).start()
self.neutronclient.create_sfc_port_pair_group = mock.Mock( self.neutronclient.create_sfc_port_pair_group = mock.Mock(
return_value={'port_pair_group': self._port_pair_group}) 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 # Get the command object to test
self.cmd = sfc_port_pair_group.CreateSfcPortPairGroup(self.app, self.cmd = sfc_port_pair_group.CreateSfcPortPairGroup(self.app,
self.namespace) self.namespace)
@@ -73,7 +75,8 @@ class TestCreateSfcPortPairGroup(fakes.TestNeutronClientOSCV2):
self.neutronclient.create_sfc_port_pair_group.assert_called_once_with({ self.neutronclient.create_sfc_port_pair_group.assert_called_once_with({
'port_pair_group': { 'port_pair_group': {
'name': self._port_pair_group['name'], '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.columns, columns)
self.assertEqual(self.data, data) self.assertEqual(self.data, data)
@@ -102,6 +105,46 @@ class TestCreateSfcPortPairGroup(fakes.TestNeutronClientOSCV2):
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data) 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): class TestDeleteSfcPortPairGroup(fakes.TestNeutronClientOSCV2):
@@ -136,22 +179,25 @@ class TestDeleteSfcPortPairGroup(fakes.TestNeutronClientOSCV2):
class TestListSfcPortPairGroup(fakes.TestNeutronClientOSCV2): class TestListSfcPortPairGroup(fakes.TestNeutronClientOSCV2):
_ppgs = fakes.FakeSfcPortPairGroup.create_port_pair_groups(count=1) _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', 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] _port_pair_group = _ppgs[0]
data = [ data = [
_port_pair_group['id'], _port_pair_group['id'],
_port_pair_group['name'], _port_pair_group['name'],
_port_pair_group['port_pairs'], _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 = [ data_long = [
_port_pair_group['id'], _port_pair_group['id'],
_port_pair_group['name'], _port_pair_group['name'],
_port_pair_group['port_pairs'], _port_pair_group['port_pairs'],
_port_pair_group['port_pair_group_parameters'], _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_group1 = {'port_pair_groups': _port_pair_group}
_port_pair_id = _port_pair_group['id'] _port_pair_id = _port_pair_group['id']
@@ -181,7 +227,8 @@ class TestListSfcPortPairGroup(fakes.TestNeutronClientOSCV2):
ppg['id'], ppg['id'],
ppg['name'], ppg['name'],
ppg['port_pairs'], ppg['port_pairs'],
ppg['port_pair_group_parameters'] ppg['port_pair_group_parameters'],
ppg['tap_enabled']
] ]
self.assertEqual(list(self.columns), columns) self.assertEqual(list(self.columns), columns)
self.assertEqual(self.data, data) self.assertEqual(self.data, data)
@@ -197,7 +244,8 @@ class TestListSfcPortPairGroup(fakes.TestNeutronClientOSCV2):
ppg['name'], ppg['name'],
ppg['port_pairs'], ppg['port_pairs'],
ppg['port_pair_group_parameters'], ppg['port_pair_group_parameters'],
ppg['description'] ppg['description'],
ppg['tap_enabled']
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns_long = self.cmd.take_action(parsed_args)[0] columns_long = self.cmd.take_action(parsed_args)[0]
@@ -301,7 +349,8 @@ class TestShowSfcPortPairGroup(fakes.TestNeutronClientOSCV2):
_ppg['name'], _ppg['name'],
_ppg['port_pairs'], _ppg['port_pairs'],
_ppg['port_pair_group_parameters'], _ppg['port_pair_group_parameters'],
_ppg['project_id']) _ppg['project_id'],
_ppg['tap_enabled'])
_port_pair_group = {'port_pair_group': _ppg} _port_pair_group = {'port_pair_group': _ppg}
_port_pair_group_id = _ppg['id'] _port_pair_group_id = _ppg['id']
columns = ( columns = (
@@ -311,7 +360,9 @@ class TestShowSfcPortPairGroup(fakes.TestNeutronClientOSCV2):
'Name', 'Name',
'Port Pair', 'Port Pair',
'Port Pair Group Parameters', 'Port Pair Group Parameters',
'Project') 'Project',
'Tap Enabled'
)
def setUp(self): def setUp(self):
super(TestShowSfcPortPairGroup, self).setUp() super(TestShowSfcPortPairGroup, self).setUp()

View File

@@ -0,0 +1,4 @@
---
features:
- |
Add OSC support to create Port pair group for Tap service functions.