Merge pull request #2185 from AndrewPashkin/add_entrypoint_param_to_docker_module

Add entrypoint parameter to docker module
This commit is contained in:
Toshio Kuratomi 2015-12-18 21:25:14 -08:00
commit 2220dc8e12

View file

@ -46,6 +46,14 @@ options:
default: missing default: missing
choices: [ "missing", "always" ] choices: [ "missing", "always" ]
version_added: "1.9" version_added: "1.9"
entrypoint:
description:
- Corresponds to ``--entrypoint`` option of ``docker run`` command and
``ENTRYPOINT`` directive of Dockerfile.
Used to match and launch containers.
default: null
required: false
version_added: "2.0"
command: command:
description: description:
- Command used to match and launch containers. - Command used to match and launch containers.
@ -1083,6 +1091,21 @@ class DockerManager(object):
differing.append(container) differing.append(container)
continue continue
# ENTRYPOINT
expected_entrypoint = self.module.params.get('entrypoint')
if expected_entrypoint:
expected_entrypoint = shlex.split(expected_entrypoint)
actual_entrypoint = container["Config"]["Entrypoint"]
if actual_entrypoint != expected_entrypoint:
self.reload_reasons.append(
'entrypoint ({0} => {1})'
.format(actual_entrypoint, expected_entrypoint)
)
differing.append(container)
continue
# COMMAND # COMMAND
expected_command = self.module.params.get('command') expected_command = self.module.params.get('command')
@ -1384,9 +1407,12 @@ class DockerManager(object):
Return any matching containers that are already present. Return any matching containers that are already present.
""" """
entrypoint = self.module.params.get('entrypoint')
if entrypoint is not None:
entrypoint = shlex.split(entrypoint)
command = self.module.params.get('command') command = self.module.params.get('command')
if command: if command is not None:
command = command.strip() command = shlex.split(command)
name = self.module.params.get('name') name = self.module.params.get('name')
if name and not name.startswith('/'): if name and not name.startswith('/'):
name = '/' + name name = '/' + name
@ -1413,15 +1439,16 @@ class DockerManager(object):
details = _docker_id_quirk(details) details = _docker_id_quirk(details)
running_image = normalize_image(details['Config']['Image']) running_image = normalize_image(details['Config']['Image'])
running_command = container['Command'].strip()
image_matches = running_image in repo_tags image_matches = running_image in repo_tags
# if a container has an entrypoint, `command` will actually equal command_matches = command == details['Config']['Cmd']
# '{} {}'.format(entrypoint, command) entrypoint_matches = (
command_matches = (not command or running_command.endswith(command)) entrypoint == details['Config']['Entrypoint']
)
matches = image_matches and command_matches matches = (image_matches and command_matches and
entrypoint_matches)
if matches: if matches:
if not details: if not details:
@ -1486,6 +1513,7 @@ class DockerManager(object):
api_version = self.client.version()['ApiVersion'] api_version = self.client.version()['ApiVersion']
params = {'image': self.module.params.get('image'), params = {'image': self.module.params.get('image'),
'entrypoint': self.module.params.get('entrypoint'),
'command': self.module.params.get('command'), 'command': self.module.params.get('command'),
'ports': self.exposed_ports, 'ports': self.exposed_ports,
'volumes': self.volumes, 'volumes': self.volumes,
@ -1704,6 +1732,7 @@ def main():
count = dict(default=1), count = dict(default=1),
image = dict(required=True), image = dict(required=True),
pull = dict(required=False, default='missing', choices=['missing', 'always']), pull = dict(required=False, default='missing', choices=['missing', 'always']),
entrypoint = dict(required=False, default=None, type='str'),
command = dict(required=False, default=None), command = dict(required=False, default=None),
expose = dict(required=False, default=None, type='list'), expose = dict(required=False, default=None, type='list'),
ports = dict(required=False, default=None, type='list'), ports = dict(required=False, default=None, type='list'),