Modified options dict leads to a mismatched config hash for API < 1.30

Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
Joffrey F 2018-02-06 16:58:15 -08:00
parent ea64baa8fe
commit 84f7bef1b7
2 changed files with 22 additions and 2 deletions

View File

@ -849,10 +849,10 @@ class Service(object):
override_options['mounts'] = [build_mount(v) for v in container_mounts] or None override_options['mounts'] = [build_mount(v) for v in container_mounts] or None
else: else:
# Workaround for 3.2 format # Workaround for 3.2 format
self.options['tmpfs'] = self.options.get('tmpfs') or [] override_options['tmpfs'] = self.options.get('tmpfs') or []
for m in container_mounts: for m in container_mounts:
if m.is_tmpfs: if m.is_tmpfs:
self.options['tmpfs'].append(m.target) override_options['tmpfs'].append(m.target)
else: else:
override_options['binds'].append(m.legacy_repr()) override_options['binds'].append(m.legacy_repr())
container_options['volumes'][m.target] = {} container_options['volumes'][m.target] = {}

View File

@ -13,6 +13,7 @@ from compose.config.types import ServicePort
from compose.config.types import ServiceSecret from compose.config.types import ServiceSecret
from compose.config.types import VolumeFromSpec from compose.config.types import VolumeFromSpec
from compose.config.types import VolumeSpec from compose.config.types import VolumeSpec
from compose.const import API_VERSIONS
from compose.const import LABEL_CONFIG_HASH from compose.const import LABEL_CONFIG_HASH
from compose.const import LABEL_ONE_OFF from compose.const import LABEL_ONE_OFF
from compose.const import LABEL_PROJECT from compose.const import LABEL_PROJECT
@ -601,6 +602,25 @@ class ServiceTest(unittest.TestCase):
} }
assert config_dict == expected assert config_dict == expected
def test_config_hash_matches_label(self):
self.mock_client.inspect_image.return_value = {'Id': 'abcd'}
service = Service(
'foo',
image='example.com/foo',
client=self.mock_client,
network_mode=NetworkMode('bridge'),
networks={'bridge': {}},
links=[(Service('one', client=self.mock_client), 'one')],
volumes_from=[VolumeFromSpec(Service('two', client=self.mock_client), 'rw', 'service')]
)
config_hash = service.config_hash
for api_version in set(API_VERSIONS.values()):
self.mock_client.api_version = api_version
assert service._get_container_create_options({}, 1)['labels'][LABEL_CONFIG_HASH] == (
config_hash
)
def test_remove_image_none(self): def test_remove_image_none(self):
web = Service('web', image='example', client=self.mock_client) web = Service('web', image='example', client=self.mock_client)
assert not web.remove_image(ImageType.none) assert not web.remove_image(ImageType.none)