mirror of https://github.com/docker/compose.git
Fix for #1350, nonexisting build path in parent section causes extending section to fail
Signed-off-by: Timothy Van Heest <timothy.vanheest@gmail.com>
This commit is contained in:
parent
89789c54ad
commit
855855a0e6
|
@ -64,6 +64,7 @@ def from_dictionary(dictionary, working_dir=None, filename=None):
|
|||
raise ConfigurationError('Service "%s" doesn\'t have any configuration options. All top level keys in your docker-compose.yml must map to a dictionary of configuration options.' % service_name)
|
||||
loader = ServiceLoader(working_dir=working_dir, filename=filename)
|
||||
service_dict = loader.make_service_dict(service_name, service_dict)
|
||||
validate_paths(service_dict)
|
||||
service_dicts.append(service_dict)
|
||||
|
||||
return service_dicts
|
||||
|
@ -339,12 +340,14 @@ def resolve_host_path(volume, working_dir):
|
|||
def resolve_build_path(build_path, working_dir=None):
|
||||
if working_dir is None:
|
||||
raise Exception("No working_dir passed to resolve_build_path")
|
||||
return expand_path(working_dir, build_path)
|
||||
|
||||
_path = expand_path(working_dir, build_path)
|
||||
if not os.path.exists(_path) or not os.access(_path, os.R_OK):
|
||||
raise ConfigurationError("build path %s either does not exist or is not accessible." % _path)
|
||||
else:
|
||||
return _path
|
||||
|
||||
def validate_paths(service_dict):
|
||||
if 'build' in service_dict:
|
||||
build_path = service_dict['build']
|
||||
if not os.path.exists(build_path) or not os.access(build_path, os.R_OK):
|
||||
raise ConfigurationError("build path %s either does not exist or is not accessible." % build_path)
|
||||
|
||||
|
||||
def merge_volumes(base, override):
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
dnebase:
|
||||
build: nonexistent.path
|
||||
command: /bin/true
|
||||
environment:
|
||||
- FOO=1
|
||||
- BAR=1
|
|
@ -0,0 +1,8 @@
|
|||
dnechild:
|
||||
extends:
|
||||
file: nonexistent-path-base.yml
|
||||
service: dnebase
|
||||
image: busybox
|
||||
command: /bin/true
|
||||
environment:
|
||||
- BAR=2
|
|
@ -398,6 +398,21 @@ class ExtendsTest(unittest.TestCase):
|
|||
|
||||
self.assertEqual(set(dicts[0]['volumes']), set(paths))
|
||||
|
||||
def test_parent_build_path_dne(self):
|
||||
child = config.load('tests/fixtures/extends/nonexistent-path-child.yml')
|
||||
|
||||
self.assertEqual(child, [
|
||||
{
|
||||
'name': 'dnechild',
|
||||
'image': 'busybox',
|
||||
'command': '/bin/true',
|
||||
'environment': {
|
||||
"FOO": "1",
|
||||
"BAR": "2",
|
||||
},
|
||||
},
|
||||
])
|
||||
|
||||
|
||||
class BuildPathTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
|
@ -407,7 +422,10 @@ class BuildPathTest(unittest.TestCase):
|
|||
options = {'build': 'nonexistent.path'}
|
||||
self.assertRaises(
|
||||
config.ConfigurationError,
|
||||
lambda: config.make_service_dict('foo', options, 'tests/fixtures/build-path'),
|
||||
lambda: config.from_dictionary({
|
||||
'foo': options,
|
||||
'working_dir': 'tests/fixtures/build-path'
|
||||
})
|
||||
)
|
||||
|
||||
def test_relative_path(self):
|
||||
|
|
Loading…
Reference in New Issue