Merge "Do not re-ACTIVE ports on DHCP ready without provisioning blocks"
This commit is contained in:
commit
a6c792b9f6
2 files changed
+29
-2
No files matched your search
@@ -339,6 +339,13 @@ class DhcpRpcCallback:
|
||||
@db_api.retry_db_errors
|
||||
def dhcp_ready_on_ports(self, context, port_ids):
|
||||
for port_id in port_ids:
|
||||
# Skip ports with no active provisioning blocks. Otherwise
|
||||
# complete method emits PROVISIONING_COMPLETE when
|
||||
# no block was removed, which can set service ports, like
|
||||
# ha_router_replicated_interface, to ACTIVE state.
|
||||
if not provisioning_blocks.is_object_blocked(
|
||||
context, port_id, resources.PORT):
|
||||
continue
|
||||
provisioning_blocks.provisioning_complete(
|
||||
context, port_id, resources.PORT,
|
||||
provisioning_blocks.DHCP_ENTITY)
|
||||
|
||||
@@ -410,10 +410,30 @@ class TestDhcpRpcCallback(base.BaseTestCase):
|
||||
def test_dhcp_ready_on_ports(self):
|
||||
context = mock.Mock()
|
||||
port_ids = range(10)
|
||||
with mock.patch.object(provisioning_blocks,
|
||||
'provisioning_complete') as pc:
|
||||
with mock.patch.object(provisioning_blocks, 'is_object_blocked',
|
||||
return_value=True), \
|
||||
mock.patch.object(provisioning_blocks,
|
||||
'provisioning_complete') as pc:
|
||||
self.callbacks.dhcp_ready_on_ports(context, port_ids)
|
||||
calls = [mock.call(context, port_id, resources.PORT,
|
||||
provisioning_blocks.DHCP_ENTITY)
|
||||
for port_id in port_ids]
|
||||
pc.assert_has_calls(calls)
|
||||
|
||||
def test_dhcp_ready_on_ports_skips_unblocked_ports(self):
|
||||
context = mock.Mock()
|
||||
port_ids = ['blocked-port', 'ha-router-port']
|
||||
|
||||
def _blocked(ctx, port_id, resource):
|
||||
return port_id == 'blocked-port'
|
||||
|
||||
with mock.patch.object(provisioning_blocks, 'is_object_blocked',
|
||||
side_effect=_blocked), \
|
||||
mock.patch.object(provisioning_blocks,
|
||||
'provisioning_complete') as pc:
|
||||
self.callbacks.dhcp_ready_on_ports(context, port_ids)
|
||||
pc.assert_called_once_with(
|
||||
context, 'blocked-port', resources.PORT,
|
||||
provisioning_blocks.DHCP_ENTITY)
|
||||
for call in pc.call_args_list:
|
||||
self.assertNotIn('ha-router-port', call.args)
|
||||
Reference in new issue
Block a user