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:
parent
30ff5c6f14
commit
62e8255460
@ -1,15 +1,18 @@
|
|||||||
import os
|
|
||||||
import grpc
|
|
||||||
import logging
|
import logging
|
||||||
from ..common import format_volume_id
|
import os
|
||||||
from socket import AddressFamily
|
|
||||||
from spdk.rpc.client import JSONRPCException
|
|
||||||
import shutil
|
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 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__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -204,8 +207,9 @@ class NvmfVfioDeviceManager(DeviceManager):
|
|||||||
|
|
||||||
def _get_bdev(self, client, guid):
|
def _get_bdev(self, client, guid):
|
||||||
try:
|
try:
|
||||||
return client.call('bdev_get_bdevs', {'name': guid})[0]
|
bdev_name = get_crypto_engine().get_crypto_bdev(guid) or guid
|
||||||
except JSONRPCException:
|
return client.call('bdev_get_bdevs', {'name': bdev_name})[0]
|
||||||
|
except (JSONRPCException, CryptoException):
|
||||||
logging.error('Failed to find bdev')
|
logging.error('Failed to find bdev')
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -214,14 +218,16 @@ class NvmfVfioDeviceManager(DeviceManager):
|
|||||||
if ns['name'] == bdev['name']:
|
if ns['name'] == bdev['name']:
|
||||||
return ns
|
return ns
|
||||||
|
|
||||||
def _subsystem_add_ns(self, client, bdev, subsystem, subnqn):
|
def _subsystem_add_ns(self, client, bdev, subsystem, subnqn, volume_id):
|
||||||
try:
|
try:
|
||||||
if self._get_ns(bdev, subsystem) is not None:
|
if self._get_ns(bdev, subsystem) is not None:
|
||||||
return True
|
return True
|
||||||
return client.call('nvmf_subsystem_add_ns',
|
return client.call('nvmf_subsystem_add_ns',
|
||||||
{'nqn': subnqn,
|
{'nqn': subnqn,
|
||||||
'namespace': {
|
'namespace': {
|
||||||
'bdev_name': bdev['name']}})
|
'bdev_name': bdev['name'],
|
||||||
|
'uuid': volume_id,
|
||||||
|
'nguid': volume_id_to_nguid(volume_id)}})
|
||||||
except JSONRPCException:
|
except JSONRPCException:
|
||||||
logging.error('Failed to add ns')
|
logging.error('Failed to add ns')
|
||||||
return False
|
return False
|
||||||
@ -238,7 +244,7 @@ class NvmfVfioDeviceManager(DeviceManager):
|
|||||||
if subsys is None:
|
if subsys is None:
|
||||||
raise DeviceException(grpc.StatusCode.NOT_FOUND,
|
raise DeviceException(grpc.StatusCode.NOT_FOUND,
|
||||||
'Invalid device handle')
|
'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:
|
if not result:
|
||||||
raise DeviceException(grpc.StatusCode.INTERNAL,
|
raise DeviceException(grpc.StatusCode.INTERNAL,
|
||||||
'Failed to attach volume')
|
'Failed to attach volume')
|
||||||
|
Loading…
Reference in New Issue
Block a user