Add NUMA affinity policy parameter to "port"
Added port NUMA affinity policy parameter to "port create", "port set" and "port unset" commands. Change-Id: I48cacab275856af2911829f9b7176bb87fd039b3 Related-Bug: #1886798
This commit is contained in:
parent
4e2aefb5fa
commit
454b219564
@ -158,6 +158,16 @@ def _get_attrs(client_manager, parsed_args):
|
|||||||
parsed_args.disable_uplink_status_propagation):
|
parsed_args.disable_uplink_status_propagation):
|
||||||
attrs['propagate_uplink_status'] = False
|
attrs['propagate_uplink_status'] = False
|
||||||
|
|
||||||
|
if ('numa_policy_required' in parsed_args and
|
||||||
|
parsed_args.numa_policy_required):
|
||||||
|
attrs['numa_affinity_policy'] = 'required'
|
||||||
|
elif ('numa_policy_preferred' in parsed_args and
|
||||||
|
parsed_args.numa_policy_preferred):
|
||||||
|
attrs['numa_affinity_policy'] = 'preferred'
|
||||||
|
elif ('numa_policy_legacy' in parsed_args and
|
||||||
|
parsed_args.numa_policy_legacy):
|
||||||
|
attrs['numa_affinity_policy'] = 'legacy'
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
@ -265,6 +275,22 @@ def _add_updatable_args(parser):
|
|||||||
help=_("Set DNS name for this port "
|
help=_("Set DNS name for this port "
|
||||||
"(requires DNS integration extension)")
|
"(requires DNS integration extension)")
|
||||||
)
|
)
|
||||||
|
numa_affinity_policy_group = parser.add_mutually_exclusive_group()
|
||||||
|
numa_affinity_policy_group.add_argument(
|
||||||
|
'--numa-policy-required',
|
||||||
|
action='store_true',
|
||||||
|
help=_("NUMA affinity policy required to schedule this port")
|
||||||
|
)
|
||||||
|
numa_affinity_policy_group.add_argument(
|
||||||
|
'--numa-policy-preferred',
|
||||||
|
action='store_true',
|
||||||
|
help=_("NUMA affinity policy preferred to schedule this port")
|
||||||
|
)
|
||||||
|
numa_affinity_policy_group.add_argument(
|
||||||
|
'--numa-policy-legacy',
|
||||||
|
action='store_true',
|
||||||
|
help=_("NUMA affinity policy using legacy mode to schedule this port")
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# TODO(abhiraut): Use the SDK resource mapped attribute names once the
|
# TODO(abhiraut): Use the SDK resource mapped attribute names once the
|
||||||
@ -904,6 +930,11 @@ class UnsetPort(command.Command):
|
|||||||
action='store_true',
|
action='store_true',
|
||||||
help=_("Clear existing information of data plane status")
|
help=_("Clear existing information of data plane status")
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--numa-policy',
|
||||||
|
action='store_true',
|
||||||
|
help=_("Clear existing NUMA affinity policy")
|
||||||
|
)
|
||||||
|
|
||||||
_tag.add_tag_option_to_parser_for_unset(parser, _('port'))
|
_tag.add_tag_option_to_parser_for_unset(parser, _('port'))
|
||||||
|
|
||||||
@ -959,6 +990,8 @@ class UnsetPort(command.Command):
|
|||||||
attrs['qos_policy_id'] = None
|
attrs['qos_policy_id'] = None
|
||||||
if parsed_args.data_plane_status:
|
if parsed_args.data_plane_status:
|
||||||
attrs['data_plane_status'] = None
|
attrs['data_plane_status'] = None
|
||||||
|
if parsed_args.numa_policy:
|
||||||
|
attrs['numa_affinity_policy'] = None
|
||||||
|
|
||||||
if attrs:
|
if attrs:
|
||||||
client.update_port(obj, **attrs)
|
client.update_port(obj, **attrs)
|
||||||
|
@ -634,6 +634,7 @@ class FakePort(object):
|
|||||||
'mac_address': 'fa:16:3e:a9:4e:72',
|
'mac_address': 'fa:16:3e:a9:4e:72',
|
||||||
'name': 'port-name-' + uuid.uuid4().hex,
|
'name': 'port-name-' + uuid.uuid4().hex,
|
||||||
'network_id': 'network-id-' + uuid.uuid4().hex,
|
'network_id': 'network-id-' + uuid.uuid4().hex,
|
||||||
|
'numa_affinity_policy': 'required',
|
||||||
'port_security_enabled': True,
|
'port_security_enabled': True,
|
||||||
'security_group_ids': [],
|
'security_group_ids': [],
|
||||||
'status': 'ACTIVE',
|
'status': 'ACTIVE',
|
||||||
|
@ -59,6 +59,7 @@ class TestPort(network_fakes.TestNetworkV2):
|
|||||||
'mac_address',
|
'mac_address',
|
||||||
'name',
|
'name',
|
||||||
'network_id',
|
'network_id',
|
||||||
|
'numa_affinity_policy',
|
||||||
'port_security_enabled',
|
'port_security_enabled',
|
||||||
'project_id',
|
'project_id',
|
||||||
'qos_network_policy_id',
|
'qos_network_policy_id',
|
||||||
@ -90,6 +91,7 @@ class TestPort(network_fakes.TestNetworkV2):
|
|||||||
fake_port.mac_address,
|
fake_port.mac_address,
|
||||||
fake_port.name,
|
fake_port.name,
|
||||||
fake_port.network_id,
|
fake_port.network_id,
|
||||||
|
fake_port.numa_affinity_policy,
|
||||||
fake_port.port_security_enabled,
|
fake_port.port_security_enabled,
|
||||||
fake_port.project_id,
|
fake_port.project_id,
|
||||||
fake_port.qos_network_policy_id,
|
fake_port.qos_network_policy_id,
|
||||||
@ -655,6 +657,50 @@ class TestCreatePort(TestPort):
|
|||||||
'name': 'test-port',
|
'name': 'test-port',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def _test_create_with_numa_affinity_policy(self, policy=None):
|
||||||
|
arglist = [
|
||||||
|
'--network', self._port.network_id,
|
||||||
|
'test-port',
|
||||||
|
]
|
||||||
|
if policy:
|
||||||
|
arglist += ['--numa-policy-%s' % policy]
|
||||||
|
|
||||||
|
numa_affinity_policy = None if not policy else policy
|
||||||
|
verifylist = [
|
||||||
|
('network', self._port.network_id,),
|
||||||
|
('name', 'test-port'),
|
||||||
|
]
|
||||||
|
if policy:
|
||||||
|
verifylist.append(('numa_policy_%s' % policy, True))
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
columns, data = (self.cmd.take_action(parsed_args))
|
||||||
|
|
||||||
|
create_args = {
|
||||||
|
'admin_state_up': True,
|
||||||
|
'network_id': self._port.network_id,
|
||||||
|
'name': 'test-port',
|
||||||
|
}
|
||||||
|
if numa_affinity_policy:
|
||||||
|
create_args['numa_affinity_policy'] = numa_affinity_policy
|
||||||
|
self.network.create_port.assert_called_once_with(**create_args)
|
||||||
|
|
||||||
|
self.assertEqual(self.columns, columns)
|
||||||
|
self.assertItemEqual(self.data, data)
|
||||||
|
|
||||||
|
def test_create_with_numa_affinity_policy_required(self):
|
||||||
|
self._test_create_with_numa_affinity_policy(policy='required')
|
||||||
|
|
||||||
|
def test_create_with_numa_affinity_policy_preferred(self):
|
||||||
|
self._test_create_with_numa_affinity_policy(policy='preferred')
|
||||||
|
|
||||||
|
def test_create_with_numa_affinity_policy_legacy(self):
|
||||||
|
self._test_create_with_numa_affinity_policy(policy='legacy')
|
||||||
|
|
||||||
|
def test_create_with_numa_affinity_policy_null(self):
|
||||||
|
self._test_create_with_numa_affinity_policy()
|
||||||
|
|
||||||
|
|
||||||
class TestDeletePort(TestPort):
|
class TestDeletePort(TestPort):
|
||||||
|
|
||||||
@ -1668,6 +1714,32 @@ class TestSetPort(TestPort):
|
|||||||
def test_set_with_no_tag(self):
|
def test_set_with_no_tag(self):
|
||||||
self._test_set_tags(with_tags=False)
|
self._test_set_tags(with_tags=False)
|
||||||
|
|
||||||
|
def _test_create_with_numa_affinity_policy(self, policy):
|
||||||
|
arglist = [
|
||||||
|
'--numa-policy-%s' % policy,
|
||||||
|
self._port.id,
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('numa_policy_%s' % policy, True),
|
||||||
|
('port', self._port.id,)
|
||||||
|
]
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
self.network.update_port.assert_called_once_with(
|
||||||
|
self._port, **{'numa_affinity_policy': policy})
|
||||||
|
|
||||||
|
def test_create_with_numa_affinity_policy_required(self):
|
||||||
|
self._test_create_with_numa_affinity_policy('required')
|
||||||
|
|
||||||
|
def test_create_with_numa_affinity_policy_preferred(self):
|
||||||
|
self._test_create_with_numa_affinity_policy('preferred')
|
||||||
|
|
||||||
|
def test_create_with_numa_affinity_policy_legacy(self):
|
||||||
|
self._test_create_with_numa_affinity_policy('legacy')
|
||||||
|
|
||||||
|
|
||||||
class TestShowPort(TestPort):
|
class TestShowPort(TestPort):
|
||||||
|
|
||||||
@ -1923,3 +1995,26 @@ class TestUnsetPort(TestPort):
|
|||||||
|
|
||||||
def test_unset_with_all_tag(self):
|
def test_unset_with_all_tag(self):
|
||||||
self._test_unset_tags(with_tags=False)
|
self._test_unset_tags(with_tags=False)
|
||||||
|
|
||||||
|
def test_unset_numa_affinity_policy(self):
|
||||||
|
_fake_port = network_fakes.FakePort.create_one_port(
|
||||||
|
{'numa_affinity_policy': 'required'})
|
||||||
|
self.network.find_port = mock.Mock(return_value=_fake_port)
|
||||||
|
arglist = [
|
||||||
|
'--numa-policy',
|
||||||
|
_fake_port.name,
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('numa_policy', True),
|
||||||
|
('port', _fake_port.name),
|
||||||
|
]
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
attrs = {
|
||||||
|
'numa_affinity_policy': None,
|
||||||
|
}
|
||||||
|
|
||||||
|
self.network.update_port.assert_called_once_with(_fake_port, **attrs)
|
||||||
|
self.assertIsNone(result)
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Add NUMA affinity policy to ``port create``, ``port set`` and
|
||||||
|
``port unset`` commands.
|
Loading…
Reference in New Issue
Block a user