Fix build section without context.

Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
Daniel Nephin 2016-02-10 13:32:04 -05:00
parent cea7911f56
commit 2ced83e3d9
4 changed files with 22 additions and 4 deletions

View File

@ -878,6 +878,9 @@ def validate_paths(service_dict):
build_path = build build_path = build
elif isinstance(build, dict) and 'context' in build: elif isinstance(build, dict) and 'context' in build:
build_path = build['context'] build_path = build['context']
else:
# We have a build section but no context, so nothing to validate
return
if ( if (
not is_url(build_path) and not is_url(build_path) and

View File

@ -195,7 +195,12 @@
"anyOf": [ "anyOf": [
{"required": ["build"]}, {"required": ["build"]},
{"required": ["image"]} {"required": ["image"]}
] ],
"properties": {
"build": {
"required": ["context"]
}
}
} }
} }
} }

View File

@ -253,10 +253,9 @@ def handle_generic_service_error(error, path):
msg_format = "{path} contains an invalid type, it should be {msg}" msg_format = "{path} contains an invalid type, it should be {msg}"
error_msg = _parse_valid_types_from_validator(error.validator_value) error_msg = _parse_valid_types_from_validator(error.validator_value)
# TODO: no test case for this branch, there are no config options
# which exercise this branch
elif error.validator == 'required': elif error.validator == 'required':
msg_format = "{path} is invalid, {msg}" error_msg = ", ".join(error.validator_value)
msg_format = "{path} is invalid, {msg} is required."
elif error.validator == 'dependencies': elif error.validator == 'dependencies':
config_key = list(error.validator_value.keys())[0] config_key = list(error.validator_value.keys())[0]

View File

@ -1136,6 +1136,17 @@ class ConfigTest(unittest.TestCase):
config.load(config_details) config.load(config_details)
assert "Service 'one' depends on service 'three'" in exc.exconly() assert "Service 'one' depends on service 'three'" in exc.exconly()
def test_load_dockerfile_without_context(self):
config_details = build_config_details({
'version': '2',
'services': {
'one': {'build': {'dockerfile': 'Dockerfile.foo'}},
},
})
with pytest.raises(ConfigurationError) as exc:
config.load(config_details)
assert 'one.build is invalid, context is required.' in exc.exconly()
class NetworkModeTest(unittest.TestCase): class NetworkModeTest(unittest.TestCase):
def test_network_mode_standard(self): def test_network_mode_standard(self):