From e4341b7ceafcd0a5454077b69c47f99db64f6948 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Mon, 30 Sep 2024 17:48:08 +0900 Subject: [PATCH] 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 --- cinder/api/v3/volume_metadata.py | 7 ++++--- cinder/backup/chunkeddriver.py | 3 +-- cinder/backup/drivers/gcs.py | 4 ++-- cinder/backup/drivers/s3.py | 5 +++-- cinder/backup/drivers/swift.py | 5 ++--- cinder/tests/unit/backup/fake_swift_client2.py | 4 ++-- .../volume/drivers/netapp/dataontap/test_nfs_cmode.py | 4 ++-- .../volume/drivers/nexenta/test_nexenta5_jsonrpc.py | 4 ++-- .../unit/volume/drivers/nexenta/test_nexenta5_nfs.py | 4 ++-- cinder/tests/unit/volume/drivers/test_kioxia.py | 6 +++--- .../drivers/veritas_access/test_veritas_iscsi.py | 10 +++++----- cinder/volume/drivers/dell_emc/powermax/utils.py | 4 ++-- .../drivers/fujitsu/eternus_dx/eternus_dx_common.py | 4 ++-- cinder/volume/drivers/huawei/huawei_utils.py | 10 +++++----- cinder/volume/drivers/kioxia/kumoscale.py | 5 +++-- cinder/volume/drivers/nexenta/nfs.py | 7 ++++--- cinder/volume/drivers/nexenta/ns5/jsonrpc.py | 4 ++-- cinder/volume/drivers/nexenta/ns5/nfs.py | 4 ++-- cinder/volume/drivers/remotefs.py | 4 ++-- cinder/volume/drivers/synology/synology_common.py | 4 ++-- cinder/volume/drivers/veritas_access/veritas_iscsi.py | 10 +++++----- 21 files changed, 57 insertions(+), 55 deletions(-) diff --git a/cinder/api/v3/volume_metadata.py b/cinder/api/v3/volume_metadata.py index ff754b6b1e8..2f6e3878d05 100644 --- a/cinder/api/v3/volume_metadata.py +++ b/cinder/api/v3/volume_metadata.py @@ -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 diff --git a/cinder/backup/chunkeddriver.py b/cinder/backup/chunkeddriver.py index 490baf84458..bd1be600ef8 100644 --- a/cinder/backup/chunkeddriver.py +++ b/cinder/backup/chunkeddriver.py @@ -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}) diff --git a/cinder/backup/drivers/gcs.py b/cinder/backup/drivers/gcs.py index cc3aa662b84..5ea123e5537 100644 --- a/cinder/backup/drivers/gcs.py +++ b/cinder/backup/drivers/gcs.py @@ -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) diff --git a/cinder/backup/drivers/s3.py b/cinder/backup/drivers/s3.py index 0f62c402ab4..28284b28b5b 100644 --- a/cinder/backup/drivers/s3.py +++ b/cinder/backup/drivers/s3.py @@ -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, diff --git a/cinder/backup/drivers/swift.py b/cinder/backup/drivers/swift.py index 19b5842e73e..5cd716669f9 100644 --- a/cinder/backup/drivers/swift.py +++ b/cinder/backup/drivers/swift.py @@ -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 ' diff --git a/cinder/tests/unit/backup/fake_swift_client2.py b/cinder/tests/unit/backup/fake_swift_client2.py index b15c3f6202d..7d583901636 100644 --- a/cinder/tests/unit/backup/fake_swift_client2.py +++ b/cinder/tests/unit/backup/fake_swift_client2.py @@ -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 diff --git a/cinder/tests/unit/volume/drivers/netapp/dataontap/test_nfs_cmode.py b/cinder/tests/unit/volume/drivers/netapp/dataontap/test_nfs_cmode.py index aad6a15afeb..3317f593627 100644 --- a/cinder/tests/unit/volume/drivers/netapp/dataontap/test_nfs_cmode.py +++ b/cinder/tests/unit/volume/drivers/netapp/dataontap/test_nfs_cmode.py @@ -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 diff --git a/cinder/tests/unit/volume/drivers/nexenta/test_nexenta5_jsonrpc.py b/cinder/tests/unit/volume/drivers/nexenta/test_nexenta5_jsonrpc.py index 07b46e5d9ab..afe1052ecc2 100644 --- a/cinder/tests/unit/volume/drivers/nexenta/test_nexenta5_jsonrpc.py +++ b/cinder/tests/unit/volume/drivers/nexenta/test_nexenta5_jsonrpc.py @@ -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): diff --git a/cinder/tests/unit/volume/drivers/nexenta/test_nexenta5_nfs.py b/cinder/tests/unit/volume/drivers/nexenta/test_nexenta5_nfs.py index 65527cbe72e..7d751c5a047 100644 --- a/cinder/tests/unit/volume/drivers/nexenta/test_nexenta5_nfs.py +++ b/cinder/tests/unit/volume/drivers/nexenta/test_nexenta5_nfs.py @@ -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) diff --git a/cinder/tests/unit/volume/drivers/test_kioxia.py b/cinder/tests/unit/volume/drivers/test_kioxia.py index 345ecb0b815..f4d05e22791 100644 --- a/cinder/tests/unit/volume/drivers/test_kioxia.py +++ b/cinder/tests/unit/volume/drivers/test_kioxia.py @@ -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): diff --git a/cinder/tests/unit/volume/drivers/veritas_access/test_veritas_iscsi.py b/cinder/tests/unit/volume/drivers/veritas_access/test_veritas_iscsi.py index a175487724e..c532dc5f311 100644 --- a/cinder/tests/unit/volume/drivers/veritas_access/test_veritas_iscsi.py +++ b/cinder/tests/unit/volume/drivers/veritas_access/test_veritas_iscsi.py @@ -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 diff --git a/cinder/volume/drivers/dell_emc/powermax/utils.py b/cinder/volume/drivers/dell_emc/powermax/utils.py index 9ec3e0b3e19..3a3ad408a88 100644 --- a/cinder/volume/drivers/dell_emc/powermax/utils.py +++ b/cinder/volume/drivers/dell_emc/powermax/utils.py @@ -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() diff --git a/cinder/volume/drivers/fujitsu/eternus_dx/eternus_dx_common.py b/cinder/volume/drivers/fujitsu/eternus_dx/eternus_dx_common.py index 72576e605a1..f8b30e7e2ef 100644 --- a/cinder/volume/drivers/fujitsu/eternus_dx/eternus_dx_common.py +++ b/cinder/volume/drivers/fujitsu/eternus_dx/eternus_dx_common.py @@ -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. diff --git a/cinder/volume/drivers/huawei/huawei_utils.py b/cinder/volume/drivers/huawei/huawei_utils.py index 572d61027b6..2b779d878c3 100644 --- a/cinder/volume/drivers/huawei/huawei_utils.py +++ b/cinder/volume/drivers/huawei/huawei_utils.py @@ -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 diff --git a/cinder/volume/drivers/kioxia/kumoscale.py b/cinder/volume/drivers/kioxia/kumoscale.py index 0a2767707fe..2690f7ebddf 100644 --- a/cinder/volume/drivers/kioxia/kumoscale.py +++ b/cinder/volume/drivers/kioxia/kumoscale.py @@ -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 diff --git a/cinder/volume/drivers/nexenta/nfs.py b/cinder/volume/drivers/nexenta/nfs.py index c0f25cd6932..6a70af092ed 100644 --- a/cinder/volume/drivers/nexenta/nfs.py +++ b/cinder/volume/drivers/nexenta/nfs.py @@ -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. diff --git a/cinder/volume/drivers/nexenta/ns5/jsonrpc.py b/cinder/volume/drivers/nexenta/ns5/jsonrpc.py index 2e2443ca797..a7ea7eea446 100644 --- a/cinder/volume/drivers/nexenta/ns5/jsonrpc.py +++ b/cinder/volume/drivers/nexenta/ns5/jsonrpc.py @@ -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)) diff --git a/cinder/volume/drivers/nexenta/ns5/nfs.py b/cinder/volume/drivers/nexenta/ns5/nfs.py index f8ad6d6081b..2634b585d08 100644 --- a/cinder/volume/drivers/nexenta/ns5/nfs.py +++ b/cinder/volume/drivers/nexenta/ns5/nfs.py @@ -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): diff --git a/cinder/volume/drivers/remotefs.py b/cinder/volume/drivers/remotefs.py index 40d14b8faac..b232be6dbdb 100644 --- a/cinder/volume/drivers/remotefs.py +++ b/cinder/volume/drivers/remotefs.py @@ -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. diff --git a/cinder/volume/drivers/synology/synology_common.py b/cinder/volume/drivers/synology/synology_common.py index 6b2a84f7924..b2f41525cc0 100644 --- a/cinder/volume/drivers/synology/synology_common.py +++ b/cinder/volume/drivers/synology/synology_common.py @@ -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] diff --git a/cinder/volume/drivers/veritas_access/veritas_iscsi.py b/cinder/volume/drivers/veritas_access/veritas_iscsi.py index b425aee62de..2641ed367fc 100644 --- a/cinder/volume/drivers/veritas_access/veritas_iscsi.py +++ b/cinder/volume/drivers/veritas_access/veritas_iscsi.py @@ -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):