segments: Fix resource provider inventories update
Related-Bug: #1828543 Depends-On: https://review.opendev.org/663978 Change-Id: I4275779bd8d353fbaa80c646515819b0a34edebb
This commit is contained in:
parent
62f55a12b0
commit
95023227b7
|
@ -217,9 +217,10 @@ class NovaSegmentNotifier(object):
|
||||||
ipv4_inventory = self.p_client.get_inventory(event.segment_id,
|
ipv4_inventory = self.p_client.get_inventory(event.segment_id,
|
||||||
IPV4_RESOURCE_CLASS)
|
IPV4_RESOURCE_CLASS)
|
||||||
if event.total:
|
if event.total:
|
||||||
ipv4_inventory['total'] += event.total
|
ipv4_inventory[IPV4_RESOURCE_CLASS]['total'] += event.total
|
||||||
if event.reserved:
|
if event.reserved:
|
||||||
ipv4_inventory['reserved'] += event.reserved
|
ipv4_inventory[IPV4_RESOURCE_CLASS]['reserved'] += \
|
||||||
|
event.reserved
|
||||||
try:
|
try:
|
||||||
self.p_client.update_resource_provider_inventory(
|
self.p_client.update_resource_provider_inventory(
|
||||||
event.segment_id, ipv4_inventory, IPV4_RESOURCE_CLASS)
|
event.segment_id, ipv4_inventory, IPV4_RESOURCE_CLASS)
|
||||||
|
@ -251,10 +252,12 @@ class NovaSegmentNotifier(object):
|
||||||
self.p_client.associate_aggregates(segment_id, [aggregate_uuid])
|
self.p_client.associate_aggregates(segment_id, [aggregate_uuid])
|
||||||
for mapping in segment_host_mappings:
|
for mapping in segment_host_mappings:
|
||||||
self.n_client.aggregates.add_host(aggregate.id, mapping.host)
|
self.n_client.aggregates.add_host(aggregate.id, mapping.host)
|
||||||
ipv4_inventory = {'total': total, 'reserved': reserved,
|
ipv4_inventory = {
|
||||||
'min_unit': 1, 'max_unit': 1, 'step_size': 1,
|
IPV4_RESOURCE_CLASS: {
|
||||||
'allocation_ratio': 1.0,
|
'total': total, 'reserved': reserved, 'min_unit': 1,
|
||||||
'resource_class': IPV4_RESOURCE_CLASS}
|
'max_unit': 1, 'step_size': 1, 'allocation_ratio': 1.0,
|
||||||
|
}
|
||||||
|
}
|
||||||
self.p_client.update_resource_provider_inventories(
|
self.p_client.update_resource_provider_inventories(
|
||||||
segment_id, ipv4_inventory)
|
segment_id, ipv4_inventory)
|
||||||
|
|
||||||
|
|
|
@ -1714,16 +1714,17 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase):
|
||||||
total, reserved = self._calculate_inventory_total_and_reserved(
|
total, reserved = self._calculate_inventory_total_and_reserved(
|
||||||
subnet['subnet'])
|
subnet['subnet'])
|
||||||
inventory, _ = self._get_inventory(total, reserved)
|
inventory, _ = self._get_inventory(total, reserved)
|
||||||
|
inventory_dict = inventory[seg_plugin.IPV4_RESOURCE_CLASS]
|
||||||
self.mock_p_client.update_resource_provider_inventories.\
|
self.mock_p_client.update_resource_provider_inventories.\
|
||||||
assert_called_with(segment_id, inventory)
|
assert_called_with(segment_id, inventory)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
inventory['total'],
|
inventory_dict['total'],
|
||||||
self.mock_p_client.update_resource_provider_inventories.
|
self.mock_p_client.update_resource_provider_inventories.
|
||||||
call_args[0][1]['total'])
|
call_args[0][1][seg_plugin.IPV4_RESOURCE_CLASS]['total'])
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
inventory['reserved'],
|
inventory_dict['reserved'],
|
||||||
self.mock_p_client.update_resource_provider_inventories.
|
self.mock_p_client.update_resource_provider_inventories.
|
||||||
call_args[0][1]['reserved'])
|
call_args[0][1][seg_plugin.IPV4_RESOURCE_CLASS]['reserved'])
|
||||||
self.mock_p_client.reset_mock()
|
self.mock_p_client.reset_mock()
|
||||||
self.mock_p_client.get_inventory.side_effect = None
|
self.mock_p_client.get_inventory.side_effect = None
|
||||||
self.mock_n_client.reset_mock()
|
self.mock_n_client.reset_mock()
|
||||||
|
@ -1788,26 +1789,29 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase):
|
||||||
if subnet:
|
if subnet:
|
||||||
total, reserved = self._calculate_inventory_total_and_reserved(
|
total, reserved = self._calculate_inventory_total_and_reserved(
|
||||||
subnet)
|
subnet)
|
||||||
inventory['total'] += total - original_total
|
ipv4_classname = seg_plugin.IPV4_RESOURCE_CLASS
|
||||||
inventory['reserved'] += reserved - original_reserved
|
inventory[ipv4_classname]['total'] += total - original_total
|
||||||
|
inventory[ipv4_classname]['reserved'] += reserved - original_reserved
|
||||||
self.mock_p_client.update_resource_provider_inventory.\
|
self.mock_p_client.update_resource_provider_inventory.\
|
||||||
assert_called_with(segment_id, inventory,
|
assert_called_with(segment_id, inventory,
|
||||||
seg_plugin.IPV4_RESOURCE_CLASS)
|
seg_plugin.IPV4_RESOURCE_CLASS)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
inventory['total'],
|
inventory[ipv4_classname]['total'],
|
||||||
self.mock_p_client.update_resource_provider_inventory.
|
self.mock_p_client.update_resource_provider_inventory.
|
||||||
call_args[0][1]['total'])
|
call_args[0][1][ipv4_classname]['total'])
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
inventory['reserved'],
|
inventory[ipv4_classname]['reserved'],
|
||||||
self.mock_p_client.update_resource_provider_inventory.
|
self.mock_p_client.update_resource_provider_inventory.
|
||||||
call_args[0][1]['reserved'])
|
call_args[0][1][ipv4_classname]['reserved'])
|
||||||
self.mock_p_client.reset_mock()
|
self.mock_p_client.reset_mock()
|
||||||
self.mock_n_client.reset_mock()
|
self.mock_n_client.reset_mock()
|
||||||
|
|
||||||
def _get_inventory(self, total, reserved):
|
def _get_inventory(self, total, reserved):
|
||||||
inventory = {'total': total, 'reserved': reserved, 'min_unit': 1,
|
inventory = {
|
||||||
'max_unit': 1, 'step_size': 1, 'allocation_ratio': 1.0,
|
seg_plugin.IPV4_RESOURCE_CLASS: {
|
||||||
'resource_class': seg_plugin.IPV4_RESOURCE_CLASS}
|
'total': total, 'reserved': reserved, 'min_unit': 1,
|
||||||
|
'max_unit': 1, 'step_size': 1, 'allocation_ratio': 1.0
|
||||||
|
}}
|
||||||
return inventory, copy.deepcopy(inventory)
|
return inventory, copy.deepcopy(inventory)
|
||||||
|
|
||||||
def _test_second_subnet_association_with_segment(self):
|
def _test_second_subnet_association_with_segment(self):
|
||||||
|
@ -2046,20 +2050,20 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase):
|
||||||
|
|
||||||
def _assert_inventory_update_port(self, segment_id, inventory,
|
def _assert_inventory_update_port(self, segment_id, inventory,
|
||||||
num_fixed_ips):
|
num_fixed_ips):
|
||||||
inventory['reserved'] += num_fixed_ips
|
inventory[seg_plugin.IPV4_RESOURCE_CLASS]['reserved'] += num_fixed_ips
|
||||||
self.mock_p_client.get_inventory.assert_called_with(
|
self.mock_p_client.get_inventory.assert_called_with(
|
||||||
segment_id, seg_plugin.IPV4_RESOURCE_CLASS)
|
segment_id, seg_plugin.IPV4_RESOURCE_CLASS)
|
||||||
self.mock_p_client.update_resource_provider_inventory.\
|
self.mock_p_client.update_resource_provider_inventory.\
|
||||||
assert_called_with(segment_id, inventory,
|
assert_called_with(segment_id, inventory,
|
||||||
seg_plugin.IPV4_RESOURCE_CLASS)
|
seg_plugin.IPV4_RESOURCE_CLASS)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
inventory['total'],
|
inventory[seg_plugin.IPV4_RESOURCE_CLASS]['total'],
|
||||||
self.mock_p_client.update_resource_provider_inventory.
|
self.mock_p_client.update_resource_provider_inventory.
|
||||||
call_args[0][1]['total'])
|
call_args[0][1][seg_plugin.IPV4_RESOURCE_CLASS]['total'])
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
inventory['reserved'],
|
inventory[seg_plugin.IPV4_RESOURCE_CLASS]['reserved'],
|
||||||
self.mock_p_client.update_resource_provider_inventory.
|
self.mock_p_client.update_resource_provider_inventory.
|
||||||
call_args[0][1]['reserved'])
|
call_args[0][1][seg_plugin.IPV4_RESOURCE_CLASS]['reserved'])
|
||||||
self.mock_p_client.reset_mock()
|
self.mock_p_client.reset_mock()
|
||||||
self.mock_n_client.reset_mock()
|
self.mock_n_client.reset_mock()
|
||||||
|
|
||||||
|
@ -2113,9 +2117,10 @@ class TestNovaSegmentNotifier(SegmentAwareIpamTestCase):
|
||||||
segment_id, before_create_inventory, port = self._test_create_port(
|
segment_id, before_create_inventory, port = self._test_create_port(
|
||||||
**kwargs)
|
**kwargs)
|
||||||
self.mock_p_client.reset_mock()
|
self.mock_p_client.reset_mock()
|
||||||
|
ipv4_classname = seg_plugin.IPV4_RESOURCE_CLASS
|
||||||
inventory, original_inventory = self._get_inventory(
|
inventory, original_inventory = self._get_inventory(
|
||||||
before_create_inventory['total'],
|
before_create_inventory[ipv4_classname]['total'],
|
||||||
before_create_inventory['reserved'] + 1)
|
before_create_inventory[ipv4_classname]['reserved'] + 1)
|
||||||
self.mock_p_client.get_inventory.return_value = inventory
|
self.mock_p_client.get_inventory.return_value = inventory
|
||||||
self._delete('ports', port['port']['id'])
|
self._delete('ports', port['port']['id'])
|
||||||
self.batch_notifier._notify()
|
self.batch_notifier._notify()
|
||||||
|
|
Loading…
Reference in New Issue