From 239464ab7453c183e0494c4e52679d06102bfdda Mon Sep 17 00:00:00 2001 From: Feodor Tersin Date: Thu, 29 Dec 2016 12:24:28 +0300 Subject: [PATCH] Honor Nova's restriction for bdm fields Nova does not allow None values for bdm fields. However it stores them in image metadata for volume bdm during snapshot operation of volume backed instance. Ec2Api sends them back to Nova during run instance operation, which violates Nova's restriction. Here we cut out None values from image bdms before use it. Change-Id: Ice913c935e288f1cb615443324c05ca3c31efca6 --- ec2api/api/instance.py | 2 ++ ec2api/tests/unit/test_instance.py | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ec2api/api/instance.py b/ec2api/api/instance.py index 47fe5850..e888d7cd 100644 --- a/ec2api/api/instance.py +++ b/ec2api/api/instance.py @@ -1003,6 +1003,8 @@ def _build_block_device_mapping(context, block_device_mapping, os_image): _populate_parsed_bdm_parameter(bdm, short_root_device_name) else: + image_bdm = {k: v for k, v in six.iteritems(image_bdm) + if v is not None} image_bdm.update(bdm) bdm = image_bdm diff --git a/ec2api/tests/unit/test_instance.py b/ec2api/tests/unit/test_instance.py index 96a22dff..fa7aeade 100644 --- a/ec2api/tests/unit/test_instance.py +++ b/ec2api/tests/unit/test_instance.py @@ -1508,7 +1508,8 @@ class InstancePrivateTestCase(test_base.BaseTestCase): 'device_name': '/dev/vda', 'source_type': 'snapshot', 'snapshot_id': fakes.ID_OS_SNAPSHOT_1, - 'delete_on_termination': True}, + 'delete_on_termination': True, + 'disk_bus': None}, {'device_name': 'vdb', 'source_type': 'snapshot', 'snapshot_id': fakes.random_os_id(),