Use builtin hashlib.md5

Cinder already removed support for Python 3.8, thus it no longer has
to use the wrapper function from oslo.utils but can use the md5 method
from hashlib directly.

The md5 function from oslo.utils is being deprecated by [1].

[1] https://review.opendev.org/c/openstack/oslo.utils/+/930879

Change-Id: Ief1f4951b7b3b4fb8e7ba599cd7138f62b39d46f
This commit is contained in:
Takashi Kajinami
2024-09-30 17:48:08 +09:00
parent 362cc6096e
commit e4341b7cea
21 changed files with 57 additions and 55 deletions

View File

@ -15,10 +15,10 @@
"""The volume metadata V3 api."""
import hashlib
from http import HTTPStatus
from oslo_serialization import jsonutils
from oslo_utils.secretutils import md5
import webob
from cinder.api import microversions as mv
@ -37,7 +37,7 @@ class Controller(volume_meta_v2.Controller):
metadata = self._get_metadata(context, volume_id)
data = jsonutils.dumps({"metadata": metadata})
data = data.encode('utf-8')
checksum = md5(data, usedforsecurity=False).hexdigest()
checksum = hashlib.md5(data, usedforsecurity=False).hexdigest()
return checksum in req.if_match.etags
@wsgi.extends
@ -48,7 +48,8 @@ class Controller(volume_meta_v2.Controller):
data = jsonutils.dumps(metadata)
data = data.encode('utf-8')
resp = webob.Response()
resp.headers['Etag'] = md5(data, usedforsecurity=False).hexdigest()
resp.headers['Etag'] = hashlib.md5(
data, usedforsecurity=False).hexdigest()
resp.body = data
return resp
return metadata

View File

@ -32,7 +32,6 @@ from oslo_config import cfg
from oslo_log import log as logging
from oslo_service import loopingcall
from oslo_utils import excutils
from oslo_utils import secretutils
from oslo_utils import units
from cinder.backup import driver
@ -401,7 +400,7 @@ class ChunkedBackupDriver(driver.BackupDriver, metaclass=abc.ABCMeta):
) as writer:
writer.write(output_data)
md5 = eventlet.tpool.execute(
secretutils.md5, data, usedforsecurity=False).hexdigest()
hashlib.md5, data, usedforsecurity=False).hexdigest()
obj[object_name]['md5'] = md5
LOG.debug('backup MD5 for %(object_name)s: %(md5)s',
{'object_name': object_name, 'md5': md5})

View File

