Merge "Rehome get_port_binding_by_status_and_host"
This commit is contained in:
commit
67865c701b
|
@ -781,3 +781,8 @@ class FilterIDForIPNotFound(NotFound):
|
||||||
class FailedToAddQdiscToDevice(NeutronException):
|
class FailedToAddQdiscToDevice(NeutronException):
|
||||||
message = _("Failed to add %(direction)s qdisc "
|
message = _("Failed to add %(direction)s qdisc "
|
||||||
"to device %(device)s.")
|
"to device %(device)s.")
|
||||||
|
|
||||||
|
|
||||||
|
class PortBindingNotFound(NotFound):
|
||||||
|
message = _("Binding for port %(port_id)s for host %(host)s could not be "
|
||||||
|
"found.")
|
||||||
|
|
|
@ -26,6 +26,7 @@ from neutron_lib._i18n import _
|
||||||
from neutron_lib.api import attributes
|
from neutron_lib.api import attributes
|
||||||
from neutron_lib.api.definitions import network as net_apidef
|
from neutron_lib.api.definitions import network as net_apidef
|
||||||
from neutron_lib.api.definitions import port as port_apidef
|
from neutron_lib.api.definitions import port as port_apidef
|
||||||
|
from neutron_lib.api.definitions import portbindings_extended as pb_ext
|
||||||
from neutron_lib.api.definitions import subnet as subnet_apidef
|
from neutron_lib.api.definitions import subnet as subnet_apidef
|
||||||
from neutron_lib import constants
|
from neutron_lib import constants
|
||||||
from neutron_lib import exceptions
|
from neutron_lib import exceptions
|
||||||
|
@ -348,3 +349,36 @@ def get_deployment_physnet_mtu():
|
||||||
:returns: The global_physnet_mtu from the global CONF.
|
:returns: The global_physnet_mtu from the global CONF.
|
||||||
"""
|
"""
|
||||||
return cfg.CONF.global_physnet_mtu
|
return cfg.CONF.global_physnet_mtu
|
||||||
|
|
||||||
|
|
||||||
|
def get_port_binding_by_status_and_host(bindings, status, host='',
|
||||||
|
raise_if_not_found=False,
|
||||||
|
port_id=None):
|
||||||
|
"""Returns from an iterable the binding with the specified status and host.
|
||||||
|
|
||||||
|
The input iterable can contain zero or one binding in status ACTIVE
|
||||||
|
and zero or many bindings in status INACTIVE. As a consequence, to
|
||||||
|
unequivocally retrieve an inactive binding, the caller must specify a non
|
||||||
|
empty value for host. If host is the empty string, the first binding
|
||||||
|
satisfying the specified status will be returned. If no binding is found
|
||||||
|
with the specified status and host, None is returned or PortBindingNotFound
|
||||||
|
is raised if raise_if_not_found is True
|
||||||
|
|
||||||
|
:param bindings: An iterable containing port bindings
|
||||||
|
:param status: The status of the port binding to return. Possible values
|
||||||
|
are ACTIVE or INACTIVE as defined in
|
||||||
|
:file:`neutron_lib/constants.py`.
|
||||||
|
:param host: str representing the host of the binding to return.
|
||||||
|
:param raise_if_not_found: If a binding is not found and this parameter is
|
||||||
|
True, a PortBindingNotFound exception is raised
|
||||||
|
:param port_id: The id of the binding's port
|
||||||
|
:returns: The searched for port binding or None if it is not found
|
||||||
|
:raises: PortBindingNotFound if the binding is not found and
|
||||||
|
raise_if_not_found is True
|
||||||
|
"""
|
||||||
|
for binding in bindings:
|
||||||
|
if binding[pb_ext.STATUS] == status:
|
||||||
|
if not host or binding[pb_ext.HOST] == host:
|
||||||
|
return binding
|
||||||
|
if raise_if_not_found:
|
||||||
|
raise exceptions.PortBindingNotFound(port_id=port_id, host=host)
|
||||||
|
|
|
@ -18,6 +18,7 @@ import mock
|
||||||
from oslo_utils import excutils
|
from oslo_utils import excutils
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
|
|
||||||
|
from neutron_lib.api.definitions import portbindings_extended as pb_ext
|
||||||
from neutron_lib import constants
|
from neutron_lib import constants
|
||||||
from neutron_lib import exceptions
|
from neutron_lib import exceptions
|
||||||
from neutron_lib.plugins import utils
|
from neutron_lib.plugins import utils
|
||||||
|
@ -248,3 +249,26 @@ class TestUtils(base.BaseTestCase):
|
||||||
self.assertEqual('p1', port['port']['project_id'])
|
self.assertEqual('p1', port['port']['project_id'])
|
||||||
self.assertEqual('aport', port['port']['name'])
|
self.assertEqual('aport', port['port']['name'])
|
||||||
self.assertEqual(net_id, port['port']['network_id'])
|
self.assertEqual(net_id, port['port']['network_id'])
|
||||||
|
|
||||||
|
def test_get_port_binding_by_status_and_host(self):
|
||||||
|
bindings = []
|
||||||
|
self.assertIsNone(utils.get_port_binding_by_status_and_host(
|
||||||
|
bindings, constants.INACTIVE))
|
||||||
|
bindings.extend([{pb_ext.STATUS: constants.INACTIVE,
|
||||||
|
pb_ext.HOST: 'host-1'},
|
||||||
|
{pb_ext.STATUS: constants.INACTIVE,
|
||||||
|
pb_ext.HOST: 'host-2'}])
|
||||||
|
self.assertEqual(
|
||||||
|
'host-1', utils.get_port_binding_by_status_and_host(
|
||||||
|
bindings,
|
||||||
|
constants.INACTIVE)[pb_ext.HOST])
|
||||||
|
self.assertEqual(
|
||||||
|
'host-2', utils.get_port_binding_by_status_and_host(
|
||||||
|
bindings,
|
||||||
|
constants.INACTIVE,
|
||||||
|
host='host-2')[pb_ext.HOST])
|
||||||
|
self.assertIsNone(utils.get_port_binding_by_status_and_host(
|
||||||
|
bindings, constants.ACTIVE))
|
||||||
|
self.assertRaises(exceptions.PortBindingNotFound,
|
||||||
|
utils.get_port_binding_by_status_and_host, bindings,
|
||||||
|
constants.ACTIVE, 'host', True, 'port_id')
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
features:
|
||||||
|
- The ``get_port_binding_by_status_and_host`` function is now available
|
||||||
|
in ``neutron_lib.plugins.utils``.
|
Loading…
Reference in New Issue