summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--heat/engine/clients/os/nova.py5
-rw-r--r--heat/engine/resources/openstack/nova/server.py12
-rw-r--r--heat/tests/openstack/nova/test_server.py9
3 files changed, 20 insertions, 6 deletions
diff --git a/heat/engine/clients/os/nova.py b/heat/engine/clients/os/nova.py
index 4a8c58eb2..54239ed84 100644
--- a/heat/engine/clients/os/nova.py
+++ b/heat/engine/clients/os/nova.py
@@ -494,12 +494,13 @@ echo -e '%s\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers
result=msg, resource_status=status)
def rebuild(self, server_id, image_id, password=None,
- preserve_ephemeral=False):
+ preserve_ephemeral=False, meta=None, files=None):
"""Rebuild the server and call check_rebuild to verify."""
server = self.fetch_server(server_id)
if server:
server.rebuild(image_id, password=password,
- preserve_ephemeral=preserve_ephemeral)
+ preserve_ephemeral=preserve_ephemeral,
+ meta=meta, files=files)
return True
else:
return False
diff --git a/heat/engine/resources/openstack/nova/server.py b/heat/engine/resources/openstack/nova/server.py
index a1ebdd56d..80f373f70 100644
--- a/heat/engine/resources/openstack/nova/server.py
+++ b/heat/engine/resources/openstack/nova/server.py
@@ -1122,13 +1122,23 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin,
image_update_policy = (
prop_diff.get(self.IMAGE_UPDATE_POLICY) or
self.properties[self.IMAGE_UPDATE_POLICY])
+
+ instance_meta = prop_diff.get(self.METADATA,
+ self.properties[self.METADATA])
+
+ if instance_meta is not None:
+ instance_meta = self.client_plugin().meta_serialize(instance_meta)
+ personality_files = self.properties[self.PERSONALITY]
+
image = prop_diff[self.IMAGE]
preserve_ephemeral = (
image_update_policy == 'REBUILD_PRESERVE_EPHEMERAL')
password = (prop_diff.get(self.ADMIN_PASS) or
self.properties[self.ADMIN_PASS])
kwargs = {'password': password,
- 'preserve_ephemeral': preserve_ephemeral}
+ 'preserve_ephemeral': preserve_ephemeral,
+ 'meta': instance_meta,
+ 'files': personality_files}
prg = progress.ServerUpdateProgress(self.resource_id,
'rebuild',
handler_extra={'args': (image,),
diff --git a/heat/tests/openstack/nova/test_server.py b/heat/tests/openstack/nova/test_server.py
index 97258f87e..9021c2bb2 100644
--- a/heat/tests/openstack/nova/test_server.py
+++ b/heat/tests/openstack/nova/test_server.py
@@ -2013,11 +2013,13 @@ class ServersTest(common.HeatTestCase):
if 'REBUILD' == policy:
mock_rebuild.assert_called_once_with(
return_server, '2', password=password,
- preserve_ephemeral=False)
+ preserve_ephemeral=False,
+ meta=None, files={})
else:
mock_rebuild.assert_called_once_with(
return_server, '2', password=password,
- preserve_ephemeral=True)
+ preserve_ephemeral=True,
+ meta=None, files={})
def test_server_update_image_rebuild_status_rebuild(self):
# Normally we will see 'REBUILD' first and then 'ACTIVE".
@@ -2078,7 +2080,8 @@ class ServersTest(common.HeatTestCase):
six.text_type(error))
self.assertEqual((server.UPDATE, server.FAILED), server.state)
mock_rebuild.assert_called_once_with(
- return_server, '2', password=None, preserve_ephemeral=False)
+ return_server, '2', password=None, preserve_ephemeral=False,
+ meta=None, files={})
def test_server_update_properties(self):
return_server = self.fc.servers.list()[1]