From c3bd5322bb37f7dc9d2d796cf22713e2e37a4390 Mon Sep 17 00:00:00 2001 From: Devvyn Patrick Murphy Date: Mon, 28 Jul 2014 18:30:49 -0600 Subject: [PATCH 1/5] added support for Docker's '--volumes ...:ro' readonly suffix --- fig/service.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/fig/service.py b/fig/service.py index 65bcf51972b..6f33d1e1cfe 100644 --- a/fig/service.py +++ b/fig/service.py @@ -211,7 +211,7 @@ def start_container_if_stopped(self, container, **options): log.info("Starting %s..." % container.name) return self.start_container(container, **options) - def start_container(self, container=None, intermediate_container=None, **override_options): + def start_container(self, container=None, intermediate_container=None,**override_options): if container is None: container = self.create_container(**override_options) @@ -230,15 +230,15 @@ def start_container(self, container=None, intermediate_container=None, **overrid if options.get('volumes', None) is not None: for volume in options['volumes']: if ':' in volume: - external_dir, internal_dir = volume.split(':') + volume_split = volume.split(':') + external_dir, internal_dir = volume_split[:2] volume_bindings[os.path.abspath(external_dir)] = { 'bind': internal_dir, - 'ro': False, + 'ro': len(volume_split) == 3 and volume_split[2] == 'ro', } privileged = options.get('privileged', False) net = options.get('net', 'bridge') - dns = options.get('dns', None) container.start( links=self._get_links(link_to_self=override_options.get('one_off', False)), @@ -247,7 +247,6 @@ def start_container(self, container=None, intermediate_container=None, **overrid volumes_from=self._get_volumes_from(intermediate_container), privileged=privileged, network_mode=net, - dns=dns, ) return container From 146126d83afd217b2c41ba4d0e0afb38ca5c0103 Mon Sep 17 00:00:00 2001 From: Devvyn Patrick Murphy Date: Mon, 28 Jul 2014 18:52:23 -0600 Subject: [PATCH 2/5] added support for Docker's '--volumes ...:ro' readonly suffix --- fig/service.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fig/service.py b/fig/service.py index 6f33d1e1cfe..f6c8a09390b 100644 --- a/fig/service.py +++ b/fig/service.py @@ -239,6 +239,7 @@ def start_container(self, container=None, intermediate_container=None,**override privileged = options.get('privileged', False) net = options.get('net', 'bridge') + dns = options.get('dns', None) container.start( links=self._get_links(link_to_self=override_options.get('one_off', False)), @@ -247,6 +248,7 @@ def start_container(self, container=None, intermediate_container=None,**override volumes_from=self._get_volumes_from(intermediate_container), privileged=privileged, network_mode=net, + dns=dns ) return container From e3eba7c45ca96e29dfbea1e8ff2c849dd90aa795 Mon Sep 17 00:00:00 2001 From: Devvyn Patrick Murphy Date: Mon, 28 Jul 2014 19:34:06 -0600 Subject: [PATCH 3/5] Revert "added support for Docker's '--volumes ...:ro' readonly suffix" This reverts commit 146126d83afd217b2c41ba4d0e0afb38ca5c0103. --- fig/service.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/fig/service.py b/fig/service.py index f6c8a09390b..6f33d1e1cfe 100644 --- a/fig/service.py +++ b/fig/service.py @@ -239,7 +239,6 @@ def start_container(self, container=None, intermediate_container=None,**override privileged = options.get('privileged', False) net = options.get('net', 'bridge') - dns = options.get('dns', None) container.start( links=self._get_links(link_to_self=override_options.get('one_off', False)), @@ -248,7 +247,6 @@ def start_container(self, container=None, intermediate_container=None,**override volumes_from=self._get_volumes_from(intermediate_container), privileged=privileged, network_mode=net, - dns=dns ) return container From 43730e82903f223574da666471db65cec0088039 Mon Sep 17 00:00:00 2001 From: Devvyn Patrick Murphy Date: Mon, 28 Jul 2014 19:34:30 -0600 Subject: [PATCH 4/5] Revert "added support for Docker's '--volumes ...:ro' readonly suffix" This reverts commit c3bd5322bb37f7dc9d2d796cf22713e2e37a4390. --- fig/service.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/fig/service.py b/fig/service.py index 6f33d1e1cfe..65bcf51972b 100644 --- a/fig/service.py +++ b/fig/service.py @@ -211,7 +211,7 @@ def start_container_if_stopped(self, container, **options): log.info("Starting %s..." % container.name) return self.start_container(container, **options) - def start_container(self, container=None, intermediate_container=None,**override_options): + def start_container(self, container=None, intermediate_container=None, **override_options): if container is None: container = self.create_container(**override_options) @@ -230,15 +230,15 @@ def start_container(self, container=None, intermediate_container=None,**override if options.get('volumes', None) is not None: for volume in options['volumes']: if ':' in volume: - volume_split = volume.split(':') - external_dir, internal_dir = volume_split[:2] + external_dir, internal_dir = volume.split(':') volume_bindings[os.path.abspath(external_dir)] = { 'bind': internal_dir, - 'ro': len(volume_split) == 3 and volume_split[2] == 'ro', + 'ro': False, } privileged = options.get('privileged', False) net = options.get('net', 'bridge') + dns = options.get('dns', None) container.start( links=self._get_links(link_to_self=override_options.get('one_off', False)), @@ -247,6 +247,7 @@ def start_container(self, container=None, intermediate_container=None,**override volumes_from=self._get_volumes_from(intermediate_container), privileged=privileged, network_mode=net, + dns=dns, ) return container From 5ea85707a82f242bebb023fb78e65d75a11e7606 Mon Sep 17 00:00:00 2001 From: Devvyn Patrick Murphy Date: Mon, 25 Aug 2014 17:29:52 -0600 Subject: [PATCH 5/5] Split volume argument three ways, check for 'ro' flag at end. Default to 'rw'. --- fig/service.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/fig/service.py b/fig/service.py index 65bcf51972b..c063226bb8e 100644 --- a/fig/service.py +++ b/fig/service.py @@ -230,10 +230,11 @@ def start_container(self, container=None, intermediate_container=None, **overrid if options.get('volumes', None) is not None: for volume in options['volumes']: if ':' in volume: - external_dir, internal_dir = volume.split(':') + volume_split = split_volume(volume) + external_dir, internal_dir = volume_split[:2] volume_bindings[os.path.abspath(external_dir)] = { 'bind': internal_dir, - 'ro': False, + 'ro': len(volume_split) == 3 and volume_split[2] == 'ro', } privileged = options.get('privileged', False) @@ -433,13 +434,16 @@ def get_container_name(container): def split_volume(v): """ + + :param v: If v is of the format EXTERNAL:INTERNAL, returns (EXTERNAL, INTERNAL). If v is of the format INTERNAL, returns (None, INTERNAL). """ if ':' in v: - return v.split(':', 1) + v_split = v.split(':', 2) else: - return (None, v) + v_split = (None, v) + return v_split def split_port(port):