Merge "Generate random heat stack name for cluster"
This commit is contained in:
commit
4796e5c8ee
|
@ -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.
|
||||
|
|
|
@ -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 '
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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={
|
||||
|
|
Loading…
Reference in New Issue