From a027a0079c17c87b1e531c82cf8250086dbfbf66 Mon Sep 17 00:00:00 2001 From: Aanand Prasad Date: Tue, 12 Jan 2016 16:26:20 +0000 Subject: [PATCH] Use networking for version 2 Compose files - Remove --x-networking and --x-network-driver - There's now no way to set a network driver - this will be added back with the 'networks' key Signed-off-by: Aanand Prasad --- compose/cli/command.py | 18 ++++++------------ compose/cli/main.py | 4 ---- compose/project.py | 5 +++-- contrib/completion/bash/docker-compose | 9 +-------- contrib/completion/zsh/_docker-compose | 2 -- tests/acceptance/cli_test.py | 12 ++++++------ tests/fixtures/v2-simple/docker-compose.yml | 8 ++++++++ tests/integration/testcases.py | 7 +++++++ tests/unit/project_test.py | 20 ++++++++++++++++++-- 9 files changed, 49 insertions(+), 36 deletions(-) create mode 100644 tests/fixtures/v2-simple/docker-compose.yml diff --git a/compose/cli/command.py b/compose/cli/command.py index b278af3a6a..f14388c6a7 100644 --- a/compose/cli/command.py +++ b/compose/cli/command.py @@ -49,8 +49,6 @@ def project_from_options(base_dir, options): get_config_path_from_options(options), project_name=options.get('--project-name'), verbose=options.get('--verbose'), - use_networking=options.get('--x-networking'), - network_driver=options.get('--x-network-driver'), ) @@ -75,18 +73,14 @@ def get_client(verbose=False, version=None): return client -def get_project(base_dir, config_path=None, project_name=None, verbose=False, - use_networking=False, network_driver=None): +def get_project(base_dir, config_path=None, project_name=None, verbose=False): config_details = config.find(base_dir, config_path) + project_name = get_project_name(config_details.working_dir, project_name) + config_data = config.load(config_details) + api_version = '1.21' if config_data.version < 2 else None + client = get_client(verbose=verbose, version=api_version) - api_version = '1.21' if use_networking else None - return Project.from_config( - get_project_name(config_details.working_dir, project_name), - config.load(config_details), - get_client(verbose=verbose, version=api_version), - use_networking=use_networking, - network_driver=network_driver - ) + return Project.from_config(project_name, config_data, client) def get_project_name(working_dir, project_name=None): diff --git a/compose/cli/main.py b/compose/cli/main.py index 82cf05c9f2..7c6d1cb5a3 100644 --- a/compose/cli/main.py +++ b/compose/cli/main.py @@ -122,10 +122,6 @@ class TopLevelCommand(DocoptCommand): Options: -f, --file FILE Specify an alternate compose file (default: docker-compose.yml) -p, --project-name NAME Specify an alternate project name (default: directory name) - --x-networking (EXPERIMENTAL) Use new Docker networking functionality. - Requires Docker 1.9 or later. - --x-network-driver DRIVER (EXPERIMENTAL) Specify a network driver (default: "bridge"). - Requires Docker 1.9 or later. --verbose Show more output -v, --version Print version and exit diff --git a/compose/project.py b/compose/project.py index 71e353ecb8..fa3eace20a 100644 --- a/compose/project.py +++ b/compose/project.py @@ -48,11 +48,12 @@ class Project(object): ] @classmethod - def from_config(cls, name, config_data, client, use_networking=False, network_driver=None): + def from_config(cls, name, config_data, client): """ Construct a Project from a config.Config object. """ - project = cls(name, [], client, use_networking=use_networking, network_driver=network_driver) + use_networking = (config_data.version and config_data.version >= 2) + project = cls(name, [], client, use_networking=use_networking) if use_networking: remove_links(config_data.services) diff --git a/contrib/completion/bash/docker-compose b/contrib/completion/bash/docker-compose index c18e4f6df6..caea2a2376 100644 --- a/contrib/completion/bash/docker-compose +++ b/contrib/completion/bash/docker-compose @@ -116,15 +116,11 @@ _docker_compose_docker_compose() { --project-name|-p) return ;; - --x-network-driver) - COMPREPLY=( $( compgen -W "bridge host none overlay" -- "$cur" ) ) - return - ;; esac case "$cur" in -*) - COMPREPLY=( $( compgen -W "--file -f --help -h --project-name -p --verbose --version -v --x-networking --x-network-driver" -- "$cur" ) ) + COMPREPLY=( $( compgen -W "--file -f --help -h --project-name -p --verbose --version -v" -- "$cur" ) ) ;; *) COMPREPLY=( $( compgen -W "${commands[*]}" -- "$cur" ) ) @@ -416,9 +412,6 @@ _docker_compose() { (( counter++ )) compose_project="${words[$counter]}" ;; - --x-network-driver) - (( counter++ )) - ;; -*) ;; *) diff --git a/contrib/completion/zsh/_docker-compose b/contrib/completion/zsh/_docker-compose index 35c2b996f6..2a19dd5973 100644 --- a/contrib/completion/zsh/_docker-compose +++ b/contrib/completion/zsh/_docker-compose @@ -332,8 +332,6 @@ _docker-compose() { '(- :)'{-v,--version}'[Print version and exit]' \ '(-f --file)'{-f,--file}'[Specify an alternate docker-compose file (default: docker-compose.yml)]:file:_files -g "*.yml"' \ '(-p --project-name)'{-p,--project-name}'[Specify an alternate project name (default: directory name)]:project name:' \ - '--x-networking[(EXPERIMENTAL) Use new Docker networking functionality. Requires Docker 1.9 or later.]' \ - '--x-network-driver[(EXPERIMENTAL) Specify a network driver (default: "bridge"). Requires Docker 1.9 or later.]:Network Driver:(bridge host none overlay)' \ '(-): :->command' \ '(-)*:: :->option-or-argument' && ret=0 diff --git a/tests/acceptance/cli_test.py b/tests/acceptance/cli_test.py index 46ed4237d9..25808c94b0 100644 --- a/tests/acceptance/cli_test.py +++ b/tests/acceptance/cli_test.py @@ -338,7 +338,7 @@ class CLITestCase(DockerClientTestCase): self.base_dir = 'tests/fixtures/links-composefile' self.dispatch(['up', '-d'], None) - networks = self.client.networks(names=[self.project.name]) + networks = self.client.networks(names=[self.project.default_network_name]) self.assertEqual(len(networks), 0) for service in self.project.get_services(): @@ -350,8 +350,8 @@ class CLITestCase(DockerClientTestCase): self.assertTrue(web_container.get('HostConfig.Links')) def test_up_with_networking(self): - self.base_dir = 'tests/fixtures/links-composefile' - self.dispatch(['--x-networking', 'up', '-d'], None) + self.base_dir = 'tests/fixtures/v2-simple' + self.dispatch(['up', '-d'], None) services = self.project.get_services() @@ -369,7 +369,7 @@ class CLITestCase(DockerClientTestCase): self.assertEqual(len(containers), 1) self.assertIn(containers[0].id, network['Containers']) - web_container = self.project.get_service('web').containers()[0] + web_container = self.project.get_service('simple').containers()[0] self.assertFalse(web_container.get('HostConfig.Links')) def test_up_with_links(self): @@ -645,8 +645,8 @@ class CLITestCase(DockerClientTestCase): self.assertEqual(container.name, name) def test_run_with_networking(self): - self.base_dir = 'tests/fixtures/simple-dockerfile' - self.dispatch(['--x-networking', 'run', 'simple', 'true'], None) + self.base_dir = 'tests/fixtures/v2-simple' + self.dispatch(['run', 'simple', 'true'], None) service = self.project.get_service('simple') container, = service.containers(stopped=True, one_off=True) networks = self.client.networks(names=[self.project.default_network_name]) diff --git a/tests/fixtures/v2-simple/docker-compose.yml b/tests/fixtures/v2-simple/docker-compose.yml new file mode 100644 index 0000000000..12a9de72ca --- /dev/null +++ b/tests/fixtures/v2-simple/docker-compose.yml @@ -0,0 +1,8 @@ +version: 2 +services: + simple: + image: busybox:latest + command: top + another: + image: busybox:latest + command: top diff --git a/tests/integration/testcases.py b/tests/integration/testcases.py index 8e0525eefd..3002539e97 100644 --- a/tests/integration/testcases.py +++ b/tests/integration/testcases.py @@ -36,14 +36,21 @@ class DockerClientTestCase(unittest.TestCase): all=True, filters={'label': '%s=composetest' % LABEL_PROJECT}): self.client.remove_container(c['Id'], force=True) + for i in self.client.images( filters={'label': 'com.docker.compose.test_image'}): self.client.remove_image(i) + volumes = self.client.volumes().get('Volumes') or [] for v in volumes: if 'composetest_' in v['Name']: self.client.remove_volume(v['Name']) + networks = self.client.networks() + for n in networks: + if 'composetest_' in n['Name']: + self.client.remove_network(n['Name']) + def create_service(self, name, **kwargs): if 'image' not in kwargs and 'build' not in kwargs: kwargs['image'] = 'busybox:latest' diff --git a/tests/unit/project_test.py b/tests/unit/project_test.py index 63953376b4..f63135ae68 100644 --- a/tests/unit/project_test.py +++ b/tests/unit/project_test.py @@ -39,7 +39,7 @@ class ProjectTest(unittest.TestCase): self.assertEqual(project.get_service('db').options['image'], 'busybox:latest') def test_from_config(self): - dicts = Config(None, [ + config = Config(None, [ { 'name': 'web', 'image': 'busybox:latest', @@ -49,12 +49,28 @@ class ProjectTest(unittest.TestCase): 'image': 'busybox:latest', }, ], None) - project = Project.from_config('composetest', dicts, None) + project = Project.from_config('composetest', config, None) self.assertEqual(len(project.services), 2) self.assertEqual(project.get_service('web').name, 'web') self.assertEqual(project.get_service('web').options['image'], 'busybox:latest') self.assertEqual(project.get_service('db').name, 'db') self.assertEqual(project.get_service('db').options['image'], 'busybox:latest') + self.assertFalse(project.use_networking) + + def test_from_config_v2(self): + config = Config(2, [ + { + 'name': 'web', + 'image': 'busybox:latest', + }, + { + 'name': 'db', + 'image': 'busybox:latest', + }, + ], None) + project = Project.from_config('composetest', config, None) + self.assertEqual(len(project.services), 2) + self.assertTrue(project.use_networking) def test_get_service(self): web = Service(