From 05958d4c8a1e3857d73776c8c0ee11cc13a8faab Mon Sep 17 00:00:00 2001 From: Eugeniya Kudryashova Date: Mon, 22 Dec 2014 18:07:08 +0200 Subject: [PATCH] Reuse methods from netutils Replace usages of is_valid_ip_address, is_valid_ipv4, is_valid_ipv6 from Nova by usages of this methods from oslo.utils and remove these methods from Nova code Also removed related tests Change-Id: I66dd1d65a045271121020fdab562fa16f8db2bf0 --- nova/api/ec2/__init__.py | 4 ++-- .../compute/contrib/floating_ip_dns.py | 4 ++-- .../compute/plugins/v3/floating_ip_dns.py | 4 ++-- nova/api/openstack/compute/servers.py | 5 +++-- nova/db/sqlalchemy/types.py | 3 ++- nova/image/glance.py | 6 +++--- nova/network/manager.py | 3 ++- nova/tests/unit/image/test_glance.py | 8 ++++---- nova/tests/unit/network/test_manager.py | 3 ++- nova/tests/unit/test_utils.py | 18 ------------------ nova/utils.py | 19 ------------------- nova/virt/vmwareapi/read_write_util.py | 4 ++-- nova/virt/xenapi/vmops.py | 5 +++-- 13 files changed, 27 insertions(+), 59 deletions(-) diff --git a/nova/api/ec2/__init__.py b/nova/api/ec2/__init__.py index 19bc1bbb7de4..b511c8a3694b 100644 --- a/nova/api/ec2/__init__.py +++ b/nova/api/ec2/__init__.py @@ -21,6 +21,7 @@ Starting point for routing EC2 requests. from oslo.config import cfg from oslo.serialization import jsonutils from oslo.utils import importutils +from oslo.utils import netutils from oslo.utils import timeutils import requests import six @@ -40,7 +41,6 @@ from nova.i18n import _LW from nova.openstack.common import context as common_context from nova.openstack.common import log as logging from nova.openstack.common import memorycache -from nova import utils from nova import wsgi @@ -442,7 +442,7 @@ class Validator(wsgi.Middleware): 'image_id': validator.validate_ec2_id, 'attribute': validator.validate_str(), 'image_location': validator.validate_image_path, - 'public_ip': utils.is_valid_ipv4, + 'public_ip': netutils.is_valid_ipv4, 'region_name': validator.validate_str(), 'group_name': validator.validate_str(max_length=255), 'group_description': validator.validate_str(max_length=255), diff --git a/nova/api/openstack/compute/contrib/floating_ip_dns.py b/nova/api/openstack/compute/contrib/floating_ip_dns.py index c309ecced284..8477d16ea99c 100644 --- a/nova/api/openstack/compute/contrib/floating_ip_dns.py +++ b/nova/api/openstack/compute/contrib/floating_ip_dns.py @@ -14,6 +14,7 @@ import urllib +from oslo.utils import netutils import webob from nova.api.openstack import extensions @@ -22,7 +23,6 @@ from nova.api.openstack import xmlutil from nova import exception from nova.i18n import _ from nova import network -from nova import utils authorize = extensions.extension_authorizer('compute', 'floating_ip_dns') @@ -220,7 +220,7 @@ class FloatingIPDNSEntryController(object): floating_ip = None # Check whether id is a valid ipv4/ipv6 address. - if utils.is_valid_ipv4(id) or utils.is_valid_ipv6(id): + if netutils.is_valid_ip(id): floating_ip = id try: diff --git a/nova/api/openstack/compute/plugins/v3/floating_ip_dns.py b/nova/api/openstack/compute/plugins/v3/floating_ip_dns.py index cd31d34917e2..9f9f54dae5fe 100644 --- a/nova/api/openstack/compute/plugins/v3/floating_ip_dns.py +++ b/nova/api/openstack/compute/plugins/v3/floating_ip_dns.py @@ -14,6 +14,7 @@ import urllib +from oslo.utils import netutils import webob from nova.api.openstack.compute.schemas.v3 import floating_ip_dns @@ -23,7 +24,6 @@ from nova.api import validation from nova import exception from nova.i18n import _ from nova import network -from nova import utils ALIAS = "os-floating-ip-dns" @@ -176,7 +176,7 @@ class FloatingIPDNSEntryController(wsgi.Controller): floating_ip = None # Check whether id is a valid ipv4/ipv6 address. - if utils.is_valid_ipv4(id) or utils.is_valid_ipv6(id): + if netutils.is_valid_ip(id): floating_ip = id try: diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py index 0a0628147668..180b7f5813b1 100644 --- a/nova/api/openstack/compute/servers.py +++ b/nova/api/openstack/compute/servers.py @@ -20,6 +20,7 @@ import re from oslo.config import cfg from oslo import messaging +from oslo.utils import netutils from oslo.utils import strutils from oslo.utils import timeutils import six @@ -750,12 +751,12 @@ class Controller(wsgi.Controller): raise exc.HTTPBadRequest(explanation=expl) def _validate_access_ipv4(self, address): - if not utils.is_valid_ipv4(address): + if not netutils.is_valid_ipv4(address): expl = _('accessIPv4 is not proper IPv4 format') raise exc.HTTPBadRequest(explanation=expl) def _validate_access_ipv6(self, address): - if not utils.is_valid_ipv6(address): + if not netutils.is_valid_ipv6(address): expl = _('accessIPv6 is not proper IPv6 format') raise exc.HTTPBadRequest(explanation=expl) diff --git a/nova/db/sqlalchemy/types.py b/nova/db/sqlalchemy/types.py index 0a719b79d692..9c9e36f4129d 100644 --- a/nova/db/sqlalchemy/types.py +++ b/nova/db/sqlalchemy/types.py @@ -15,6 +15,7 @@ """Custom SQLAlchemy types.""" +from oslo.utils import netutils import netaddr from sqlalchemy.dialects import postgresql from sqlalchemy import types @@ -39,7 +40,7 @@ class IPAddress(types.TypeDecorator): return value # NOTE(maurosr): The purpose here is to convert ipv6 to the shortened # form, not validate it. - elif utils.is_valid_ipv6(value): + elif netutils.is_valid_ipv6(value): return utils.get_shortened_ipv6(value) return value diff --git a/nova/image/glance.py b/nova/image/glance.py index f0de878baede..d93445981adf 100644 --- a/nova/image/glance.py +++ b/nova/image/glance.py @@ -27,6 +27,7 @@ import glanceclient import glanceclient.exc from oslo.config import cfg from oslo.serialization import jsonutils +from oslo.utils import netutils from oslo.utils import timeutils import six import six.moves.urllib.parse as urlparse @@ -35,7 +36,6 @@ from nova import exception from nova.i18n import _, _LE import nova.image.download as image_xfers from nova.openstack.common import log as logging -from nova import utils glance_opts = [ @@ -79,7 +79,7 @@ CONF.import_group('ssl', 'nova.openstack.common.sslutils') def generate_glance_url(): """Generate the URL to glance.""" glance_host = CONF.glance.host - if utils.is_valid_ipv6(glance_host): + if netutils.is_valid_ipv6(glance_host): glance_host = '[%s]' % glance_host return "%s://%s:%d" % (CONF.glance.protocol, glance_host, CONF.glance.port) @@ -140,7 +140,7 @@ def _create_glance_client(context, host, port, use_ssl, version=1): # header 'X-Auth-Token' and 'token' params['token'] = context.auth_token params['identity_headers'] = generate_identity_headers(context) - if utils.is_valid_ipv6(host): + if netutils.is_valid_ipv6(host): # if so, it is ipv6 address, need to wrap it with '[]' host = '[%s]' % host endpoint = '%s://%s:%s' % (scheme, host, port) diff --git a/nova/network/manager.py b/nova/network/manager.py index 443630078f88..1f7622559322 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -37,6 +37,7 @@ from oslo.config import cfg from oslo import messaging from oslo.utils import excutils from oslo.utils import importutils +from oslo.utils import netutils from oslo.utils import strutils from oslo.utils import timeutils @@ -1510,7 +1511,7 @@ class NetworkManager(manager.Manager): # check if the fixed IP address is valid and # it actually belongs to the network if address is not None: - if not utils.is_valid_ip_address(address): + if not netutils.is_valid_ip(address): raise exception.FixedIpInvalid(address=address) fixed_ip_ref = objects.FixedIP.get_by_address( diff --git a/nova/tests/unit/image/test_glance.py b/nova/tests/unit/image/test_glance.py index 63b4d22e1eea..234efaaf1834 100644 --- a/nova/tests/unit/image/test_glance.py +++ b/nova/tests/unit/image/test_glance.py @@ -20,13 +20,13 @@ import sys import glanceclient.exc import mock from oslo.config import cfg +from oslo.utils import netutils import testtools from nova import context from nova import exception from nova.image import glance from nova import test -from nova import utils CONF = cfg.CONF NOW_GLANCE_FORMAT = "2010-10-11T10:30:22.000000" @@ -200,7 +200,7 @@ class TestGetImageService(test.NoDBTestCase): class TestCreateGlanceClient(test.NoDBTestCase): - @mock.patch('nova.utils.is_valid_ipv6') + @mock.patch('oslo.utils.netutils.is_valid_ipv6') @mock.patch('glanceclient.Client') def test_headers_passed_glanceclient(self, init_mock, ipv6_mock): self.flags(auth_strategy='keystone') @@ -1167,7 +1167,7 @@ class TestGlanceUrl(test.NoDBTestCase): generated_url = glance.generate_glance_url() glance_host = CONF.glance.host # ipv6 address, need to wrap it with '[]' - if utils.is_valid_ipv6(glance_host): + if netutils.is_valid_ipv6(glance_host): glance_host = '[%s]' % glance_host http_url = "http://%s:%d" % (glance_host, CONF.glance.port) self.assertEqual(generated_url, http_url) @@ -1177,7 +1177,7 @@ class TestGlanceUrl(test.NoDBTestCase): generated_url = glance.generate_glance_url() glance_host = CONF.glance.host # ipv6 address, need to wrap it with '[]' - if utils.is_valid_ipv6(glance_host): + if netutils.is_valid_ipv6(glance_host): glance_host = '[%s]' % glance_host https_url = "https://%s:%d" % (glance_host, CONF.glance.port) self.assertEqual(generated_url, https_url) diff --git a/nova/tests/unit/network/test_manager.py b/nova/tests/unit/network/test_manager.py index 824d57e64f7c..20fe182635a3 100644 --- a/nova/tests/unit/network/test_manager.py +++ b/nova/tests/unit/network/test_manager.py @@ -25,6 +25,7 @@ from oslo.config import cfg from oslo.db import exception as db_exc from oslo import messaging from oslo.utils import importutils +from oslo.utils import netutils from oslo_concurrency import processutils import six @@ -2711,7 +2712,7 @@ class AllocateTestCase(test.TestCase): project_id=project_id, macs=None) self.assertEqual(1, len(nw_info)) fixed_ip = nw_info.fixed_ips()[0]['address'] - self.assertTrue(utils.is_valid_ipv4(fixed_ip)) + self.assertTrue(netutils.is_valid_ipv4(fixed_ip)) self.network.deallocate_for_instance(self.context, instance=inst) diff --git a/nova/tests/unit/test_utils.py b/nova/tests/unit/test_utils.py index 26267df31c87..8e07c985f3d4 100644 --- a/nova/tests/unit/test_utils.py +++ b/nova/tests/unit/test_utils.py @@ -240,24 +240,6 @@ class GenericUtilsTestCase(test.NoDBTestCase): self.assertEqual('<', utils.xhtml_escape('<')) self.assertEqual('<foo>', utils.xhtml_escape('')) - def test_is_valid_ipv4(self): - self.assertTrue(utils.is_valid_ipv4('127.0.0.1')) - self.assertFalse(utils.is_valid_ipv4('::1')) - self.assertFalse(utils.is_valid_ipv4('bacon')) - self.assertFalse(utils.is_valid_ipv4("")) - self.assertFalse(utils.is_valid_ipv4(10)) - - def test_is_valid_ipv6(self): - self.assertTrue(utils.is_valid_ipv6("::1")) - self.assertTrue(utils.is_valid_ipv6( - "abcd:ef01:2345:6789:abcd:ef01:192.168.254.254")) - self.assertTrue(utils.is_valid_ipv6( - "0000:0000:0000:0000:0000:0000:0000:0001")) - self.assertFalse(utils.is_valid_ipv6("foo")) - self.assertFalse(utils.is_valid_ipv6("127.0.0.1")) - self.assertFalse(utils.is_valid_ipv6("")) - self.assertFalse(utils.is_valid_ipv6(10)) - def test_is_valid_ipv6_cidr(self): self.assertTrue(utils.is_valid_ipv6_cidr("2600::/64")) self.assertTrue(utils.is_valid_ipv6_cidr( diff --git a/nova/utils.py b/nova/utils.py index 1420870b3efd..d9b2dd1714c1 100644 --- a/nova/utils.py +++ b/nova/utils.py @@ -492,25 +492,6 @@ def is_int_like(val): return False -def is_valid_ipv4(address): - """Verify that address represents a valid IPv4 address.""" - try: - return netaddr.valid_ipv4(address) - except (ValueError, netaddr.AddrFormatError): - return False - - -def is_valid_ipv6(address): - try: - return netaddr.valid_ipv6(address) - except (ValueError, netaddr.AddrFormatError): - return False - - -def is_valid_ip_address(address): - return is_valid_ipv4(address) or is_valid_ipv6(address) - - def is_valid_ipv6_cidr(address): try: netaddr.IPNetwork(address, version=6).cidr diff --git a/nova/virt/vmwareapi/read_write_util.py b/nova/virt/vmwareapi/read_write_util.py index a3c1816472f7..0a6d381f1163 100644 --- a/nova/virt/vmwareapi/read_write_util.py +++ b/nova/virt/vmwareapi/read_write_util.py @@ -24,10 +24,10 @@ import httplib import urllib import urllib2 +from oslo.utils import netutils import six.moves.urllib.parse as urlparse from nova.openstack.common import log as logging -from nova import utils LOG = logging.getLogger(__name__) @@ -107,7 +107,7 @@ class VMwareHTTPFile(object): raise NotImplementedError() def _get_base_url(self, scheme, host, file_path): - if utils.is_valid_ipv6(host): + if netutils.is_valid_ipv6(host): base_url = "%s://[%s]/folder/%s" % (scheme, host, urllib.pathname2url(file_path)) else: diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py index a427ac525f85..1757e228d111 100644 --- a/nova/virt/xenapi/vmops.py +++ b/nova/virt/xenapi/vmops.py @@ -28,6 +28,7 @@ from oslo.config import cfg from oslo.serialization import jsonutils from oslo.utils import excutils from oslo.utils import importutils +from oslo.utils import netutils from oslo.utils import strutils from oslo.utils import timeutils from oslo.utils import units @@ -1986,8 +1987,8 @@ class VMOps(object): raise exception.MigrationPreCheckError(reason=msg) pifkey = pifs.keys()[0] - if not (utils.is_valid_ipv4(pifs[pifkey]['IP']) or - utils.is_valid_ipv6(pifs[pifkey]['IPv6'])): + if not (netutils.is_valid_ipv4(pifs[pifkey]['IP']) or + netutils.is_valid_ipv6(pifs[pifkey]['IPv6'])): msg = (_('PIF %s does not contain IP address') % pifs[pifkey]['uuid']) raise exception.MigrationPreCheckError(reason=msg)