From 8f3b5c640b98ba9473a0df7ddc650539a3efc048 Mon Sep 17 00:00:00 2001 From: Stefan Junker Date: Sun, 21 Dec 2014 16:10:39 +0100 Subject: [PATCH] Fix bind-volumes on docker >= 1.4.0 If bind-volumes are submitted to docker >= 1.4.0 with the volumes set in addition to the binds, docker will create a regular volume and not bind-mount the specified path. --- cloud/docker/docker.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/cloud/docker/docker.py b/cloud/docker/docker.py index f53819f2679..bbcb73df99b 100644 --- a/cloud/docker/docker.py +++ b/cloud/docker/docker.py @@ -484,20 +484,22 @@ class DockerManager(object): vols = self.module.params.get('volumes') for vol in vols: parts = vol.split(":") - # host mount (e.g. /mnt:/tmp, bind mounts host's /tmp to /mnt in the container) - if len(parts) == 2: - self.volumes[parts[1]] = {} - self.binds[parts[0]] = parts[1] - # with bind mode - elif len(parts) == 3: - if parts[2] not in ['ro', 'rw']: - self.module.fail_json(msg='bind mode needs to either be "ro" or "rw"') - ro = parts[2] == 'ro' - self.volumes[parts[1]] = {} - self.binds[parts[0]] = {'bind': parts[1], 'ro': ro} - # docker mount (e.g. /www, mounts a docker volume /www on the container at the same location) - else: + # regular volume + if len(parts) == 1: self.volumes[parts[0]] = {} + # host mount (e.g. /mnt:/tmp, bind mounts host's /tmp to /mnt in the container) + elif 2 <= len(parts) <= 3: + # default to read-write + ro = False + # with supplied bind mode + if len(parts) == 3: + if parts[2] not in ['ro', 'rw']: + self.module.fail_json(msg='bind mode needs to either be "ro" or "rw"') + else: + ro = parts[2] == 'ro' + self.binds[parts[0]] = {'bind': parts[1], 'ro': ro } + else: + self.module.fail_json(msg='volumes support 1 to 3 arguments') self.lxc_conf = None if self.module.params.get('lxc_conf'):