diff --git a/fig/cli/command.py b/fig/cli/command.py index 2bece9139..36d4c0c6c 100644 --- a/fig/cli/command.py +++ b/fig/cli/command.py @@ -3,41 +3,18 @@ import logging import os import re import yaml -import socket from ..project import Project from .docopt_command import DocoptCommand from .formatter import Formatter -from .utils import cached_property -from .errors import UserError +from .utils import cached_property, docker_url log = logging.getLogger(__name__) class Command(DocoptCommand): @cached_property def client(self): - if os.environ.get('DOCKER_URL'): - return Client(os.environ['DOCKER_URL']) - - socket_path = '/var/run/docker.sock' - tcp_host = '127.0.0.1' - tcp_port = 4243 - - if os.path.exists(socket_path): - return Client('unix://%s' % socket_path) - - try: - s = socket.socket() - s.connect((tcp_host, tcp_port)) - s.close() - return Client('http://%s:%s' % (tcp_host, tcp_port)) - except: - pass - - raise UserError(""" - Couldn't find Docker daemon - tried %s and %s:%s. - If it's running elsewhere, specify a url with DOCKER_URL. - """ % (socket_path, tcp_host, tcp_port)) + return Client(docker_url()) @cached_property def project(self): diff --git a/fig/cli/utils.py b/fig/cli/utils.py index 8d1764258..1094b5e77 100644 --- a/fig/cli/utils.py +++ b/fig/cli/utils.py @@ -1,5 +1,7 @@ import datetime import os +import socket +from .errors import UserError def cached_property(f): @@ -74,3 +76,28 @@ def mkdir(path, permissions=0700): os.chmod(path, permissions) return path + + +def docker_url(): + if os.environ.get('DOCKER_URL'): + return os.environ['DOCKER_URL'] + + socket_path = '/var/run/docker.sock' + tcp_host = '127.0.0.1' + tcp_port = 4243 + + if os.path.exists(socket_path): + return 'unix://%s' % socket_path + + try: + s = socket.socket() + s.connect((tcp_host, tcp_port)) + s.close() + return 'http://%s:%s' % (tcp_host, tcp_port) + except: + pass + + raise UserError(""" + Couldn't find Docker daemon - tried %s and %s:%s. + If it's running elsewhere, specify a url with DOCKER_URL. + """ % (socket_path, tcp_host, tcp_port)) diff --git a/tests/project_test.py b/tests/project_test.py index 7dd3715fb..e8949a59d 100644 --- a/tests/project_test.py +++ b/tests/project_test.py @@ -1,5 +1,4 @@ from fig.project import Project -from fig.service import Service from .testcases import DockerClientTestCase @@ -57,7 +56,7 @@ class ProjectTest(DockerClientTestCase): self.assertEqual(len(unstarted), 2) self.assertEqual(unstarted[0][0], web) self.assertEqual(unstarted[1][0], db) - self.assertEqual(len(web.containers(stopped=True)), 2) + self.assertEqual(len(web.containers(stopped=True)), 1) self.assertEqual(len(db.containers(stopped=True)), 1) def test_up(self): diff --git a/tests/testcases.py b/tests/testcases.py index a930d68ec..b363bc003 100644 --- a/tests/testcases.py +++ b/tests/testcases.py @@ -1,16 +1,13 @@ from docker import Client from fig.service import Service -import os +from fig.cli.utils import docker_url from unittest import TestCase class DockerClientTestCase(TestCase): @classmethod def setUpClass(cls): - if os.environ.get('DOCKER_URL'): - cls.client = Client(os.environ['DOCKER_URL']) - else: - cls.client = Client() + cls.client = Client(docker_url()) cls.client.pull('ubuntu') def setUp(self):