Add mesos_slave_executor_env_variables validate
mesos_slave_executor_env_variables is mesos executor environment variables, and it should be a json form. (1) validate mesos_slave_executor_env_variables if matching the json form. (2) modify the mesos slave configure file (3) unit test Partially-Implements:blueprint mesos-slave-flags Change-Id: I35e56515f321b0df52b3ba0e8aba48d7dd421d58
This commit is contained in:
parent
7db6c56299
commit
3bd8d5eb8b
|
@ -14,12 +14,14 @@
|
|||
|
||||
from glanceclient import exc as glance_exception
|
||||
from novaclient import exceptions as nova_exception
|
||||
from oslo_serialization import jsonutils as json
|
||||
|
||||
from magnum.api import utils as api_utils
|
||||
from magnum.common import clients
|
||||
from magnum.common import exception
|
||||
from magnum.i18n import _
|
||||
|
||||
|
||||
SUPPORTED_ISOLATION = ['filesystem/posix', 'filesystem/linux',
|
||||
'filesystem/shared', 'posix/cpu',
|
||||
'posix/mem', 'posix/disk', 'cgroups/cpu',
|
||||
|
@ -138,11 +140,15 @@ def validate_labels_image_providers(labels):
|
|||
"flags"))
|
||||
|
||||
|
||||
def validate_labels_executor_environment_variables(labels):
|
||||
def validate_labels_executor_env_variables(labels):
|
||||
"""Validate executor_environment_variables"""
|
||||
# TODO(wangqun):this method implement will be added after this
|
||||
# first patch validate_labels is merged.
|
||||
pass
|
||||
mesos_slave_executor_env_val = labels.get(
|
||||
'mesos_slave_executor_env_variables')
|
||||
try:
|
||||
json.loads(mesos_slave_executor_env_val)
|
||||
except ValueError:
|
||||
err = (_("Json format error"))
|
||||
raise exception.InvalidParameterValue(err)
|
||||
|
||||
|
||||
def validate_os_resources(context, baymodel):
|
||||
|
@ -170,5 +176,5 @@ validators = {'image_id': validate_image,
|
|||
labels_validators = {'mesos_slave_isolation': validate_labels_isolation,
|
||||
'mesos_slave_image_providers':
|
||||
validate_labels_image_providers,
|
||||
'mesos_slave_executor_environment_variables':
|
||||
validate_labels_executor_environment_variables}
|
||||
'mesos_slave_executor_env_variables':
|
||||
validate_labels_executor_env_variables}
|
||||
|
|
|
@ -674,7 +674,7 @@ class UbuntuMesosTemplateDefinition(BaseTemplateDefinition):
|
|||
label_list = ['rexray_preempt', 'mesos_slave_isolation',
|
||||
'mesos_slave_image_providers',
|
||||
'mesos_slave_work_dir',
|
||||
'mesos_slave_executor_environment_variables']
|
||||
'mesos_slave_executor_env_variables']
|
||||
|
||||
for label in label_list:
|
||||
extra_params[label] = baymodel.labels.get(label)
|
||||
|
|
|
@ -48,5 +48,6 @@ if [ -n "$IMAGE_PROVIDERS" ]; then
|
|||
fi
|
||||
|
||||
if [ -n "$EXECUTOR_ENVIRONMENT_VARIABLES" ]; then
|
||||
echo "$EXECUTOR_ENVIRONMENT_VARIABLES" > /etc/mesos-slave/executor_environment_variables
|
||||
echo "$EXECUTOR_ENVIRONMENT_VARIABLES" > /etc/executor_environment_variables
|
||||
echo "file:///etc/executor_environment_variables" > /etc/mesos-slave/executor_environment_variables
|
||||
fi
|
||||
|
|
|
@ -180,7 +180,7 @@ parameters:
|
|||
APPC,DOCKER
|
||||
default: ""
|
||||
|
||||
mesos_slave_executor_environment_variables:
|
||||
mesos_slave_executor_env_variables:
|
||||
type: string
|
||||
description: >
|
||||
JSON object representing the environment variables that should be passed
|
||||
|
@ -426,7 +426,7 @@ resources:
|
|||
mesos_slave_isolation: {get_param: mesos_slave_isolation}
|
||||
mesos_slave_work_dir: {get_param: mesos_slave_work_dir}
|
||||
mesos_slave_image_providers: {get_param: mesos_slave_image_providers}
|
||||
mesos_slave_executor_environment_variables: {get_param: mesos_slave_executor_environment_variables}
|
||||
mesos_slave_executor_env_variables: {get_param: mesos_slave_executor_env_variables}
|
||||
|
||||
outputs:
|
||||
|
||||
|
|
|
@ -108,7 +108,7 @@ parameters:
|
|||
Comma separated list of supported image providers e.g.,
|
||||
APPC,DOCKER
|
||||
|
||||
mesos_slave_executor_environment_variables:
|
||||
mesos_slave_executor_env_variables:
|
||||
type: string
|
||||
description: >
|
||||
JSON object representing the environment variables that should be passed
|
||||
|
@ -181,7 +181,7 @@ resources:
|
|||
"$ISOLATION": {get_param: mesos_slave_isolation}
|
||||
"$WORK_DIR": {get_param: mesos_slave_work_dir}
|
||||
"$IMAGE_PROVIDERS": {get_param: mesos_slave_image_providers}
|
||||
"$EXECUTOR_ENVIRONMENT_VARIABLES": {get_param: mesos_slave_executor_environment_variables}
|
||||
"$EXECUTOR_ENVIRONMENT_VARIABLES": {get_param: mesos_slave_executor_env_variables}
|
||||
|
||||
configure_mesos_slave:
|
||||
type: OS::Heat::SoftwareConfig
|
||||
|
|
|
@ -129,6 +129,20 @@ class TestAttrValidator(base.BaseTestCase):
|
|||
'mesos_slave_isolation': 'docker/runtime'}
|
||||
attr_validator.validate_labels_image_providers(fake_labels)
|
||||
|
||||
def test_validate_labels_with_environment_variables_valid_json(self):
|
||||
contents = '{"step": "upgrade", "interface": "deploy"}'
|
||||
fack_labels = {'mesos_slave_executor_env_variables': contents}
|
||||
attr_validator.validate_labels_executor_env_variables(
|
||||
fack_labels)
|
||||
|
||||
def test_validate_labels_with_environment_variables_bad_json(self):
|
||||
fack_labels = {'mesos_slave_executor_env_variables': 'step'}
|
||||
self.assertRaisesRegex(
|
||||
exception.InvalidParameterValue,
|
||||
"Json format error",
|
||||
attr_validator.validate_labels_executor_env_variables,
|
||||
fack_labels)
|
||||
|
||||
def test_validate_labels_with_valid_isolation(self):
|
||||
fake_labels = {'mesos_slave_isolation':
|
||||
'filesystem/posix,filesystem/linux'}
|
||||
|
|
|
@ -44,7 +44,7 @@ class TestBayConductorWithMesos(base.TestCase):
|
|||
'mesos_slave_isolation':
|
||||
'docker/runtime,filesystem/linux',
|
||||
'mesos_slave_image_providers': 'docker',
|
||||
'mesos_slave_executor_environment_variables': '{}',
|
||||
'mesos_slave_executor_env_variables': '{}',
|
||||
'mesos_slave_work_dir': '/tmp/mesos/slave'
|
||||
}
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ class TestBayConductorWithMesos(base.TestCase):
|
|||
'tenant_name': 'admin',
|
||||
'domain_name': 'domainname',
|
||||
'rexray_preempt': 'False',
|
||||
'mesos_slave_executor_environment_variables': '{}',
|
||||
'mesos_slave_executor_env_variables': '{}',
|
||||
'mesos_slave_isolation': 'docker/runtime,filesystem/linux',
|
||||
'mesos_slave_work_dir': '/tmp/mesos/slave',
|
||||
'mesos_slave_image_providers': 'docker'
|
||||
|
@ -157,7 +157,7 @@ class TestBayConductorWithMesos(base.TestCase):
|
|||
'domain_name': 'domainname',
|
||||
'rexray_preempt': 'False',
|
||||
'mesos_slave_isolation': 'docker/runtime,filesystem/linux',
|
||||
'mesos_slave_executor_environment_variables': '{}',
|
||||
'mesos_slave_executor_env_variables': '{}',
|
||||
'mesos_slave_work_dir': '/tmp/mesos/slave',
|
||||
'mesos_slave_image_providers': 'docker'
|
||||
}
|
||||
|
|
|
@ -532,8 +532,8 @@ class UbuntuMesosTemplateDefinitionTestCase(base.TestCase):
|
|||
mesos_slave_work_dir = mock_baymodel.labels.get('mesos_slave_work_dir')
|
||||
mesos_slave_image_providers = mock_baymodel.labels.get(
|
||||
'image_providers')
|
||||
mesos_slave_executor_environment_variables = mock_baymodel.labels.get(
|
||||
'mesos_slave_executor_environment_variables')
|
||||
mesos_slave_executor_env_variables = mock_baymodel.labels.get(
|
||||
'mesos_slave_executor_env_variables')
|
||||
mock_bay = mock.MagicMock()
|
||||
mock_bay.uuid = '5d12f6fd-a196-4bf0-ae4c-1f639a523a52'
|
||||
del mock_bay.stack_id
|
||||
|
@ -554,8 +554,8 @@ class UbuntuMesosTemplateDefinitionTestCase(base.TestCase):
|
|||
'rexray_preempt': rexray_preempt,
|
||||
'mesos_slave_isolation': mesos_slave_isolation,
|
||||
'mesos_slave_work_dir': mesos_slave_work_dir,
|
||||
'mesos_slave_executor_environment_variables':
|
||||
mesos_slave_executor_environment_variables,
|
||||
'mesos_slave_executor_env_variables':
|
||||
mesos_slave_executor_env_variables,
|
||||
'mesos_slave_image_providers': mesos_slave_image_providers}}
|
||||
mock_get_params.assert_called_once_with(mock_context, mock_baymodel,
|
||||
mock_bay, **expected_kwargs)
|
||||
|
|
Loading…
Reference in New Issue