From 03638b3e739d19831910a5be8d231e30cadfb545 Mon Sep 17 00:00:00 2001 From: Lars Kellogg-Stedman Date: Mon, 1 Sep 2014 11:29:11 -0400 Subject: [PATCH] correctly implement volumes_from property The Docker plugin incorrectly implements the 'volumes_from' option: - The property is marked as a string when it should be a list, and - The property needs to be passed to start_container rather than create_container. Change-Id: I617a4d29a9edbb45d80c7b8abb8f87eeaf795a8b closes-bug: #1364041 closes-bug: #1364039 --- .../heat_docker/resources/docker_container.py | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/contrib/heat_docker/heat_docker/resources/docker_container.py b/contrib/heat_docker/heat_docker/resources/docker_container.py index 2c9216414..7661b2a99 100644 --- a/contrib/heat_docker/heat_docker/resources/docker_container.py +++ b/contrib/heat_docker/heat_docker/resources/docker_container.py @@ -138,7 +138,7 @@ class DockerContainer(resource.Resource): default={} ), VOLUMES_FROM: properties.Schema( - properties.Schema.STRING, + properties.Schema.LIST, _('Mount all specified volumes.'), default='' ), @@ -246,7 +246,7 @@ class DockerContainer(resource.Resource): return logs.split('\n').pop() def handle_create(self): - args = { + create_args = { 'image': self.properties[self.IMAGE], 'command': self.properties[self.CMD], 'hostname': self.properties[self.HOSTNAME], @@ -258,26 +258,28 @@ class DockerContainer(resource.Resource): 'environment': self.properties[self.ENV], 'dns': self.properties[self.DNS], 'volumes': self.properties[self.VOLUMES], - 'volumes_from': self.properties[self.VOLUMES_FROM], 'name': self.properties[self.NAME] } client = self.get_client() client.pull(self.properties[self.IMAGE]) - result = client.create_container(**args) + result = client.create_container(**create_args) container_id = result['Id'] self.resource_id_set(container_id) - kwargs = {} - if self.properties[self.PRIVILEGED]: - kwargs[self.PRIVILEGED] = True - if self.properties[self.VOLUMES]: - kwargs['binds'] = self.properties[self.VOLUMES] - if self.properties[self.PORT_BINDINGS]: - kwargs['port_bindings'] = self.properties[self.PORT_BINDINGS] - if self.properties[self.LINKS]: - kwargs['links'] = self.properties[self.LINKS] + start_args = {} - client.start(container_id, **kwargs) + if self.properties[self.PRIVILEGED]: + start_args[self.PRIVILEGED] = True + if self.properties[self.VOLUMES]: + start_args['binds'] = self.properties[self.VOLUMES] + if self.properties[self.VOLUMES_FROM]: + start_args['volumes_from'] = self.properties[self.VOLUMES_FROM] + if self.properties[self.PORT_BINDINGS]: + start_args['port_bindings'] = self.properties[self.PORT_BINDINGS] + if self.properties[self.LINKS]: + start_args['links'] = self.properties[self.LINKS] + + client.start(container_id, **start_args) return container_id def _get_container_status(self, container_id):