diff --git a/melange/ipam/service.py b/melange/ipam/service.py index 7ca55343..fb3b0d68 100644 --- a/melange/ipam/service.py +++ b/melange/ipam/service.py @@ -177,7 +177,8 @@ class IpAddressController(BaseController): class AllocatedIpAddressesController(BaseController): def index(self, request, tenant_id=None): - filter_conditions = utils.filter_dict(request.params, 'used_by_device') + filter_conditions = utils.filter_dict(request.params, + 'used_by_device', 'address') if tenant_id: filter_conditions['used_by_tenant'] = tenant_id ips = models.IpAddress.find_all_allocated_ips(**filter_conditions) diff --git a/melange/tests/unit/test_ipam_service.py b/melange/tests/unit/test_ipam_service.py index 7a4270ae..d3f024ae 100644 --- a/melange/tests/unit/test_ipam_service.py +++ b/melange/tests/unit/test_ipam_service.py @@ -1002,6 +1002,24 @@ class TestAllocatedIpAddressController(ControllerTestBase): self.assertItemsEqual(response.json['ip_addresses'], _data([tnt1_device1_ip1, tnt1_device1_ip2])) + def test_index_returns_allocated_ips_by_address(self): + block1 = factory_models.IpBlockFactory(cidr="10.0.0.0/24", + tenant_id="1") + block2 = factory_models.IpBlockFactory(cidr="20.0.0.0/24", + tenant_id="2") + interface1 = factory_models.InterfaceFactory(tenant_id="tnt1") + interface2 = factory_models.InterfaceFactory(tenant_id="tnt2") + + tenant1_ip1 = _allocate_ip(block1, interface=interface1) + tenant1_ip2 = _allocate_ip(block2, interface=interface1) + tenant2_ip1 = _allocate_ip(block2, interface=interface2) + + response = self.app.get("/ipam/allocated_ip_addresses?" + "address=" + tenant1_ip1.address) + + self.assertItemsEqual(response.json['ip_addresses'], + _data([tenant1_ip1])) + def test_index_doesnt_return_soft_deallocated_ips(self): block = factory_models.IpBlockFactory() interface = factory_models.InterfaceFactory(tenant_id="tnt1")