mirror of
https://github.com/docker/compose.git
synced 2025-07-25 14:44:29 +02:00
Merge pull request #4004 from shin-/4000-extend-logging
Properly merge logging dictionaries in overriding configs
This commit is contained in:
commit
7f1606545d
@ -764,6 +764,8 @@ def merge_service_dicts(base, override, version):
|
|||||||
for field in ['dns', 'dns_search', 'env_file', 'tmpfs']:
|
for field in ['dns', 'dns_search', 'env_file', 'tmpfs']:
|
||||||
md.merge_field(field, merge_list_or_string)
|
md.merge_field(field, merge_list_or_string)
|
||||||
|
|
||||||
|
md.merge_field('logging', merge_logging)
|
||||||
|
|
||||||
for field in set(ALLOWED_KEYS) - set(md):
|
for field in set(ALLOWED_KEYS) - set(md):
|
||||||
md.merge_scalar(field)
|
md.merge_scalar(field)
|
||||||
|
|
||||||
@ -793,6 +795,16 @@ def merge_build(output, base, override):
|
|||||||
return dict(md)
|
return dict(md)
|
||||||
|
|
||||||
|
|
||||||
|
def merge_logging(base, override):
|
||||||
|
md = MergeDict(base, override)
|
||||||
|
md.merge_scalar('driver')
|
||||||
|
if md.get('driver') == base.get('driver') or base.get('driver') is None:
|
||||||
|
md.merge_mapping('options', lambda m: m or {})
|
||||||
|
else:
|
||||||
|
md['options'] = override.get('options')
|
||||||
|
return dict(md)
|
||||||
|
|
||||||
|
|
||||||
def legacy_v1_merge_image_or_build(output, base, override):
|
def legacy_v1_merge_image_or_build(output, base, override):
|
||||||
output.pop('image', None)
|
output.pop('image', None)
|
||||||
output.pop('build', None)
|
output.pop('build', None)
|
||||||
|
@ -1330,7 +1330,7 @@ class ConfigTest(unittest.TestCase):
|
|||||||
'image': 'alpine',
|
'image': 'alpine',
|
||||||
'group_add': ["docker", 777]
|
'group_add': ["docker", 777]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
|
|
||||||
assert actual.services == [
|
assert actual.services == [
|
||||||
@ -1429,6 +1429,162 @@ class ConfigTest(unittest.TestCase):
|
|||||||
'command': 'true',
|
'command': 'true',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def test_merge_logging_v2(self):
|
||||||
|
base = {
|
||||||
|
'image': 'alpine:edge',
|
||||||
|
'logging': {
|
||||||
|
'driver': 'json-file',
|
||||||
|
'options': {
|
||||||
|
'frequency': '2000',
|
||||||
|
'timeout': '23'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
override = {
|
||||||
|
'logging': {
|
||||||
|
'options': {
|
||||||
|
'timeout': '360',
|
||||||
|
'pretty-print': 'on'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
actual = config.merge_service_dicts(base, override, V2_0)
|
||||||
|
assert actual == {
|
||||||
|
'image': 'alpine:edge',
|
||||||
|
'logging': {
|
||||||
|
'driver': 'json-file',
|
||||||
|
'options': {
|
||||||
|
'frequency': '2000',
|
||||||
|
'timeout': '360',
|
||||||
|
'pretty-print': 'on'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def test_merge_logging_v2_override_driver(self):
|
||||||
|
base = {
|
||||||
|
'image': 'alpine:edge',
|
||||||
|
'logging': {
|
||||||
|
'driver': 'json-file',
|
||||||
|
'options': {
|
||||||
|
'frequency': '2000',
|
||||||
|
'timeout': '23'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
override = {
|
||||||
|
'logging': {
|
||||||
|
'driver': 'syslog',
|
||||||
|
'options': {
|
||||||
|
'timeout': '360',
|
||||||
|
'pretty-print': 'on'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
actual = config.merge_service_dicts(base, override, V2_0)
|
||||||
|
assert actual == {
|
||||||
|
'image': 'alpine:edge',
|
||||||
|
'logging': {
|
||||||
|
'driver': 'syslog',
|
||||||
|
'options': {
|
||||||
|
'timeout': '360',
|
||||||
|
'pretty-print': 'on'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def test_merge_logging_v2_no_base_driver(self):
|
||||||
|
base = {
|
||||||
|
'image': 'alpine:edge',
|
||||||
|
'logging': {
|
||||||
|
'options': {
|
||||||
|
'frequency': '2000',
|
||||||
|
'timeout': '23'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
override = {
|
||||||
|
'logging': {
|
||||||
|
'driver': 'json-file',
|
||||||
|
'options': {
|
||||||
|
'timeout': '360',
|
||||||
|
'pretty-print': 'on'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
actual = config.merge_service_dicts(base, override, V2_0)
|
||||||
|
assert actual == {
|
||||||
|
'image': 'alpine:edge',
|
||||||
|
'logging': {
|
||||||
|
'driver': 'json-file',
|
||||||
|
'options': {
|
||||||
|
'frequency': '2000',
|
||||||
|
'timeout': '360',
|
||||||
|
'pretty-print': 'on'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def test_merge_logging_v2_no_drivers(self):
|
||||||
|
base = {
|
||||||
|
'image': 'alpine:edge',
|
||||||
|
'logging': {
|
||||||
|
'options': {
|
||||||
|
'frequency': '2000',
|
||||||
|
'timeout': '23'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
override = {
|
||||||
|
'logging': {
|
||||||
|
'options': {
|
||||||
|
'timeout': '360',
|
||||||
|
'pretty-print': 'on'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
actual = config.merge_service_dicts(base, override, V2_0)
|
||||||
|
assert actual == {
|
||||||
|
'image': 'alpine:edge',
|
||||||
|
'logging': {
|
||||||
|
'options': {
|
||||||
|
'frequency': '2000',
|
||||||
|
'timeout': '360',
|
||||||
|
'pretty-print': 'on'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def test_merge_logging_v2_no_override_options(self):
|
||||||
|
base = {
|
||||||
|
'image': 'alpine:edge',
|
||||||
|
'logging': {
|
||||||
|
'driver': 'json-file',
|
||||||
|
'options': {
|
||||||
|
'frequency': '2000',
|
||||||
|
'timeout': '23'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
override = {
|
||||||
|
'logging': {
|
||||||
|
'driver': 'syslog'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
actual = config.merge_service_dicts(base, override, V2_0)
|
||||||
|
assert actual == {
|
||||||
|
'image': 'alpine:edge',
|
||||||
|
'logging': {
|
||||||
|
'driver': 'syslog',
|
||||||
|
'options': None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def test_external_volume_config(self):
|
def test_external_volume_config(self):
|
||||||
config_details = build_config_details({
|
config_details = build_config_details({
|
||||||
'version': '2',
|
'version': '2',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user