Add custom link names (Closes #72)

This commit is contained in:
Mark Steve Samson 2014-03-02 00:17:19 +08:00
parent c66e18c913
commit c709251f21
2 changed files with 13 additions and 5 deletions

View File

@ -12,15 +12,17 @@ def sort_service_dicts(services):
temporary_marked = set() temporary_marked = set()
sorted_services = [] sorted_services = []
get_service_names = lambda links: [link.split(':')[0] for link in links]
def visit(n): def visit(n):
if n['name'] in temporary_marked: if n['name'] in temporary_marked:
if n['name'] in n.get('links', []): if n['name'] in get_service_names(n.get('links', [])):
raise DependencyError('A service can not link to itself: %s' % n['name']) raise DependencyError('A service can not link to itself: %s' % n['name'])
else: else:
raise DependencyError('Circular import between %s' % ' and '.join(temporary_marked)) raise DependencyError('Circular import between %s' % ' and '.join(temporary_marked))
if n in unmarked: if n in unmarked:
temporary_marked.add(n['name']) temporary_marked.add(n['name'])
dependents = [m for m in services if n['name'] in m.get('links', [])] dependents = [m for m in services if n['name'] in get_service_names(m.get('links', []))]
for m in dependents: for m in dependents:
visit(m) visit(m)
temporary_marked.remove(n['name']) temporary_marked.remove(n['name'])
@ -51,8 +53,12 @@ class Project(object):
# Reference links by object # Reference links by object
links = [] links = []
if 'links' in service_dict: if 'links' in service_dict:
for service_name in service_dict.get('links', []): for link in service_dict.get('links', []):
links.append(project.get_service(service_name)) if ':' in link:
service_name, link_name = link.split(':', 1)
else:
service_name, link_name = link, None
links.append((project.get_service(service_name), link_name))
del service_dict['links'] del service_dict['links']
project.services.append(Service(client=client, project=name, links=links, **service_dict)) project.services.append(Service(client=client, project=name, links=links, **service_dict))
return project return project

View File

@ -229,8 +229,10 @@ class Service(object):
def _get_links(self): def _get_links(self):
links = [] links = []
for service in self.links: for service, link_name in self.links:
for container in service.containers(): for container in service.containers():
if link_name:
links.append((container.name, link_name))
links.append((container.name, container.name)) links.append((container.name, container.name))
links.append((container.name, container.name_without_project)) links.append((container.name, container.name_without_project))
for container in self.containers(): for container in self.containers():