Merge pull request #2206 from dnephin/fix_extends_from_second_file

extends must be copied from override file
This commit is contained in:
mnowster 2015-10-20 10:22:58 +01:00
commit 5ed9f9bdf7
2 changed files with 52 additions and 4 deletions

View file

@ -193,7 +193,9 @@ def load(config_details):
def merge_services(base, override):
all_service_names = set(base) | set(override)
return {
name: merge_service_dicts(base.get(name, {}), override.get(name, {}))
name: merge_service_dicts_from_files(
base.get(name, {}),
override.get(name, {}))
for name in all_service_names
}
@ -270,9 +272,7 @@ class ServiceLoader(object):
extends,
self.filename
)
self.extended_config_path = self.get_extended_config_path(
extends
)
self.extended_config_path = self.get_extended_config_path(extends)
self.extended_service_name = extends['service']
config = load_yaml(self.extended_config_path)
@ -355,6 +355,17 @@ def process_container_options(service_dict, working_dir=None):
return service_dict
def merge_service_dicts_from_files(base, override):
"""When merging services from multiple files we need to merge the `extends`
field. This is not handled by `merge_service_dicts()` which is used to
perform the `extends`.
"""
new_service = merge_service_dicts(base, override)
if 'extends' in override:
new_service['extends'] = override['extends']
return new_service
def merge_service_dicts(base, override):
d = base.copy()