Fix a bug in ExtendsResolver where the service name of the extended service was wrong.
This bug can be seen by the change to the test case. When the extended service uses a different name, the error was reported incorrectly. By fixing this bug we can simplify self.signature and self.detect_cycles to always use self.service_name. Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
parent
a92d86308f
commit
5e97b806d5
4 changed files with 25 additions and 22 deletions
|
|
@ -247,11 +247,17 @@ class ServiceExtendsResolver(object):
|
|||
self.service_name = service_name
|
||||
self.service_dict['name'] = service_name
|
||||
|
||||
def detect_cycle(self, name):
|
||||
if self.signature(name) in self.already_seen:
|
||||
raise CircularReference(self.already_seen + [self.signature(name)])
|
||||
@property
|
||||
def signature(self):
|
||||
return self.filename, self.service_name
|
||||
|
||||
def detect_cycle(self):
|
||||
if self.signature in self.already_seen:
|
||||
raise CircularReference(self.already_seen + [self.signature])
|
||||
|
||||
def run(self):
|
||||
self.detect_cycle()
|
||||
|
||||
service_dict = dict(self.service_dict)
|
||||
env = resolve_environment(self.working_dir, self.service_dict)
|
||||
if env:
|
||||
|
|
@ -284,12 +290,11 @@ class ServiceExtendsResolver(object):
|
|||
resolver = ServiceExtendsResolver(
|
||||
os.path.dirname(extended_config_path),
|
||||
extended_config_path,
|
||||
self.service_name,
|
||||
service_name,
|
||||
service_config,
|
||||
already_seen=self.already_seen + [self.signature(self.service_name)],
|
||||
already_seen=self.already_seen + [self.signature],
|
||||
)
|
||||
|
||||
resolver.detect_cycle(service_name)
|
||||
other_service_dict = process_service(resolver.working_dir, resolver.run())
|
||||
validate_extended_service_dict(
|
||||
other_service_dict,
|
||||
|
|
@ -309,9 +314,6 @@ class ServiceExtendsResolver(object):
|
|||
return expand_path(self.working_dir, extends_options['file'])
|
||||
return self.filename
|
||||
|
||||
def signature(self, name):
|
||||
return self.filename, name
|
||||
|
||||
|
||||
def resolve_environment(working_dir, service_dict):
|
||||
"""Unpack any environment variables from an env_file, if set.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue