mirror of https://github.com/docker/compose.git
Fix service label parsing
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
parent
fb113b731c
commit
03fefaca39
|
@ -706,14 +706,7 @@ def process_service(service_config):
|
||||||
]
|
]
|
||||||
|
|
||||||
if 'build' in service_dict:
|
if 'build' in service_dict:
|
||||||
if isinstance(service_dict['build'], six.string_types):
|
process_build_section(service_dict, working_dir)
|
||||||
service_dict['build'] = resolve_build_path(working_dir, service_dict['build'])
|
|
||||||
elif isinstance(service_dict['build'], dict):
|
|
||||||
if 'context' in service_dict['build']:
|
|
||||||
path = service_dict['build']['context']
|
|
||||||
service_dict['build']['context'] = resolve_build_path(working_dir, path)
|
|
||||||
if 'labels' in service_dict['build']:
|
|
||||||
service_dict['build']['labels'] = parse_labels(service_dict['build']['labels'])
|
|
||||||
|
|
||||||
if 'volumes' in service_dict and service_dict.get('volume_driver') is None:
|
if 'volumes' in service_dict and service_dict.get('volume_driver') is None:
|
||||||
service_dict['volumes'] = resolve_volume_paths(working_dir, service_dict)
|
service_dict['volumes'] = resolve_volume_paths(working_dir, service_dict)
|
||||||
|
@ -721,6 +714,9 @@ def process_service(service_config):
|
||||||
if 'sysctls' in service_dict:
|
if 'sysctls' in service_dict:
|
||||||
service_dict['sysctls'] = build_string_dict(parse_sysctls(service_dict['sysctls']))
|
service_dict['sysctls'] = build_string_dict(parse_sysctls(service_dict['sysctls']))
|
||||||
|
|
||||||
|
if 'labels' in service_dict:
|
||||||
|
service_dict['labels'] = parse_labels(service_dict['labels'])
|
||||||
|
|
||||||
service_dict = process_depends_on(service_dict)
|
service_dict = process_depends_on(service_dict)
|
||||||
|
|
||||||
for field in ['dns', 'dns_search', 'tmpfs']:
|
for field in ['dns', 'dns_search', 'tmpfs']:
|
||||||
|
@ -734,6 +730,17 @@ def process_service(service_config):
|
||||||
return service_dict
|
return service_dict
|
||||||
|
|
||||||
|
|
||||||
|
def process_build_section(service_dict, working_dir):
|
||||||
|
if isinstance(service_dict['build'], six.string_types):
|
||||||
|
service_dict['build'] = resolve_build_path(working_dir, service_dict['build'])
|
||||||
|
elif isinstance(service_dict['build'], dict):
|
||||||
|
if 'context' in service_dict['build']:
|
||||||
|
path = service_dict['build']['context']
|
||||||
|
service_dict['build']['context'] = resolve_build_path(working_dir, path)
|
||||||
|
if 'labels' in service_dict['build']:
|
||||||
|
service_dict['build']['labels'] = parse_labels(service_dict['build']['labels'])
|
||||||
|
|
||||||
|
|
||||||
def process_ports(service_dict):
|
def process_ports(service_dict):
|
||||||
if 'ports' not in service_dict:
|
if 'ports' not in service_dict:
|
||||||
return service_dict
|
return service_dict
|
||||||
|
|
|
@ -407,6 +407,32 @@ class ConfigTest(unittest.TestCase):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def test_load_config_service_labels(self):
|
||||||
|
base_file = config.ConfigFile(
|
||||||
|
'base.yaml',
|
||||||
|
{
|
||||||
|
'version': '2.1',
|
||||||
|
'services': {
|
||||||
|
'web': {
|
||||||
|
'image': 'example/web',
|
||||||
|
'labels': ['label_key=label_val']
|
||||||
|
},
|
||||||
|
'db': {
|
||||||
|
'image': 'example/db',
|
||||||
|
'labels': {
|
||||||
|
'label_key': 'label_val'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
details = config.ConfigDetails('.', [base_file])
|
||||||
|
service_dicts = config.load(details).services
|
||||||
|
for service in service_dicts:
|
||||||
|
assert service['labels'] == {
|
||||||
|
'label_key': 'label_val'
|
||||||
|
}
|
||||||
|
|
||||||
def test_load_config_volume_and_network_labels(self):
|
def test_load_config_volume_and_network_labels(self):
|
||||||
base_file = config.ConfigFile(
|
base_file = config.ConfigFile(
|
||||||
'base.yaml',
|
'base.yaml',
|
||||||
|
@ -435,30 +461,23 @@ class ConfigTest(unittest.TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
details = config.ConfigDetails('.', [base_file])
|
details = config.ConfigDetails('.', [base_file])
|
||||||
network_dict = config.load(details).networks
|
loaded_config = config.load(details)
|
||||||
volume_dict = config.load(details).volumes
|
|
||||||
|
|
||||||
self.assertEqual(
|
assert loaded_config.networks == {
|
||||||
network_dict,
|
|
||||||
{
|
|
||||||
'with_label': {
|
'with_label': {
|
||||||
'labels': {
|
'labels': {
|
||||||
'label_key': 'label_val'
|
'label_key': 'label_val'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
|
||||||
|
|
||||||
self.assertEqual(
|
assert loaded_config.volumes == {
|
||||||
volume_dict,
|
|
||||||
{
|
|
||||||
'with_label': {
|
'with_label': {
|
||||||
'labels': {
|
'labels': {
|
||||||
'label_key': 'label_val'
|
'label_key': 'label_val'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
|
||||||
|
|
||||||
def test_load_config_invalid_service_names(self):
|
def test_load_config_invalid_service_names(self):
|
||||||
for invalid_name in ['?not?allowed', ' ', '', '!', '/', '\xe2']:
|
for invalid_name in ['?not?allowed', ' ', '', '!', '/', '\xe2']:
|
||||||
|
|
Loading…
Reference in New Issue