Преглед на файлове

Add custom link names (Closes #72)

Mark Steve Samson преди 11 години
родител
ревизия
c709251f21
променени са 2 файла, в които са добавени 13 реда и са изтрити 5 реда
  1. 10 4
      fig/project.py
  2. 3 1
      fig/service.py

+ 10 - 4
fig/project.py

@@ -12,15 +12,17 @@ def sort_service_dicts(services):
     temporary_marked = set()
     sorted_services = []
 
+    get_service_names = lambda links: [link.split(':')[0] for link in links]
+
     def visit(n):
         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'])
             else:
                 raise DependencyError('Circular import between %s' % ' and '.join(temporary_marked))
         if n in unmarked:
             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:
                 visit(m)
             temporary_marked.remove(n['name'])
@@ -51,8 +53,12 @@ class Project(object):
             # Reference links by object
             links = []
             if 'links' in service_dict:
-                for service_name in service_dict.get('links', []):
-                    links.append(project.get_service(service_name))
+                for link in service_dict.get('links', []):
+                    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']
             project.services.append(Service(client=client, project=name, links=links, **service_dict))
         return project

+ 3 - 1
fig/service.py

@@ -229,8 +229,10 @@ class Service(object):
 
     def _get_links(self):
         links = []
-        for service in self.links:
+        for service, link_name in self.links:
             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_without_project))
         for container in self.containers():