Merge "Pass host_config if docker api version >=1.19"
This commit is contained in:
commit
b26d5ee419
|
@ -70,6 +70,12 @@ def is_docker_library_version_atleast(version):
|
|||
return False
|
||||
|
||||
|
||||
def is_docker_api_version_atleast(docker, version):
|
||||
if utils.compare_version(docker.version()['ApiVersion'], version) <= 0:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def docker_for_container(context, container):
|
||||
if magnum_utils.is_uuid_like(container):
|
||||
|
|
|
@ -80,11 +80,18 @@ class Handler(object):
|
|||
image_repo, image_tag = docker_utils.parse_docker_image(image)
|
||||
docker.pull(image_repo, tag=image_tag)
|
||||
docker.inspect_image(self._encode_utf8(container.image))
|
||||
docker.create_container(image, name=name,
|
||||
hostname=container_uuid,
|
||||
command=container.command,
|
||||
mem_limit=container.memory,
|
||||
environment=container.environment)
|
||||
kwargs = {'name': name,
|
||||
'hostname': container_uuid,
|
||||
'command': container.command,
|
||||
'environment': container.environment}
|
||||
if docker_utils.is_docker_api_version_atleast(docker, '1.19'):
|
||||
if container.memory is not None:
|
||||
kwargs['host_config'] = {'mem_limit':
|
||||
container.memory}
|
||||
else:
|
||||
kwargs['mem_limit'] = container.memory
|
||||
|
||||
docker.create_container(image, **kwargs)
|
||||
container.status = fields.ContainerStatus.STOPPED
|
||||
return container
|
||||
except errors.APIError:
|
||||
|
|
|
@ -147,6 +147,16 @@ class TestDockerUtils(base.BaseTestCase):
|
|||
CONF.docker.docker_remote_api_version,
|
||||
CONF.docker.default_timeout)
|
||||
|
||||
def test_is_docker_api_version_atleast(self):
|
||||
|
||||
def fake_version():
|
||||
return {'ApiVersion': '1.18'}
|
||||
|
||||
docker = mock.MagicMock()
|
||||
docker.version.side_effect = fake_version
|
||||
res = docker_utils.is_docker_api_version_atleast(docker, '1.19')
|
||||
self.assertFalse(res)
|
||||
|
||||
|
||||
class DockerClientTestCase(base.BaseTestCase):
|
||||
def test_docker_client_init(self):
|
||||
|
|
|
@ -36,9 +36,14 @@ class TestDockerHandler(base.BaseTestCase):
|
|||
self.dfc_context_manager.__enter__.return_value = self.mock_docker
|
||||
self.addCleanup(dfc_patcher.stop)
|
||||
|
||||
def _test_container_create(
|
||||
self, container_dict, expected_kwargs, expected_image='test_image',
|
||||
expected_tag='some_tag'):
|
||||
@mock.patch.object(docker_utils, 'is_docker_api_version_atleast')
|
||||
def _test_container_create(self, container_dict, expected_kwargs,
|
||||
mock_version, expected_image='test_image',
|
||||
expected_tag='some_tag',
|
||||
api_version='1.18'):
|
||||
|
||||
mock_version.return_value = (float(api_version) > 1.18)
|
||||
|
||||
name = container_dict.pop('name')
|
||||
mock_container = mock.MagicMock(**container_dict)
|
||||
type(mock_container).name = mock.PropertyMock(return_value=name)
|
||||
|
@ -72,6 +77,25 @@ class TestDockerHandler(base.BaseTestCase):
|
|||
}
|
||||
self._test_container_create(container_dict, expected_kwargs)
|
||||
|
||||
def test_container_create_api_1_19(self):
|
||||
container_dict = {
|
||||
'name': 'some-name',
|
||||
'uuid': 'some-uuid',
|
||||
'image': 'test_image:some_tag',
|
||||
'command': None,
|
||||
'memory': 512,
|
||||
'environment': None,
|
||||
}
|
||||
expected_kwargs = {
|
||||
'name': 'some-name',
|
||||
'hostname': 'some-uuid',
|
||||
'command': None,
|
||||
'host_config': {'mem_limit': 512},
|
||||
'environment': None,
|
||||
}
|
||||
self._test_container_create(container_dict, expected_kwargs,
|
||||
api_version='1.19')
|
||||
|
||||
def test_container_create_with_command(self):
|
||||
container_dict = {
|
||||
'name': 'some-name',
|
||||
|
|
Loading…
Reference in New Issue