mirror of https://github.com/docker/compose.git
Detect the service that causes the invalid service name error
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
parent
c2553ac777
commit
8b92049432
|
@ -211,9 +211,12 @@ def handle_error_for_schema_with_id(error, path):
|
|||
|
||||
if is_service_dict_schema(schema_id) and error.validator == 'additionalProperties':
|
||||
return "Invalid service name '{}' - only {} characters are allowed".format(
|
||||
# The service_name is the key to the json object
|
||||
list(error.instance)[0],
|
||||
VALID_NAME_CHARS)
|
||||
# The service_name is one of the keys in the json object
|
||||
[i for i in list(error.instance) if not i or any(filter(
|
||||
lambda c: not re.match(VALID_NAME_CHARS, c), i
|
||||
))][0],
|
||||
VALID_NAME_CHARS
|
||||
)
|
||||
|
||||
if error.validator == 'additionalProperties':
|
||||
if schema_id == '#/definitions/service':
|
||||
|
|
|
@ -554,6 +554,20 @@ class ConfigTest(unittest.TestCase):
|
|||
excinfo.exconly()
|
||||
)
|
||||
|
||||
def test_config_invalid_service_name_raise_validation_error(self):
|
||||
with pytest.raises(ConfigurationError) as excinfo:
|
||||
config.load(
|
||||
build_config_details({
|
||||
'version': '2',
|
||||
'services': {
|
||||
'test_app': {'build': '.'},
|
||||
'mong\\o': {'image': 'mongo'},
|
||||
}
|
||||
})
|
||||
)
|
||||
|
||||
assert 'Invalid service name \'mong\\o\'' in excinfo.exconly()
|
||||
|
||||
def test_load_with_multiple_files_v1(self):
|
||||
base_file = config.ConfigFile(
|
||||
'base.yaml',
|
||||
|
|
Loading…
Reference in New Issue