sma: crypto support for nvmf/vfiouser devices

The nvmf/vfiouser devices will now support attaching volumes with
encryption enabled. Reorder 'imports' according to PEP 8.

Change-Id: I9862c655c2b57b8bb307f6091d4967afc21c11da
Signed-off-by: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13982
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Sebastian Brzezinka 2022-08-11 13:29:40 +02:00 committed by Ben Walker
parent 30ff5c6f14
commit 62e8255460

View File

@ -1,15 +1,18 @@
import os
import grpc
import logging
from ..common import format_volume_id
from socket import AddressFamily
from spdk.rpc.client import JSONRPCException
import os
import shutil
from .device import DeviceManager, DeviceException
from google.protobuf import wrappers_pb2 as wrap
from ..qmp import QMPClient, QMPError
from ..proto import sma_pb2
from contextlib import contextmanager
from socket import AddressFamily
import grpc
from google.protobuf import wrappers_pb2 as wrap
from spdk.rpc.client import JSONRPCException
from ..common import format_volume_id, volume_id_to_nguid
from ..proto import sma_pb2
from ..qmp import QMPClient, QMPError
from ..volume import CryptoException, get_crypto_engine
from .device import DeviceException, DeviceManager
log = logging.getLogger(__name__)
@ -204,8 +207,9 @@ class NvmfVfioDeviceManager(DeviceManager):
def _get_bdev(self, client, guid):
try:
return client.call('bdev_get_bdevs', {'name': guid})[0]
except JSONRPCException:
bdev_name = get_crypto_engine().get_crypto_bdev(guid) or guid
return client.call('bdev_get_bdevs', {'name': bdev_name})[0]
except (JSONRPCException, CryptoException):
logging.error('Failed to find bdev')
return None
@ -214,14 +218,16 @@ class NvmfVfioDeviceManager(DeviceManager):
if ns['name'] == bdev['name']:
return ns
def _subsystem_add_ns(self, client, bdev, subsystem, subnqn):
def _subsystem_add_ns(self, client, bdev, subsystem, subnqn, volume_id):
try:
if self._get_ns(bdev, subsystem) is not None:
return True
return client.call('nvmf_subsystem_add_ns',
{'nqn': subnqn,
'namespace': {
'bdev_name': bdev['name']}})
'bdev_name': bdev['name'],
'uuid': volume_id,
'nguid': volume_id_to_nguid(volume_id)}})
except JSONRPCException:
logging.error('Failed to add ns')
return False
@ -238,7 +244,7 @@ class NvmfVfioDeviceManager(DeviceManager):
if subsys is None:
raise DeviceException(grpc.StatusCode.NOT_FOUND,
'Invalid device handle')
result = self._subsystem_add_ns(client, bdev, subsys, nqn)
result = self._subsystem_add_ns(client, bdev, subsys, nqn, volume_id)
if not result:
raise DeviceException(grpc.StatusCode.INTERNAL,
'Failed to attach volume')