Removed useless 'Launcher' class from heat engine

There is no sense in separate Launcher class that inherited from
Engine to have access to protected methods. This is just method
call. So, moved all class vars to arguments. Code became much
more clear.

Change-Id: I436f38cd8424158b10783c70f9ad43d49c8c2f28
Partial-Bug: #1459788
This commit is contained in:
Andrew Lazarev 2015-07-17 14:18:59 -07:00
parent 4f61269415
commit f4cec454ef

View File

@ -33,6 +33,11 @@ conductor = c.API
CONF = cfg.CONF
LOG = logging.getLogger(__name__)
CREATE_STAGES = ["Spawning", "Waiting", "Preparing"]
SCALE_STAGES = ["Scaling: Spawning", "Scaling: Waiting", "Scaling: Preparing"]
ROLLBACK_STAGES = ["Rollback: Spawning", "Rollback: Waiting",
"Rollback: Preparing"]
class HeatEngine(e.Engine):
def get_type_and_version(self):
@ -41,12 +46,10 @@ class HeatEngine(e.Engine):
def create_cluster(self, cluster):
self._update_rollback_strategy(cluster, shutdown=True)
launcher = _CreateLauncher()
target_count = self._get_ng_counts(cluster)
self._nullify_ng_counts(cluster)
launcher.launch_instances(cluster, target_count)
self._launch_instances(cluster, target_count, CREATE_STAGES)
self._update_rollback_strategy(cluster)
@ -70,16 +73,16 @@ class HeatEngine(e.Engine):
self._update_rollback_strategy(cluster, rollback_count=rollback_count,
target_count=target_count)
launcher = _ScaleLauncher()
launcher.launch_instances(cluster, target_count)
inst_ids = self._launch_instances(
cluster, target_count, SCALE_STAGES,
update_stack=True, disable_rollback=False)
cluster = conductor.cluster_get(ctx, cluster)
g.clean_cluster_from_empty_ng(cluster)
self._update_rollback_strategy(cluster)
return launcher.inst_ids
return inst_ids
def rollback_cluster(self, cluster, reason):
rollback_info = cluster.rollback_info or {}
@ -159,8 +162,8 @@ class HeatEngine(e.Engine):
if rollback_count[ng] > target_count[ng]:
rollback_count[ng] = target_count[ng]
launcher = _RollbackLauncher()
launcher.launch_instances(cluster, rollback_count)
self._launch_instances(cluster, rollback_count, ROLLBACK_STAGES,
update_stack=True)
def shutdown_cluster(self, cluster):
"""Shutdown specified cluster and all related resources."""
@ -180,45 +183,43 @@ class HeatEngine(e.Engine):
self._clean_job_executions(cluster)
self._remove_db_objects(cluster)
class _CreateLauncher(HeatEngine):
STAGES = ["Spawning", "Waiting", "Preparing"]
UPDATE_STACK = False
DISABLE_ROLLBACK = True
inst_ids = []
@cpo.event_wrapper(
True, step=_('Create Heat stack'), param=('cluster', 1))
def create_instances(self, cluster, target_count):
def _create_instances(self, cluster, target_count, update_stack=False,
disable_rollback=True):
tmpl = ht.ClusterTemplate(cluster)
self._configure_template(tmpl, cluster, target_count)
stack = tmpl.instantiate(update_existing=self.UPDATE_STACK,
disable_rollback=self.DISABLE_ROLLBACK)
stack = tmpl.instantiate(update_existing=update_stack,
disable_rollback=disable_rollback)
heat.wait_stack_completion(stack.heat_stack)
self.inst_ids = self._populate_cluster(cluster, stack)
return self._populate_cluster(cluster, stack)
def launch_instances(self, cluster, target_count):
def _launch_instances(self, cluster, target_count, stages,
update_stack=False, disable_rollback=True):
# create all instances
cluster = g.change_cluster_status(cluster, self.STAGES[0])
cluster = g.change_cluster_status(cluster, stages[0])
self.create_instances(cluster, target_count)
inst_ids = self._create_instances(
cluster, target_count, update_stack, disable_rollback)
# wait for all instances are up and networks ready
cluster = g.change_cluster_status(cluster, self.STAGES[1])
cluster = g.change_cluster_status(cluster, stages[1])
instances = g.get_instances(cluster, self.inst_ids)
instances = g.get_instances(cluster, inst_ids)
self._await_networks(cluster, instances)
# prepare all instances
cluster = g.change_cluster_status(cluster, self.STAGES[2])
cluster = g.change_cluster_status(cluster, stages[2])
instances = g.get_instances(cluster, self.inst_ids)
instances = g.get_instances(cluster, inst_ids)
volumes.mount_to_instances(instances)
self._configure_instances(cluster)
return inst_ids
def _configure_template(self, tmpl, cluster, target_count):
ctx = context.ctx()
for node_group in cluster.node_groups:
@ -230,14 +231,3 @@ class _CreateLauncher(HeatEngine):
# the excessive ones
for i in range(count, node_group.count):
conductor.instance_remove(ctx, node_group.instances[i])
class _ScaleLauncher(_CreateLauncher):
STAGES = ["Scaling: Spawning", "Scaling: Waiting", "Scaling: Preparing"]
UPDATE_STACK = True
DISABLE_ROLLBACK = False
class _RollbackLauncher(_CreateLauncher):
STAGES = ["Rollback: Spawning", "Rollback: Waiting", "Rollback: Preparing"]
UPDATE_STACK = True