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
This commit is contained in:
Lars Kellogg-Stedman 2014-09-01 11:29:11 -04:00
parent 540249824f
commit 03638b3e73

View File

@ -138,7 +138,7 @@ class DockerContainer(resource.Resource):
default={} default={}
), ),
VOLUMES_FROM: properties.Schema( VOLUMES_FROM: properties.Schema(
properties.Schema.STRING, properties.Schema.LIST,
_('Mount all specified volumes.'), _('Mount all specified volumes.'),
default='' default=''
), ),
@ -246,7 +246,7 @@ class DockerContainer(resource.Resource):
return logs.split('\n').pop() return logs.split('\n').pop()
def handle_create(self): def handle_create(self):
args = { create_args = {
'image': self.properties[self.IMAGE], 'image': self.properties[self.IMAGE],
'command': self.properties[self.CMD], 'command': self.properties[self.CMD],
'hostname': self.properties[self.HOSTNAME], 'hostname': self.properties[self.HOSTNAME],
@ -258,26 +258,28 @@ class DockerContainer(resource.Resource):
'environment': self.properties[self.ENV], 'environment': self.properties[self.ENV],
'dns': self.properties[self.DNS], 'dns': self.properties[self.DNS],
'volumes': self.properties[self.VOLUMES], 'volumes': self.properties[self.VOLUMES],
'volumes_from': self.properties[self.VOLUMES_FROM],
'name': self.properties[self.NAME] 'name': self.properties[self.NAME]
} }
client = self.get_client() client = self.get_client()
client.pull(self.properties[self.IMAGE]) client.pull(self.properties[self.IMAGE])
result = client.create_container(**args) result = client.create_container(**create_args)
container_id = result['Id'] container_id = result['Id']
self.resource_id_set(container_id) self.resource_id_set(container_id)
kwargs = {} start_args = {}
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]
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 return container_id
def _get_container_status(self, container_id): def _get_container_status(self, container_id):