mirror of https://github.com/docker/compose.git
'file' key can be omitted from extends
If the 'file' key is not set in the extends_options dict then we look for the 'service' from within the same file. Fixes this issue: https://github.com/docker/compose/issues/1237 Signed-off-by: Mazz Mosley <mazz@houseofmnowster.com>
This commit is contained in:
parent
31dedd8bdd
commit
6e4a954dbd
|
@ -163,7 +163,12 @@ class ServiceLoader(object):
|
||||||
if self.working_dir is None:
|
if self.working_dir is None:
|
||||||
raise Exception("No working_dir passed to ServiceLoader()")
|
raise Exception("No working_dir passed to ServiceLoader()")
|
||||||
|
|
||||||
other_config_path = expand_path(self.working_dir, extends_options['file'])
|
try:
|
||||||
|
extends_from_filename = extends_options['file']
|
||||||
|
except KeyError:
|
||||||
|
extends_from_filename = os.path.split(self.filename)[1]
|
||||||
|
|
||||||
|
other_config_path = expand_path(self.working_dir, extends_from_filename)
|
||||||
other_working_dir = os.path.dirname(other_config_path)
|
other_working_dir = os.path.dirname(other_config_path)
|
||||||
other_already_seen = self.already_seen + [self.signature(service_dict['name'])]
|
other_already_seen = self.already_seen + [self.signature(service_dict['name'])]
|
||||||
other_loader = ServiceLoader(
|
other_loader = ServiceLoader(
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
myweb:
|
||||||
|
extends:
|
||||||
|
service: web
|
||||||
|
environment:
|
||||||
|
- "BAR=1"
|
||||||
|
web:
|
||||||
|
image: busybox
|
||||||
|
environment:
|
||||||
|
- "BAZ=3"
|
|
@ -447,6 +447,30 @@ class ExtendsTest(unittest.TestCase):
|
||||||
dictionary['extends']['what'] = 'is this'
|
dictionary['extends']['what'] = 'is this'
|
||||||
self.assertRaisesRegexp(config.ConfigurationError, 'what', load_config)
|
self.assertRaisesRegexp(config.ConfigurationError, 'what', load_config)
|
||||||
|
|
||||||
|
def test_extends_file_defaults_to_self(self):
|
||||||
|
"""
|
||||||
|
Test not specifying a file in our extends options that the
|
||||||
|
config is valid and correctly extends from itself.
|
||||||
|
"""
|
||||||
|
service_dicts = config.load('tests/fixtures/extends/no-file-specified.yml')
|
||||||
|
self.assertEqual(service_dicts, [
|
||||||
|
{
|
||||||
|
'name': 'myweb',
|
||||||
|
'image': 'busybox',
|
||||||
|
'environment': {
|
||||||
|
"BAR": "1",
|
||||||
|
"BAZ": "3",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'web',
|
||||||
|
'image': 'busybox',
|
||||||
|
'environment': {
|
||||||
|
"BAZ": "3",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
def test_blacklisted_options(self):
|
def test_blacklisted_options(self):
|
||||||
def load_config():
|
def load_config():
|
||||||
return config.make_service_dict('myweb', {
|
return config.make_service_dict('myweb', {
|
||||||
|
|
Loading…
Reference in New Issue