Use metadata and personality with server rebuild
Nova allows setting instance metadata and injecting
personality files with a server rebuild, we should
allow that too.
Change-Id: Ic2ce21c0dc06315b9040a56bfd9e6864097ba2a7
Closes-Bug: #1650470
(cherry picked from commit 2f317af1be
)
This commit is contained in:
parent
91f73dda25
commit
a8402efb37
|
@ -486,12 +486,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
|
||||
|
|
|
@ -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,),
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Reference in New Issue