mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Merge pull request #27451 from ticosax/dockerng-host-config-support
[dockerng] Enforce usage of host_config and require docker-py>=1.4.0
This commit is contained in:
commit
d85b0cbd69
2 changed files with 37 additions and 10 deletions
|
@ -28,13 +28,13 @@ to replace references to ``dockerng`` with ``docker``.
|
|||
Installation Prerequisites
|
||||
--------------------------
|
||||
|
||||
This execution module requires at least version 1.0.0 of both docker-py_ and
|
||||
This execution module requires at least version 1.4.0 of both docker-py_ and
|
||||
Docker_. docker-py can easily be installed using :py:func:`pip.install
|
||||
<salt.modules.pip.install>`:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
salt myminion pip.install docker-py
|
||||
salt myminion pip.install docker-py>=1.4.0
|
||||
|
||||
.. _docker-py: https://pypi.python.org/pypi/docker-py
|
||||
.. _Docker: https://www.docker.com/
|
||||
|
@ -234,6 +234,7 @@ import distutils.version # pylint: disable=import-error,no-name-in-module,unuse
|
|||
import fnmatch
|
||||
import functools
|
||||
import gzip
|
||||
import inspect as inspect_module
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
|
@ -256,6 +257,7 @@ import salt.ext.six as six
|
|||
# pylint: disable=import-error
|
||||
try:
|
||||
import docker
|
||||
import docker.utils
|
||||
HAS_DOCKER_PY = True
|
||||
except ImportError:
|
||||
HAS_DOCKER_PY = False
|
||||
|
@ -287,7 +289,7 @@ __func_alias__ = {
|
|||
|
||||
# Minimum supported versions
|
||||
MIN_DOCKER = (1, 0, 0)
|
||||
MIN_DOCKER_PY = (1, 0, 0)
|
||||
MIN_DOCKER_PY = (1, 4, 0)
|
||||
|
||||
VERSION_RE = r'([\d.]+)'
|
||||
|
||||
|
@ -2681,14 +2683,11 @@ def create(image,
|
|||
# Added to manage api change in 1.19.
|
||||
# mem_limit and memswap_limit must be provided in host_config object
|
||||
if salt.utils.version_cmp(version()['ApiVersion'], '1.18') == 1:
|
||||
create_kwargs['host_config'] = docker.utils.create_host_config(
|
||||
mem_limit=create_kwargs.get('mem_limit'),
|
||||
memswap_limit=create_kwargs.get('memswap_limit')
|
||||
client = __context__['docker.client']
|
||||
host_config_args = inspect_module.getargspec(docker.utils.create_host_config).args
|
||||
create_kwargs['host_config'] = client.create_host_config(
|
||||
**dict((arg, create_kwargs.pop(arg, None)) for arg in host_config_args if arg != 'version')
|
||||
)
|
||||
if 'mem_limit' in create_kwargs:
|
||||
del create_kwargs['mem_limit']
|
||||
if 'memswap_limit' in create_kwargs:
|
||||
del create_kwargs['memswap_limit']
|
||||
|
||||
log.debug(
|
||||
'dockerng.create is using the following kwargs to create '
|
||||
|
|
|
@ -111,6 +111,34 @@ class DockerngTestCase(TestCase):
|
|||
image='image',
|
||||
name='ctn')
|
||||
|
||||
@skipIf(_docker_py_version() < (1, 4, 0),
|
||||
'docker module must be installed to run this test or is too old. >=1.4.0')
|
||||
@patch.object(dockerng_mod, 'images', MagicMock())
|
||||
@patch.object(dockerng_mod, 'inspect_image')
|
||||
@patch.object(dockerng_mod, 'version', Mock(return_value={'ApiVersion': '1.19'}))
|
||||
def test_create_send_host_config(self, *args):
|
||||
'''
|
||||
Check host_config object is passed to create_container.
|
||||
'''
|
||||
__salt__ = {
|
||||
'config.get': Mock(),
|
||||
'mine.send': Mock(),
|
||||
}
|
||||
host_config = {'PublishAllPorts': True}
|
||||
client = Mock()
|
||||
client.api_version = '1.19'
|
||||
client.create_host_config.return_value = host_config
|
||||
client.create_container.return_value = {}
|
||||
with patch.dict(dockerng_mod.__dict__,
|
||||
{'__salt__': __salt__}):
|
||||
with patch.dict(dockerng_mod.__context__,
|
||||
{'docker.client': client}):
|
||||
dockerng_mod.create('image', name='ctn', publish_all_ports=True)
|
||||
client.create_container.assert_called_once_with(
|
||||
host_config=host_config,
|
||||
image='image',
|
||||
name='ctn')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from integration import run_tests
|
||||
|
|
Loading…
Add table
Reference in a new issue