summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLee Yarwood <lyarwood@redhat.com>2020-11-25 15:46:36 +0000
committermelanie witt <melwittt@gmail.com>2022-08-16 08:08:21 +0000
commit5c228e8d39a6bf6e0e4a4efbb8db3993a2dfb029 (patch)
treee527785fe652835d04046459d8464e7a330b7155
parent6d9e8739d4a5a0e12f99f7c793f2fc6e84b5c43e (diff)
downloadnova-5c228e8d39a6bf6e0e4a4efbb8db3993a2dfb029.tar.gz
blockinfo: Add encryption details to the disk_info mappings when provided
Change-Id: Ice54f63d4e27650755e61775cd386222f4f9e2ab
-rw-r--r--nova/tests/unit/virt/libvirt/test_blockinfo.py11
-rw-r--r--nova/virt/libvirt/blockinfo.py11
2 files changed, 20 insertions, 2 deletions
diff --git a/nova/tests/unit/virt/libvirt/test_blockinfo.py b/nova/tests/unit/virt/libvirt/test_blockinfo.py
index 9505dbe31c..5a0dbb40ce 100644
--- a/nova/tests/unit/virt/libvirt/test_blockinfo.py
+++ b/nova/tests/unit/virt/libvirt/test_blockinfo.py
@@ -1172,7 +1172,10 @@ class LibvirtBlockInfoTest(test.NoDBTestCase):
'device_type': 'lame_type',
'delete_on_termination': True},
{'disk_bus': 'sata', 'guest_format': None,
- 'device_name': '/dev/sda', 'size': 3}]
+ 'device_name': '/dev/sda', 'size': 3},
+ {'encrypted': True, 'encryption_secret_uuid': uuids.secret,
+ 'encryption_format': 'luks',
+ 'encryption_options': '{"json": "options"}'}]
expected = [{'dev': 'vds', 'type': 'disk', 'bus': 'usb'},
{'dev': 'vdb', 'type': 'disk',
'bus': 'virtio', 'format': 'ext4'},
@@ -1181,7 +1184,11 @@ class LibvirtBlockInfoTest(test.NoDBTestCase):
'bus': 'scsi', 'boot_index': '1'},
{'dev': 'vdo', 'type': 'disk',
'bus': 'scsi', 'boot_index': '2'},
- {'dev': 'sda', 'type': 'disk', 'bus': 'sata'}]
+ {'dev': 'sda', 'type': 'disk', 'bus': 'sata'},
+ {'dev': 'vda', 'type': 'disk', 'bus': 'virtio',
+ 'encrypted': True, 'encryption_secret_uuid': uuids.secret,
+ 'encryption_format': 'luks',
+ 'encryption_options': {'json': 'options'}}]
image_meta = objects.ImageMeta.from_dict(self.test_image_meta)
for bdm, expected in zip(bdms, expected):
diff --git a/nova/virt/libvirt/blockinfo.py b/nova/virt/libvirt/blockinfo.py
index 9a4aa671be..4efc6fbaeb 100644
--- a/nova/virt/libvirt/blockinfo.py
+++ b/nova/virt/libvirt/blockinfo.py
@@ -73,6 +73,7 @@ import itertools
import operator
from oslo_config import cfg
+from oslo_serialization import jsonutils
from nova import block_device
@@ -400,6 +401,16 @@ def get_info_from_bdm(instance, virt_type, image_meta, bdm,
# NOTE(ndipanov): libvirt starts ordering from 1, not 0
bdm_info['boot_index'] = str(boot_index + 1)
+ # If the device is encrypted pass through the secret, format and options
+ if bdm.get('encrypted'):
+ bdm_info['encrypted'] = bdm.get('encrypted')
+ bdm_info['encryption_secret_uuid'] = bdm.get('encryption_secret_uuid')
+ bdm_info['encryption_format'] = bdm.get('encryption_format')
+ encryption_options = bdm.get('encryption_options')
+ if encryption_options:
+ bdm_info['encryption_options'] = jsonutils.loads(
+ encryption_options)
+
return bdm_info