Commit Graph

115 Commits (d6f474761dde5e141a371900af9b64f62685dc30)

Author SHA1 Message Date
Adam Williamson 83d941da27 fix #2043: strip empty dict from end of 'pull' stream
When pulling an image using Docker 1.8, it seems the output
JSON stream has an empty dict at the very end. This causes
ansible to fail when pulling an image, as it's expecting a
status message in that dict which it uses to determine whether
it had to download the image or not. As a bit of an ugly hack
for that which remains backward compatible, try the last item
in the stream, and if it's an empty dict, take the last-but-one
item instead.

The strip() is needed as the exact value appears to be '{}/r/n';
we could just match that, but it seems like the kind of thing
where maybe it'd happen to just be '{}/n' or '{}' or something
in some cases, so let's just use strip() in case.
2016-12-08 11:23:40 -05:00
Sam Yaple a4a4b6f423 Catch the second occurance of ExposedPorts as well 2016-12-08 11:23:40 -05:00
Sam Yaple 463fb5a058 Don't assume ExposedPorts exists (bug #2257)
A recent change [1] in docker between v1.8.2 and v1.8.3 changed what
is returned in the json when inspecting an image. Five variables which
could have been expected before will now be omited when empty. Only
one of those variables is being addressed in the docker, ExposedPorts.

Unfortunately there was also no API version change on this so this
can't be easily corrected with pinning the API to the older version.

This does a get() which will return None if the variable is not in the
dict formed from the json that was returned. Everything else works the
same way.

[1] 9098628b29
2016-12-08 11:23:40 -05:00
Colin Hutchinson d70c33f932 make a text link into a actual hyperlink
the text link doesn't fit on some screen resolutions. Making it into sphinx hyperlink will solve that
2016-12-08 11:23:39 -05:00
justnom b724bf8f1c Adding additional Docker log drivers.
Adding additional `log_driver` choices:
* journald
* gelf
* fluentd

Compatible with Docker version >= 1.8.0
2016-12-08 11:23:38 -05:00
David Dyball cdff62643b Updated PR based on comments 2016-12-08 11:23:35 -05:00
Toshio Kuratomi b3262479e9 Fix read-only usage to depend on the docker-py and docker server version 2016-12-08 11:23:34 -05:00
Toshio Kuratomi 13ab511642 We had two separate methods trying to do the same thing but neither one was complete. This merges them so that all of the options get parsed and applied. 2016-12-08 11:23:34 -05:00
Omri Iluz 1c6acc3e8f No need for .keys on volumes list
Since c3f92cca21 changed "volumes" to be a list instead of a dictionary, we don't need (and cannot) .keys when appending to set.
Reported as bug #1957
2016-12-08 11:23:33 -05:00
Ilya Epifanov cbbf284a74 fixed memory_limit for docker api version >= 1.19 2016-12-08 11:23:32 -05:00
sebi ce1afd01e0 mem_limit client version check 2016-12-08 11:23:30 -05:00
Toshio Kuratomi 98e600961f Set a default value for DEFAULT_DOCKER_API_VERSION so we can create the AnsibleModule without docker-py 2016-12-08 11:23:29 -05:00
Brian Coca 9241955076 added missing version_Added to extra_hosts fixes #1843 2016-12-08 11:23:27 -05:00
Micheal Waltz 5f0d989973 Fix incorrect var name for api_version 2016-12-08 11:23:27 -05:00
Brian Coca 92dfe33021 defined DEFAULT_DOCKER_API_VERSION to avoid it erroring out before we send the message that docker.py is missing 2016-12-08 11:23:26 -05:00
Micheal Waltz 950701ba3e Use a if/else instead to avoid loading possibly invalid values for Memory 2016-12-08 11:23:25 -05:00
Micheal Waltz af5e402b87 Set the API version when checking differences in containers and use this to determine the location of the Memory value depending on the version used.
In v1.18 and earlier it was ['Config']['Memory'], but in v1.19 it
changed to ['HostConfig']['Memory'].
2016-12-08 11:23:25 -05:00
Micheal Waltz f36666ae1d Use proper HostConfig element which contians the proper Memory value - fixes #1766 2016-12-08 11:23:25 -05:00
Lars Kellogg-Stedman 3d79d96a1b restore mem_limit
mem_limit got lost in the #1744; this restores it.  Thanks to @dgromov
for the report.
2016-12-08 11:23:25 -05:00
Lars Kellogg-Stedman 562341049e docker: fix parsing of docker __version__ string
If `docker.__version__` contains non-digit characters, such as:

    >>> import docker
    >>> docker.__version__
    '1.4.0-dev'

Then `get_docker_py_versioninfo` will fail with:

    ValueError: invalid literal for int() with base 10: '0-de'

This patch corrects the parsing of the version string so that
`get_docker_py_versioninfo` in this example would return:

    (1, 4, 0, '-dev')
