diff --git a/ironic/common/neutron.py b/ironic/common/neutron.py index a37ddf84fd..15a4201b58 100644 --- a/ironic/common/neutron.py +++ b/ironic/common/neutron.py @@ -17,7 +17,6 @@ from keystoneauth1 import loading as ks_loading from neutronclient.common import exceptions as neutron_exceptions from neutronclient.v2_0 import client as clientv20 from oslo_log import log -from oslo_utils import netutils from oslo_utils import uuidutils import retrying @@ -248,7 +247,8 @@ def _add_ip_addresses_for_ipv6_stateful(context, port, client): """ fixed_ips = port['port']['fixed_ips'] if (not fixed_ips - or not netutils.is_valid_ipv6(fixed_ips[0]['ip_address'])): + or ipaddress.ip_address( + fixed_ips[0]['ip_address']).version != 6): return subnet = client.show_subnet( diff --git a/ironic/common/utils.py b/ironic/common/utils.py index 4141973e13..7cc0199bfc 100644 --- a/ironic/common/utils.py +++ b/ironic/common/utils.py @@ -22,6 +22,7 @@ import contextlib import datetime import errno import hashlib +import ipaddress import os import re import shutil @@ -576,6 +577,6 @@ def pop_node_nested_field(node, collection, field, default=None): def wrap_ipv6(ip): """Wrap the address in square brackets if it's an IPv6 address.""" - if netutils.is_valid_ipv6(ip): + if ipaddress.ip_address(ip).version == 6: return "[%s]" % ip return ip diff --git a/ironic/dhcp/neutron.py b/ironic/dhcp/neutron.py index 4b0210cb3e..3728587422 100644 --- a/ironic/dhcp/neutron.py +++ b/ironic/dhcp/neutron.py @@ -19,7 +19,6 @@ import time from neutronclient.common import exceptions as neutron_client_exc from oslo_log import log as logging -from oslo_utils import netutils from ironic.common import exception from ironic.common.i18n import _ @@ -187,12 +186,18 @@ class NeutronDHCPApi(base.BaseDHCP): ip_address = fixed_ips[0].get('ip_address', None) if ip_address: - if netutils.is_valid_ipv4(ip_address): - return ip_address - else: - LOG.error("Neutron returned invalid IPv4 " - "address %(ip_address)s on port %(port_uuid)s.", - {'ip_address': ip_address, 'port_uuid': port_uuid}) + try: + if ipaddress.ip_address(ip_address).version == 4: + return ip_address + else: + LOG.error("Neutron returned invalid IPv4 " + "address %(ip_address)s on port %(port_uuid)s.", + {'ip_address': ip_address, + 'port_uuid': port_uuid}) + raise exception.InvalidIPv4Address(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) else: LOG.error("No IP address assigned to Neutron port %s.", diff --git a/ironic/drivers/modules/console_utils.py b/ironic/drivers/modules/console_utils.py index d137bbf40b..b2f92ba3d2 100644 --- a/ironic/drivers/modules/console_utils.py +++ b/ironic/drivers/modules/console_utils.py @@ -21,6 +21,7 @@ Ironic console utilities. import errno import fcntl +import ipaddress import os import signal import socket @@ -32,7 +33,6 @@ from oslo_concurrency import lockutils from oslo_log import log as logging from oslo_service import loopingcall from oslo_utils import fileutils -from oslo_utils import netutils import psutil from ironic.common import exception @@ -402,7 +402,7 @@ def start_socat_console(node_uuid, port, console_cmd): args.append('-L%s' % pid_file) console_host = CONF.console.socat_address - if netutils.is_valid_ipv6(console_host): + if ipaddress.ip_address(console_host).version == 6: arg = ('TCP6-LISTEN:%(port)s,bind=[%(host)s],reuseaddr,fork,' 'max-children=1') else: diff --git a/ironic/tests/unit/drivers/modules/test_console_utils.py b/ironic/tests/unit/drivers/modules/test_console_utils.py index 94e8a260d6..752fa5fd14 100644 --- a/ironic/tests/unit/drivers/modules/test_console_utils.py +++ b/ironic/tests/unit/drivers/modules/test_console_utils.py @@ -19,6 +19,7 @@ import errno import fcntl +import ipaddress import os import random import signal @@ -31,7 +32,6 @@ from unittest import mock from ironic_lib import utils as ironic_utils from oslo_config import cfg from oslo_service import loopingcall -from oslo_utils import netutils import psutil from ironic.common import exception @@ -223,7 +223,7 @@ class ConsoleUtilsTestCase(db_base.DbTestCase): generated_url = ( console_utils.get_shellinabox_console_url(self.info['port'])) console_host = CONF.my_ip - if netutils.is_valid_ipv6(console_host): + if ipaddress.ip_address(console_host).version == 6: console_host = '[%s]' % console_host http_url = "%s://%s:%s" % (scheme, console_host, self.info['port']) self.assertEqual(http_url, generated_url)