From 9a81623581f0488b3f8230dcbbd82a563e84346b Mon Sep 17 00:00:00 2001 From: Ben Firshman Date: Mon, 9 Dec 2013 21:39:11 +0000 Subject: [PATCH] Create links when creating containers --- plum/service.py | 19 ++++++++++++++++++- plum/tests/service_collection_test.py | 1 + plum/tests/service_test.py | 13 +++++++++++++ plum/tests/testcases.py | 3 ++- 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/plum/service.py b/plum/service.py index 6b928564d..3f9d95f50 100644 --- a/plum/service.py +++ b/plum/service.py @@ -34,7 +34,10 @@ class Service(object): number = self.next_container_number() name = make_name(self.name, number) container = self.client.create_container(self.image, self.command, name=name) - self.client.start(container['Id']) + self.client.start( + container['Id'], + links=self._get_links(), + ) def stop_container(self): self.client.kill(self.containers[0]['Id']) @@ -47,6 +50,20 @@ class Service(object): else: return max(numbers) + 1 + def get_names(self): + return [get_container_name(c) for c in self.containers] + + def inspect(self): + return [self.client.inspect_container(c['Id']) for c in self.containers] + + def _get_links(self): + links = {} + for service in self.links: + for name in service.get_names(): + links[name] = name + return links + + def make_name(prefix, number): return '%s_%s' % (prefix, number) diff --git a/plum/tests/service_collection_test.py b/plum/tests/service_collection_test.py index 0125511ed..8029b6e9f 100644 --- a/plum/tests/service_collection_test.py +++ b/plum/tests/service_collection_test.py @@ -59,3 +59,4 @@ class ServiceCollectionTest(ServiceTestCase): self.assertEqual(len(collection[1].containers), 0) + diff --git a/plum/tests/service_test.py b/plum/tests/service_test.py index 5af3ef7b7..9c3726bcd 100644 --- a/plum/tests/service_test.py +++ b/plum/tests/service_test.py @@ -65,3 +65,16 @@ class ScalingTestCase(ServiceTestCase): self.service.stop() self.assertEqual(len(self.service.containers), 0) + + +class LinksTestCase(ServiceTestCase): + def test_links_are_created_when_starting(self): + db = self.create_service('db') + web = self.create_service('web', links=[db]) + db.start() + web.start() + self.assertIn('/web_1/db_1', db.containers[0]['Names']) + db.stop() + web.stop() + + diff --git a/plum/tests/testcases.py b/plum/tests/testcases.py index 7be5b99be..df13e752b 100644 --- a/plum/tests/testcases.py +++ b/plum/tests/testcases.py @@ -18,12 +18,13 @@ class ServiceTestCase(TestCase): self.client.kill(c['Id']) self.client.remove_container(c['Id']) - def create_service(self, name): + def create_service(self, name, **kwargs): return Service( name=name, client=self.client, image="ubuntu", command=["/bin/sleep", "300"], + **kwargs )