2016-12-08 11:23:25 -05:00
Johan Haals 6a9a4d905a ensures API compatibility for read_only containers 2016-12-08 11:23:24 -05:00
Johan Haals c88feaff7e changed version_added for read_only param
this feature will be released in 2.0
2016-12-08 11:23:24 -05:00
Johan Haals 6231a9d52f Added support for --read-only Docker containers
Adds support for mounting the container's root filesystem as read only.
2016-12-08 11:23:24 -05:00
Christian Hammerl 426ec96ea5 docker: add support to add/drop capabilities 2016-12-08 11:23:23 -05:00
Brian Coca 1976ed931a minor doc fixes to docker_user 2016-12-08 11:23:23 -05:00
Brian Coca b62a6f01ab added version_Added for new signal option in docker module 2016-12-08 11:23:23 -05:00
Brian Coca 07fedaa03a corrected v ersion added 2016-12-08 11:23:23 -05:00
Daniel Kerwin 277065a302 Too late for 1.8 2016-12-08 11:23:23 -05:00
Daniel Kerwin 3a68101fa3 Switch to _cap_ver_req and add cpu_set to create_containers 2016-12-08 11:23:23 -05:00
nemunaire f37510ebaa Add optional signal parameter when killing docker container 2016-12-08 11:23:23 -05:00
Daniel Kerwin 5b029bde98 Renamed to cpu_set 2016-12-08 11:23:22 -05:00
Daniel Kerwin 940baa92a6 Add support for cpusets. Requires docker-py >= 0.6.0 2016-12-08 11:23:22 -05:00
Maksim Losev 482d8da2dc Use HostConfig object when creating container with Docker Remote API > 1.15
This is mlosev's patch (from #1208), rebased against devel as of
2790af2.  It resolves #1707, which was caused by an API incompatibility
between the docker module and server API version 1.19.
2016-12-08 11:23:21 -05:00
Lars Kellogg-Stedman e031efd82c Do not erroneously mask exceptions
There was a catch-all `except` statement in `create_containers`:

        try:
            containers = do_create(count, params)
        except:
            self.pull_image()
            containers = do_create(count, params)

This would mask a variety of errors that should be exposed, including
API compatability errors (as in #1707) and common Python exceptions (KeyError, ValueError, etc) that could result from errors in the code.

This change makes the `except` statement more specific, and only attempts to pull the image and start a container if the original create attempt failed due to a 404 error from the docker API.
2016-12-08 11:23:21 -05:00
Lars Kellogg-Stedman 6116e4cdab docker: permit empty or false pid
The `docker` Python module only accepts `None` or `'host'` as arguments.
This makes it difficult to conditionally set the `pid` attribute using
standard Ansible syntax.

This change converts any value that evaluates as boolean `False` to
`None`, which includes empty strings:

    pid:

As well as an explicit `false`:

    pid: false

This permits the following to work as intended:

    - hosts: localhost
      tasks:
      - name: starting container
        docker:
          docker_api_version: 1.18
          image: larsks/mini-httpd
          name: web
          pid: "{{ container_pid|default('') }}"

If `container_pid` is set to `host` somewhere, this will create a
Docker container with `pid=host`; otherwise, this will create a
container with normal isolated pid namespace.
2016-12-08 11:23:21 -05:00
Ian Babrou 9219aeaaeb Pulling missing docker image before doing anything 2016-12-08 11:23:19 -05:00
Simon Olofsson a3cb6d2f16 Add option docker_user for docker module.
docker_user can be used to specify the user or UID to use within the
container.
2016-12-08 11:23:19 -05:00
Ash Wilson 9f12fd0a26 Default net to 'bridge' in container diff
This prevents an unnecessary reload when the `net` parameter is unspecified
(i.e. almost always).
2016-12-08 11:23:14 -05:00
Ed Hein f11c451bfa Fix computation of port bindings. Port bindings configuration can be a list if several host ports are bound to the same guest port. 2016-12-08 11:23:14 -05:00
Andrew Davis 4d4d911d6e ansible_facts reflects 1.8 output 2016-12-08 11:23:13 -05:00
Ash Wilson ea83727fcf Wait for process exit on detached=no. 2016-12-08 11:23:13 -05:00
Stefan Junker 4ee972190b docker: Use a list instead of a dict for volumes according to the docker-py docs. Do not add host-binds to volumes list. 2016-12-08 11:23:13 -05:00
Stefan Junker 50fe57fff3 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.
2016-12-08 11:23:13 -05:00
Toshio Kuratomi 0a3150f7d7 Add version_added documentation to log_driver parameter 2016-12-08 11:23:12 -05:00
Ryan Walls 01a28e7d80 Fix typo in Docker module. 2016-12-08 11:23:12 -05:00
Ryan Walls 9630972c2c Update docker module to avoid false positives when containers are first created. Also have the module check for api compatibility before trying to set a "--log-driver" option. 2016-12-08 11:23:12 -05:00
Ryan Walls f5c1d8141b Set default "log_driver" option to None in docker module. 2016-12-08 11:23:12 -05:00
Ryan Walls 0df1b01cb2 Update docker module to look at log_driver variable when deciding if container configuration has changed. 2016-12-08 11:23:12 -05:00
Ryan Walls 3419a1e253 Add support for --log-driver option that docker released with Docker 1.6 2016-12-08 11:23:12 -05:00
Robin Roth abc89f0df5 add comment: ports need to be exposed.
port mapping with this module only works for ports that are exposed either in the Dockerfile or via an additional arguments. This is different from the command line docker client, that is willing to also map ports that are not exposed.

This comments makes the behaviour more obvious.
2016-12-08 11:23:09 -05:00