Merge "Follow up to I44336423194eed99f026c44b6390030a94ed0522"

This commit is contained in:
Zuul 2020-08-13 06:10:39 +00:00 committed by Gerrit Code Review
commit 450e18dbb9
3 changed files with 34 additions and 5 deletions

View File

@ -297,6 +297,10 @@ class InvalidIPv4Address(IronicException):
_msg_fmt = _("Invalid IPv4 address %(ip_address)s.")
class InvalidIPAddress(IronicException):
_msg_fmt = _("Invalid IP address %(ip_address)s.")
class FailedToUpdateMacOnPort(IronicException):
_msg_fmt = _("Update MAC address on port: %(port_id)s failed.")

View File

@ -187,18 +187,19 @@ class NeutronDHCPApi(base.BaseDHCP):
if ip_address:
try:
if ipaddress.ip_address(ip_address).version == 4:
if (ipaddress.ip_address(ip_address).version == 4
or ipaddress.ip_address(ip_address).version == 6):
return ip_address
else:
LOG.error("Neutron returned invalid IPv4 "
LOG.error("Neutron returned invalid IP "
"address %(ip_address)s on port %(port_uuid)s.",
{'ip_address': ip_address,
'port_uuid': port_uuid})
raise exception.InvalidIPv4Address(ip_address=ip_address)
raise exception.InvalidIPAddress(ip_address=ip_address)
except ValueError as exc:
LOG.error("An Invalid IP address was supplied and failed "
"basic validation: %s", exc)
raise exception.InvalidIPv4Address(ip_address=ip_address)
raise exception.InvalidIPAddress(ip_address=ip_address)
else:
LOG.error("No IP address assigned to Neutron port %s.",
port_uuid)

View File

@ -267,6 +267,30 @@ class TestNeutron(db_base.DbTestCase):
self.assertEqual(expected, result)
fake_client.show_port.assert_called_once_with(port_id)
def test__get_fixed_ip_address_ipv6(self):
port_id = 'fake-port-id'
expected = "2001:dead:beef::1234"
api = dhcp_factory.DHCPFactory().provider
port_data = {
"id": port_id,
"network_id": "3cb9bc59-5699-4588-a4b1-b87f96708bc6",
"admin_state_up": True,
"status": "ACTIVE",
"mac_address": "fa:16:3e:4c:2c:30",
"fixed_ips": [
{
"ip_address": "2001:dead:beef::1234",
"subnet_id": "f8a6e8f8-c2ec-497c-9f23-da9616de54ef"
}
],
"device_id": 'bece68a3-2f8b-4e66-9092-244493d6aba7',
}
fake_client = mock.Mock()
fake_client.show_port.return_value = {'port': port_data}
result = api._get_fixed_ip_address(port_id, fake_client)
self.assertEqual(expected, result)
fake_client.show_port.assert_called_once_with(port_id)
def test__get_fixed_ip_address_invalid_ip(self):
port_id = 'fake-port-id'
api = dhcp_factory.DHCPFactory().provider
@ -286,7 +310,7 @@ class TestNeutron(db_base.DbTestCase):
}
fake_client = mock.Mock()
fake_client.show_port.return_value = {'port': port_data}
self.assertRaises(exception.InvalidIPv4Address,
self.assertRaises(exception.InvalidIPAddress,
api._get_fixed_ip_address,
port_id, fake_client)
fake_client.show_port.assert_called_once_with(port_id)