diff options
-rw-r--r-- | heat/engine/clients/os/nova.py | 5 | ||||
-rw-r--r-- | heat/engine/resources/openstack/nova/server.py | 11 | ||||
-rw-r--r-- | heat/tests/openstack/nova/test_server.py | 9 |
3 files changed, 19 insertions, 6 deletions
diff --git a/heat/engine/clients/os/nova.py b/heat/engine/clients/os/nova.py index 9d60c1c49..b207c4895 100644 --- a/heat/engine/clients/os/nova.py +++ b/heat/engine/clients/os/nova.py @@ -496,12 +496,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 064397804..0fa363b1a 100644 --- a/heat/engine/resources/openstack/nova/server.py +++ b/heat/engine/resources/openstack/nova/server.py @@ -1081,13 +1081,22 @@ 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 6a883bbd3..2338c3399 100644 --- a/heat/tests/openstack/nova/test_server.py +++ b/heat/tests/openstack/nova/test_server.py @@ -1854,11 +1854,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". @@ -1915,7 +1917,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] |