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:
wangqun 2016-05-11 07:07:18 +00:00
parent 7db6c56299
commit 3bd8d5eb8b
8 changed files with 40 additions and 19 deletions

View File

@ -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}

View File

@ -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)

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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'}

View File

@ -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'
}

View File

@ -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)