Merge "Pass host_config if docker api version >=1.19"

This commit is contained in:
Jenkins 2016-03-17 05:57:06 +00:00 committed by Gerrit Code Review
commit b26d5ee419
4 changed files with 55 additions and 8 deletions

View File

@ -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):

View File

@ -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:

View File

@ -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):

View File

@ -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',