Modify mesos template to support removal policy

Add a parameter 'slaves_to_remove' that lists resources to be
removed on stack update. The value will be passed to
removal_policies of the 'mesos_slaves' resource group.

Change-Id: I18fcd0be962dd7414329dcfcad8bb4c79958ee9a
Partially-Implements: blueprint mesos-smart-bay-scale-down
This commit is contained in:
Wenzhi Yu 2016-06-23 16:32:07 +08:00
parent 8dee0e804d
commit b456cf7a91
3 changed files with 24 additions and 2 deletions

View File

@ -697,6 +697,12 @@ class UbuntuMesosTemplateDefinition(BaseTemplateDefinition):
for label in label_list:
extra_params[label] = baymodel.labels.get(label)
scale_mgr = kwargs.pop('scale_manager', None)
if scale_mgr:
hosts = self.get_output('mesos_slaves_private')
extra_params['slaves_to_remove'] = (
scale_mgr.get_removal_nodes(hosts))
return super(UbuntuMesosTemplateDefinition,
self).get_params(context, baymodel, bay,
extra_params=extra_params,

View File

@ -188,6 +188,15 @@ parameters:
executor will inherit the agent's environment variables.
default: ""
slaves_to_remove:
type: comma_delimited_list
description: >
List of slaves to be removed when doing an update. Individual slave may
be referenced several ways: (1) The resource name (e.g.['1', '3']),
(2) The private IP address ['10.0.0.4', '10.0.0.6']. Note: the list should
be empty when doing a create.
default: []
resources:
######################################################################
@ -399,6 +408,7 @@ resources:
- extrouter_inside
properties:
count: {get_param: number_of_slaves}
removal_policies: [{resource_list: {get_param: slaves_to_remove}}]
resource_def:
type: mesosslave.yaml
properties:

View File

@ -584,9 +584,14 @@ class UbuntuMesosTemplateDefinitionTestCase(base.TestCase):
mock_osc.cinder_region_name.return_value = 'RegionOne'
mock_osc_class.return_value = mock_osc
removal_nodes = ['node1', 'node2']
mock_scale_manager = mock.MagicMock()
mock_scale_manager.get_removal_nodes.return_value = removal_nodes
mesos_def = tdef.UbuntuMesosTemplateDefinition()
mesos_def.get_params(mock_context, mock_baymodel, mock_bay)
mesos_def.get_params(mock_context, mock_baymodel, mock_bay,
scale_manager=mock_scale_manager)
expected_kwargs = {'extra_params': {
'region_name': mock_osc.cinder_region_name.return_value,
@ -599,7 +604,8 @@ class UbuntuMesosTemplateDefinitionTestCase(base.TestCase):
'mesos_slave_work_dir': mesos_slave_work_dir,
'mesos_slave_executor_env_variables':
mesos_slave_executor_env_variables,
'mesos_slave_image_providers': mesos_slave_image_providers}}
'mesos_slave_image_providers': mesos_slave_image_providers,
'slaves_to_remove': removal_nodes}}
mock_get_params.assert_called_once_with(mock_context, mock_baymodel,
mock_bay, **expected_kwargs)