Merge "Reduce Server update complexity to below 20"
This commit is contained in:
commit
6ca66128f1
|
@ -776,36 +776,22 @@ class Server(stack_user.StackUser):
|
|||
if net is not None:
|
||||
net['port'] = props['port']
|
||||
|
||||
def handle_update(self, json_snippet, tmpl_diff, prop_diff):
|
||||
if 'Metadata' in tmpl_diff:
|
||||
self.metadata_set(tmpl_diff['Metadata'])
|
||||
|
||||
checkers = []
|
||||
server = None
|
||||
|
||||
if self.METADATA in prop_diff:
|
||||
server = self.nova().servers.get(self.resource_id)
|
||||
self.client_plugin().meta_update(server,
|
||||
prop_diff[self.METADATA])
|
||||
|
||||
if self.FLAVOR in prop_diff:
|
||||
|
||||
def _update_flavor(self, server, prop_diff):
|
||||
flavor_update_policy = (
|
||||
prop_diff.get(self.FLAVOR_UPDATE_POLICY) or
|
||||
self.properties.get(self.FLAVOR_UPDATE_POLICY))
|
||||
flavor = prop_diff[self.FLAVOR]
|
||||
|
||||
if flavor_update_policy == 'REPLACE':
|
||||
raise resource.UpdateReplace(self.name)
|
||||
|
||||
flavor = prop_diff[self.FLAVOR]
|
||||
flavor_id = self.client_plugin().get_flavor_id(flavor)
|
||||
if not server:
|
||||
server = self.nova().servers.get(self.resource_id)
|
||||
checker = scheduler.TaskRunner(self.client_plugin().resize,
|
||||
return scheduler.TaskRunner(self.client_plugin().resize,
|
||||
server, flavor, flavor_id)
|
||||
checkers.append(checker)
|
||||
|
||||
if self.IMAGE in prop_diff:
|
||||
def _update_image(self, server, prop_diff):
|
||||
image_update_policy = (
|
||||
prop_diff.get(self.IMAGE_UPDATE_POLICY) or
|
||||
self.properties.get(self.IMAGE_UPDATE_POLICY))
|
||||
|
@ -817,22 +803,13 @@ class Server(stack_user.StackUser):
|
|||
server = self.nova().servers.get(self.resource_id)
|
||||
preserve_ephemeral = (
|
||||
image_update_policy == 'REBUILD_PRESERVE_EPHEMERAL')
|
||||
checker = scheduler.TaskRunner(
|
||||
|
||||
return scheduler.TaskRunner(
|
||||
self.client_plugin().rebuild, server, image_id,
|
||||
preserve_ephemeral=preserve_ephemeral)
|
||||
checkers.append(checker)
|
||||
|
||||
if self.NAME in prop_diff:
|
||||
if not server:
|
||||
server = self.nova().servers.get(self.resource_id)
|
||||
self.client_plugin().rename(server, prop_diff[self.NAME])
|
||||
|
||||
if self.ADMIN_PASS in prop_diff:
|
||||
if not server:
|
||||
server = self.nova().servers.get(self.resource_id)
|
||||
server.change_password(prop_diff[self.ADMIN_PASS])
|
||||
|
||||
if self.NETWORKS in prop_diff:
|
||||
def _update_networks(self, server, prop_diff):
|
||||
checkers = []
|
||||
new_networks = prop_diff.get(self.NETWORKS)
|
||||
attach_first_free_port = False
|
||||
if not new_networks:
|
||||
|
@ -851,6 +828,7 @@ class Server(stack_user.StackUser):
|
|||
checker = scheduler.TaskRunner(server.interface_detach,
|
||||
iface.port_id)
|
||||
checkers.append(checker)
|
||||
|
||||
# if we have any information in networks field, we should:
|
||||
# 1. find similar networks, if they exist
|
||||
# 2. remove these networks from new_networks and old_networks
|
||||
|
@ -894,6 +872,39 @@ class Server(stack_user.StackUser):
|
|||
None, None, None)
|
||||
checkers.append(checker)
|
||||
|
||||
return checkers
|
||||
|
||||
def handle_update(self, json_snippet, tmpl_diff, prop_diff):
|
||||
if 'Metadata' in tmpl_diff:
|
||||
self.metadata_set(tmpl_diff['Metadata'])
|
||||
|
||||
checkers = []
|
||||
server = None
|
||||
|
||||
if self.METADATA in prop_diff:
|
||||
server = self.nova().servers.get(self.resource_id)
|
||||
self.client_plugin().meta_update(server,
|
||||
prop_diff[self.METADATA])
|
||||
|
||||
if self.FLAVOR in prop_diff:
|
||||
checkers.append(self._update_flavor(server, prop_diff))
|
||||
|
||||
if self.IMAGE in prop_diff:
|
||||
checkers.append(self._update_image(server, prop_diff))
|
||||
|
||||
if self.NAME in prop_diff:
|
||||
if not server:
|
||||
server = self.nova().servers.get(self.resource_id)
|
||||
self.client_plugin().rename(server, prop_diff[self.NAME])
|
||||
|
||||
if self.ADMIN_PASS in prop_diff:
|
||||
if not server:
|
||||
server = self.nova().servers.get(self.resource_id)
|
||||
server.change_password(prop_diff[self.ADMIN_PASS])
|
||||
|
||||
if self.NETWORKS in prop_diff:
|
||||
checkers.extend(self._update_networks(server, prop_diff))
|
||||
|
||||
# Optimization: make sure the first task is started before
|
||||
# check_update_complete.
|
||||
if checkers:
|
||||
|
|
Loading…
Reference in New Issue