summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-10-24 19:10:04 +0000
committerGerrit Code Review <review@openstack.org>2012-10-24 19:10:04 +0000
commitfbf7ab67a853d3fda2670c352f73069522495f52 (patch)
treeaa58fe492933b0eb68e49727794bc0cae7e2aa8f
parentec8d2569f5ab453279913ec1d0c4684235b66a08 (diff)
parent7c9761b3bb52788021b5bf0eb9726af833db4074 (diff)
Merge "Fix error on invalid delete_on_termination value"
-rw-r--r--nova/api/openstack/compute/servers.py6
-rw-r--r--nova/tests/api/openstack/compute/test_servers.py23
2 files changed, 28 insertions, 1 deletions
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py
index c5e829d52..8288f0424 100644
--- a/nova/api/openstack/compute/servers.py
+++ b/nova/api/openstack/compute/servers.py
@@ -796,7 +796,11 @@ class Controller(wsgi.Controller):
block_device_mapping = None
if self.ext_mgr.is_loaded('os-volumes'):
- block_device_mapping = server_dict.get('block_device_mapping')
+ block_device_mapping = server_dict.get('block_device_mapping', [])
+ for bdm in block_device_mapping:
+ if 'delete_on_termination' in bdm:
+ bdm['delete_on_termination'] = utils.bool_from_str(
+ bdm['delete_on_termination'])
ret_resv_id = False
# min_count and max_count are optional. If they exist, they may come
diff --git a/nova/tests/api/openstack/compute/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py
index 117ff26a4..58b81bf0c 100644
--- a/nova/tests/api/openstack/compute/test_servers.py
+++ b/nova/tests/api/openstack/compute/test_servers.py
@@ -2099,6 +2099,29 @@ class ServersControllerCreateTest(test.TestCase):
self.stubs.Set(compute_api.API, 'create', create)
self._test_create_extra(params)
+ def test_create_instance_with_bdm_delete_on_termination(self):
+ self.ext_mgr.extensions = {'os-volumes': 'fake'}
+ bdm = [{'device_name': 'foo1', 'delete_on_termination': 1},
+ {'device_name': 'foo2', 'delete_on_termination': True},
+ {'device_name': 'foo3', 'delete_on_termination': 'invalid'},
+ {'device_name': 'foo4', 'delete_on_termination': 0},
+ {'device_name': 'foo5', 'delete_on_termination': False}]
+ expected_dbm = [
+ {'device_name': 'foo1', 'delete_on_termination': True},
+ {'device_name': 'foo2', 'delete_on_termination': True},
+ {'device_name': 'foo3', 'delete_on_termination': False},
+ {'device_name': 'foo4', 'delete_on_termination': False},
+ {'device_name': 'foo5', 'delete_on_termination': False}]
+ params = {'block_device_mapping': bdm}
+ old_create = compute_api.API.create
+
+ def create(*args, **kwargs):
+ self.assertEqual(kwargs['block_device_mapping'], expected_dbm)
+ return old_create(*args, **kwargs)
+
+ self.stubs.Set(compute_api.API, 'create', create)
+ self._test_create_extra(params)
+
def test_create_instance_with_user_data_enabled(self):
self.ext_mgr.extensions = {'os-user-data': 'fake'}
user_data = 'fake'