Merge "Generate random heat stack name for cluster"

This commit is contained in:
Jenkins 2015-09-23 14:47:18 +00:00 committed by Gerrit Code Review
commit 4796e5c8ee
5 changed files with 21 additions and 33 deletions

View File

@ -82,6 +82,11 @@ class Cluster(object):
return None
@property
def stack_name(self):
extra = self.extra or {}
return extra.get('heat_stack_name', self.name)
class NodeGroup(object):
"""An object representing Node Group.

View File

@ -59,11 +59,20 @@ class HeatEngine(e.Engine):
target_count = self._get_ng_counts(cluster)
self._nullify_ng_counts(cluster)
cluster = self._generate_heat_stack_name(cluster)
self._launch_instances(cluster, target_count, CREATE_STAGES)
self._update_rollback_strategy(cluster)
@staticmethod
def _generate_heat_stack_name(cluster):
cluster = conductor.cluster_get(context.ctx(), cluster)
hsn = cluster.name + cluster.id[:8]
extra = cluster.extra.to_dict() if cluster.extra else {}
extra['heat_stack_name'] = hsn
conductor.cluster_update(context.ctx(), cluster, {'extra': extra})
return conductor.cluster_get(context.ctx(), cluster)
def _get_ng_counts(self, cluster):
count = {}
for node_group in cluster.node_groups:
@ -179,8 +188,9 @@ class HeatEngine(e.Engine):
def shutdown_cluster(self, cluster):
"""Shutdown specified cluster and all related resources."""
try:
b.execute_with_retries(heat.client().stacks.delete, cluster.name)
stack = heat.get_stack(cluster.name)
b.execute_with_retries(
heat.client().stacks.delete, cluster.stack_name)
stack = heat.get_stack(cluster.stack_name)
heat.wait_stack_completion(stack)
except heat_exc.HTTPNotFound:
LOG.warning(_LW('Did not find stack for cluster. Trying to delete '

View File

@ -25,7 +25,6 @@ from sahara.utils.openstack import base as b
from sahara.utils.openstack import heat as h
from sahara.utils.openstack import neutron
CONF = cfg.CONF
LOG = logging.getLogger(__name__)
@ -130,7 +129,7 @@ class ClusterStack(object):
heat = h.client()
kwargs = {
'stack_name': self.cluster.name,
'stack_name': self.cluster.stack_name,
'timeout_mins': 180,
'disable_rollback': disable_rollback,
'parameters': {},
@ -145,13 +144,13 @@ class ClusterStack(object):
.format(args=kwargs))
b.execute_with_retries(heat.stacks.create, **kwargs)
else:
stack = h.get_stack(self.cluster.name)
stack = h.get_stack(self.cluster.stack_name)
self.last_updated_time = stack.updated_time
LOG.debug("Updating Heat stack {stack} with args: "
"{args}".format(stack=stack, args=kwargs))
b.execute_with_retries(stack.update, **kwargs)
self.heat_stack = h.get_stack(self.cluster.name)
self.heat_stack = h.get_stack(self.cluster.stack_name)
def _need_aa_server_group(self, node_group):
for node_process in node_group.node_processes:

View File

@ -27,7 +27,6 @@ import sahara.plugins.base as plugin_base
import sahara.service.api as api
from sahara.utils import general as g
import sahara.utils.openstack.cinder as cinder
import sahara.utils.openstack.heat as heat
import sahara.utils.openstack.nova as nova
@ -255,15 +254,6 @@ def check_cluster_unique_name(name):
if name in [cluster.name for cluster in api.get_clusters()]:
raise ex.NameAlreadyExistsException(
_("Cluster with name '%s' already exists") % name)
check_heat_stack_name(name)
def check_heat_stack_name(cluster_name):
if CONF.infrastructure_engine == 'heat':
if heat.get_stack(cluster_name, raise_on_missing=False):
raise ex.NameAlreadyExistsException(
_("Cluster name '%s' is already used as Heat stack name")
% cluster_name)
def check_cluster_hostnames_lengths(cluster_name, node_groups):

View File

@ -18,7 +18,6 @@ import six
import testtools
from sahara import exceptions
from sahara import main
from sahara.service import api
from sahara.service.validations import clusters as c
from sahara.service.validations import clusters_schema as c_schema
@ -95,21 +94,6 @@ class TestClusterCreateValidation(u.ValidationTestCase):
"Cluster with name 'test' already exists")
)
def test_cluster_create_with_heat_stack_exists(self):
main.CONF.set_override('infrastructure_engine', 'heat')
self.addCleanup(main.CONF.clear_override, 'infrastructure_engine')
data = {
'name': 'test-heat',
'plugin_name': 'fake',
'hadoop_version': '0.1'
}
self._assert_create_object_validation(
data=data,
bad_req_i=(1, 'NAME_ALREADY_EXISTS',
"Cluster name 'test-heat' is already "
"used as Heat stack name")
)
def test_cluster_create_v_keypair_exists(self):
self._assert_create_object_validation(
data={