@ -27,6 +27,7 @@ Server-centric flow is used for authentication.
"""
import base64
import hashlib
import io
import os
@ -42,7 +43,6 @@ from googleapiclient import errors
from googleapiclient import http
from oslo_config import cfg
from oslo_log import log as logging
from oslo_utils import secretutils
from oslo_utils import timeutils
from cinder.backup import chunkeddriver
@ -314,7 +314,7 @@ class GoogleObjectWriter(object):
body={},
media_body=media).execute(num_retries=self.num_retries)
etag = resp['md5Hash']
md5 = secretutils.md5(self.data, usedforsecurity=False).digest()
md5 = hashlib.md5(self.data, usedforsecurity=False).digest()
md5 = md5.encode('utf-8')
etag = bytes(etag, 'utf-8')
md5 = base64.b64encode(md5)

View File

@ -65,6 +65,7 @@
import base64
import functools
import hashlib
import io
import itertools as it
import socket
@ -76,7 +77,6 @@ from botocore.vendored.requests.packages.urllib3 import exceptions as \
urrlib_exc
from oslo_config import cfg
from oslo_log import log as logging
from oslo_utils.secretutils import md5
from oslo_utils import timeutils
from cinder.backup import chunkeddriver
@ -325,7 +325,8 @@ class S3ObjectWriter(object):
def close(self):
reader = io.BytesIO(self.data)
contentmd5 = base64.b64encode(
md5(self.data, usedforsecurity=False).digest()).decode('utf-8')
hashlib.md5(self.data,
usedforsecurity=False).digest()).decode('utf-8')
put_args = {'Bucket': self.bucket,
'Body': reader,
'Key': self.object_name,

View File

@ -42,13 +42,12 @@
:backup_swift_auth_insecure: If true, bypass verification of server's
certificate for SSL connections (default: False)
"""
import hashlib
import io
import socket
from oslo_config import cfg
from oslo_log import log as logging
from oslo_utils import secretutils
from oslo_utils import timeutils
from swiftclient import client as swift
from swiftclient import exceptions as swift_exc
@ -323,7 +322,7 @@ class SwiftBackupDriver(chunkeddriver.ChunkedBackupDriver):
headers=headers)
except socket.error as err:
raise exception.SwiftConnectionFailed(reason=err)
md5 = secretutils.md5(self.data, usedforsecurity=False).hexdigest()
md5 = hashlib.md5(self.data, usedforsecurity=False).hexdigest()
if etag != md5:
err = _('error writing object to swift, MD5 of object in '
'swift %(etag)s is not the same as MD5 of object sent '

View File

@ -14,12 +14,12 @@
# License for the specific language governing permissions and limitations
# under the License.
import hashlib
from http import client as http_client
import os
import socket
import tempfile
from oslo_utils.secretutils import md5
from swiftclient import client as swift
@ -78,7 +78,7 @@ class FakeSwiftConnection2(object):
object_path = tempfile.gettempdir() + '/' + container + '/' + name
with open(object_path, 'wb') as object_file:
object_file.write(reader.read())
return md5(reader.read(), usedforsecurity=False).hexdigest()
return hashlib.md5(reader.read(), usedforsecurity=False).hexdigest()
def delete_object(self, container, name, headers=None):
pass

View File

@ -14,12 +14,12 @@
# under the License.
"""Mock unit tests for the NetApp cmode nfs storage driver."""
import hashlib
from unittest import mock
import uuid
import ddt
from os_brick.remotefs import remotefs as remotefs_brick
from oslo_utils.secretutils import md5
from oslo_utils import units
from cinder import exception
@ -993,7 +993,7 @@ class NetAppCmodeNfsDriverTestCase(test.TestCase):
drv = self.driver
cinder_mount_point_base = '/opt/stack/data/cinder/mnt/'
# To get the cinder mount point directory, we use:
mount_dir = md5(
mount_dir = hashlib.md5(
'203.0.113.122:/cinder-flexvol1'.encode('utf-8'),
usedforsecurity=False).hexdigest()
cinder_mount_point = cinder_mount_point_base + mount_dir

View File

@ -15,13 +15,13 @@
"""Unit tests for NexentaStor 5 REST API helper."""
import copy
import hashlib
import json
import posixpath
from unittest import mock
import urllib
import uuid
from oslo_utils.secretutils import md5
import requests
from cinder.tests.unit import test
@ -1185,7 +1185,7 @@ class TestNefProxy(test.TestCase):
get_settings.return_value = settings
self.assertIsNone(self.proxy.update_lock())
path = ('%s:%s' % (guid, self.proxy.path)).encode('utf-8')
expected = md5(path, usedforsecurity=False).hexdigest()
expected = hashlib.md5(path, usedforsecurity=False).hexdigest()
self.assertEqual(expected, self.proxy.lock)
def test_url(self):

View File

@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
"""Unit tests for OpenStack Cinder volume driver."""
import hashlib
import os
from unittest import mock
from oslo_utils.secretutils import md5
from oslo_utils import units
from cinder import context
@ -802,7 +802,7 @@ class TestNexentaNfsDriver(test.TestCase):
result = self.drv._local_volume_dir(volume)
get_share.assert_called_with(volume)
share = share.encode('utf-8')
digest = md5(share, usedforsecurity=False).hexdigest()
digest = hashlib.md5(share, usedforsecurity=False).hexdigest()
expected = os.path.join(self.cfg.nexenta_mount_point_base, digest)
self.assertEqual(expected, result)

View File

@ -10,11 +10,10 @@
# License for the specific language governing permissions and limitations
# under the License.
import hashlib
import unittest
from unittest import mock
from oslo_utils.secretutils import md5
from cinder import exception
from cinder.tests.unit import test
from cinder.volume import configuration as conf
@ -695,7 +694,8 @@ class KioxiaVolumeTestCase(test.TestCase):
def test_convert_host_name(self):
name = 'ks-node3-000c2960a794-000c2960a797'
result = self.driver._convert_host_name(name)
expected = md5(name.encode('utf-8'), usedforsecurity=False).hexdigest()
expected = hashlib.md5(name.encode('utf-8'),
usedforsecurity=False).hexdigest()
self.assertEqual(result, expected)
def test_create_export(self):

View File

@ -14,12 +14,12 @@
"""
Unit tests for Veritas Access cinder driver.
"""
import hashlib
import json
import tempfile
from unittest import mock
from xml.dom.minidom import Document
from oslo_utils.secretutils import md5
import requests
from cinder import context
@ -224,10 +224,10 @@ class ACCESSIscsiDriverTestCase(test.TestCase):
index = int(length / 2)
name1 = self.volume.id[:index]
name2 = self.volume.id[index:]
crc1 = md5(name1.encode('utf-8'),
usedforsecurity=False).hexdigest()[:5]
crc2 = md5(name2.encode('utf-8'),
usedforsecurity=False).hexdigest()[:5]
crc1 = hashlib.md5(name1.encode('utf-8'),
usedforsecurity=False).hexdigest()[:5]
crc2 = hashlib.md5(name2.encode('utf-8'),
usedforsecurity=False).hexdigest()[:5]
volume_name_to_ret = 'cinder' + '-' + crc1 + '-' + crc2

View File

@ -15,10 +15,10 @@
from copy import deepcopy
import datetime
import hashlib
import re
from oslo_log import log as logging
from oslo_utils.secretutils import md5
from oslo_utils import strutils
from oslo_utils import units
import packaging.version
@ -456,7 +456,7 @@ class PowerMaxUtils(object):
:returns: uuid
"""
input_str = input_str.lower()
m = md5(usedforsecurity=False)
m = hashlib.md5(usedforsecurity=False)
m.update(input_str.encode('utf-8'))
return m.hexdigest()

View File

@ -19,6 +19,7 @@
"""Cinder Volume driver for Fujitsu ETERNUS DX S3 series."""
import base64
import hashlib
import time
from lxml import etree as ET
@ -26,7 +27,6 @@ from oslo_concurrency import lockutils
from oslo_config import cfg
from oslo_log import log as logging
from oslo_service import loopingcall
from oslo_utils.secretutils import md5
from oslo_utils import units
from cinder import context
@ -1426,7 +1426,7 @@ class FJDXCommon(object):
id_code = volume['id']
m = md5(usedforsecurity=False)
m = hashlib.md5(usedforsecurity=False)
m.update(id_code.encode('utf-8'))
# Pylint: disable=E1121.

View File

@ -13,11 +13,11 @@
# License for the specific language governing permissions and limitations
# under the License.
import hashlib
import json
import math
from oslo_log import log as logging
from oslo_utils.secretutils import md5
from oslo_utils import strutils
from cinder import context
@ -35,8 +35,8 @@ LOG = logging.getLogger(__name__)
def encode_name(name):
encoded_name = md5(name.encode('utf-8'),
usedforsecurity=False).hexdigest()
encoded_name = hashlib.md5(name.encode('utf-8'),
usedforsecurity=False).hexdigest()
prefix = name.split('-')[0] + '-'
postfix = encoded_name[:constants.MAX_NAME_LENGTH - len(prefix)]
return prefix + postfix
@ -54,8 +54,8 @@ def old_encode_name(name):
def encode_host_name(name):
if name and len(name) > constants.MAX_NAME_LENGTH:
encoded_name = md5(name.encode('utf-8'),
usedforsecurity=False).hexdigest()
encoded_name = hashlib.md5(name.encode('utf-8'),
usedforsecurity=False).hexdigest()
return encoded_name[:constants.MAX_NAME_LENGTH]
return name

View File

@ -14,10 +14,10 @@
"""Volume driver for KIOXIA KumoScale NVMeOF storage system."""
import hashlib
from oslo_config import cfg
from oslo_log import log as logging
from oslo_utils.secretutils import md5
from cinder.common import constants
from cinder import exception
@ -386,7 +386,8 @@ class KumoScaleBaseVolumeDriver(driver.BaseVD):
if name is None:
return ""
if len(name) > 32:
name = md5(name.encode('utf-8'), usedforsecurity=False).hexdigest()
name = hashlib.md5(name.encode('utf-8'),
usedforsecurity=False).hexdigest()
else:
name = name.replace('.', '-').lower()
return name

View File

@ -13,13 +13,13 @@
# License for the specific language governing permissions and limitations
# under the License.
import hashlib
import os
import re
from eventlet import greenthread
from oslo_log import log as logging
from oslo_utils import fileutils
from oslo_utils.secretutils import md5
from oslo_utils import units
from cinder.common import constants
@ -612,8 +612,9 @@ class NexentaNfsDriver(nfs.NfsDriver):
:param nfs_share: example 172.18.194.100:/var/nfs
"""
nfs_share = nfs_share.encode('utf-8')
return os.path.join(self.configuration.nexenta_mount_point_base,
md5(nfs_share, usedforsecurity=False).hexdigest())
return os.path.join(
self.configuration.nexenta_mount_point_base,
hashlib.md5(nfs_share, usedforsecurity=False).hexdigest())
def remote_path(self, volume):
"""Get volume path (mounted remotely fs path) for given volume.

View File

@ -13,13 +13,13 @@
# License for the specific language governing permissions and limitations
# under the License.
import hashlib
import json
import posixpath
import urllib
from eventlet import greenthread
from oslo_log import log as logging
from oslo_utils.secretutils import md5
import requests
from cinder import exception
@ -601,7 +601,7 @@ class NefProxy(object):
path = '%s:%s' % (guid, self.path)
if isinstance(path, str):
path = path.encode('utf-8')
self.lock = md5(path, usedforsecurity=False).hexdigest()
self.lock = hashlib.md5(path, usedforsecurity=False).hexdigest()
def url(self, path):
netloc = '%s:%d' % (self.host, int(self.port))

View File

@ -14,12 +14,12 @@
# under the License.
import errno
import hashlib
import os
import posixpath
import uuid
from oslo_log import log as logging
from oslo_utils.secretutils import md5
from oslo_utils import units
from cinder.common import constants
@ -770,7 +770,7 @@ class NexentaNfsDriver(nfs.NfsDriver):
share = self._get_volume_share(volume)
if isinstance(share, str):
share = share.encode('utf-8')
path = md5(share, usedforsecurity=False).hexdigest()
path = hashlib.md5(share, usedforsecurity=False).hexdigest()
return os.path.join(self.mount_point_base, path)
def local_path(self, volume):

View File

@ -17,6 +17,7 @@
import binascii
import collections
import errno
import hashlib
import inspect
import json
import math
@ -35,7 +36,6 @@ from oslo_config import cfg
from oslo_log import log as logging
from oslo_serialization import jsonutils
from oslo_utils import imageutils
from oslo_utils.secretutils import md5
from oslo_utils import units
from cinder import compute
@ -1041,7 +1041,7 @@ class RemoteFSSnapDriverBase(RemoteFSDriver):
"""
if isinstance(base_str, str):
base_str = base_str.encode('utf-8')
return md5(base_str, usedforsecurity=False).hexdigest()
return hashlib.md5(base_str, usedforsecurity=False).hexdigest()
def _get_mount_point_for_share(self, share: str) -> str:
"""Return mount point for share.

View File

@ -15,6 +15,7 @@
import base64
import functools
import hashlib
import json
import math
from os import urandom
@ -32,7 +33,6 @@ import eventlet
from oslo_config import cfg
from oslo_log import log as logging
from oslo_utils import excutils
from oslo_utils.secretutils import md5
from oslo_utils import units
import requests
@ -117,7 +117,7 @@ class AESCipher(object):
d = d_i = b''
while len(d) < key_length + iv_length:
md5_str = d_i + password + salt
d_i = md5(md5_str, usedforsecurity=True).digest()
d_i = hashlib.md5(md5_str, usedforsecurity=True).digest()
d += d_i
return d[:key_length], d[key_length:key_length + iv_length]

View File

@ -16,6 +16,7 @@ Veritas Access Driver for ISCSI.
"""
import ast
import hashlib
from http import HTTPStatus
import json
from random import randint
@ -25,7 +26,6 @@ from oslo_config import cfg
from oslo_log import log as logging
from oslo_service import loopingcall
from oslo_utils import netutils
from oslo_utils.secretutils import md5
from oslo_utils import strutils
from oslo_utils import units
import requests
@ -164,10 +164,10 @@ class ACCESSIscsiDriver(driver.ISCSIDriver):
index = int(length / 2)
name1 = name[:index]
name2 = name[index:]
crc1 = md5(name1.encode('utf-8'),
usedforsecurity=False).hexdigest()[:5]
crc2 = md5(name2.encode('utf-8'),
usedforsecurity=False).hexdigest()[:5]
crc1 = hashlib.md5(name1.encode('utf-8'),
usedforsecurity=False).hexdigest()[:5]
crc2 = hashlib.md5(name2.encode('utf-8'),
usedforsecurity=False).hexdigest()[:5]
return 'cinder' + '-' + crc1 + '-' + crc2
def check_for_setup_error(self):