mirror of
https://github.com/docker/compose.git
synced 2025-07-22 21:24:38 +02:00
Move restart spec to the config.types module.
Signed-off-by: Daniel Nephin <dnephin@docker.com>
This commit is contained in:
parent
068edfa313
commit
12b82a20ff
@ -14,6 +14,7 @@ from .errors import CircularReference
|
|||||||
from .errors import ComposeFileNotFound
|
from .errors import ComposeFileNotFound
|
||||||
from .errors import ConfigurationError
|
from .errors import ConfigurationError
|
||||||
from .interpolation import interpolate_environment_variables
|
from .interpolation import interpolate_environment_variables
|
||||||
|
from .types import parse_restart_spec
|
||||||
from .types import VolumeFromSpec
|
from .types import VolumeFromSpec
|
||||||
from .validation import validate_against_fields_schema
|
from .validation import validate_against_fields_schema
|
||||||
from .validation import validate_against_service_schema
|
from .validation import validate_against_service_schema
|
||||||
@ -392,6 +393,9 @@ def finalize_service(service_config):
|
|||||||
service_dict['volumes_from'] = [
|
service_dict['volumes_from'] = [
|
||||||
VolumeFromSpec.parse(vf) for vf in service_dict['volumes_from']]
|
VolumeFromSpec.parse(vf) for vf in service_dict['volumes_from']]
|
||||||
|
|
||||||
|
if 'restart' in service_dict:
|
||||||
|
service_dict['restart'] = parse_restart_spec(service_dict['restart'])
|
||||||
|
|
||||||
return service_dict
|
return service_dict
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,3 +26,20 @@ class VolumeFromSpec(namedtuple('_VolumeFromSpec', 'source mode')):
|
|||||||
source, mode = parts
|
source, mode = parts
|
||||||
|
|
||||||
return cls(source, mode)
|
return cls(source, mode)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_restart_spec(restart_config):
|
||||||
|
if not restart_config:
|
||||||
|
return None
|
||||||
|
parts = restart_config.split(':')
|
||||||
|
if len(parts) > 2:
|
||||||
|
raise ConfigurationError(
|
||||||
|
"Restart %s has incorrect format, should be "
|
||||||
|
"mode[:max_retry]" % restart_config)
|
||||||
|
if len(parts) == 2:
|
||||||
|
name, max_retry_count = parts
|
||||||
|
else:
|
||||||
|
name, = parts
|
||||||
|
max_retry_count = 0
|
||||||
|
|
||||||
|
return {'Name': name, 'MaximumRetryCount': int(max_retry_count)}
|
||||||
|
@ -648,8 +648,6 @@ class Service(object):
|
|||||||
if isinstance(dns_search, six.string_types):
|
if isinstance(dns_search, six.string_types):
|
||||||
dns_search = [dns_search]
|
dns_search = [dns_search]
|
||||||
|
|
||||||
restart = parse_restart_spec(options.get('restart', None))
|
|
||||||
|
|
||||||
extra_hosts = build_extra_hosts(options.get('extra_hosts', None))
|
extra_hosts = build_extra_hosts(options.get('extra_hosts', None))
|
||||||
read_only = options.get('read_only', None)
|
read_only = options.get('read_only', None)
|
||||||
|
|
||||||
@ -667,7 +665,7 @@ class Service(object):
|
|||||||
devices=devices,
|
devices=devices,
|
||||||
dns=dns,
|
dns=dns,
|
||||||
dns_search=dns_search,
|
dns_search=dns_search,
|
||||||
restart_policy=restart,
|
restart_policy=options.get('restart'),
|
||||||
cap_add=cap_add,
|
cap_add=cap_add,
|
||||||
cap_drop=cap_drop,
|
cap_drop=cap_drop,
|
||||||
mem_limit=options.get('mem_limit'),
|
mem_limit=options.get('mem_limit'),
|
||||||
@ -1043,24 +1041,6 @@ def build_container_labels(label_options, service_labels, number, config_hash):
|
|||||||
return labels
|
return labels
|
||||||
|
|
||||||
|
|
||||||
# Restart policy
|
|
||||||
|
|
||||||
|
|
||||||
def parse_restart_spec(restart_config):
|
|
||||||
if not restart_config:
|
|
||||||
return None
|
|
||||||
parts = restart_config.split(':')
|
|
||||||
if len(parts) > 2:
|
|
||||||
raise ConfigError("Restart %s has incorrect format, should be "
|
|
||||||
"mode[:max_retry]" % restart_config)
|
|
||||||
if len(parts) == 2:
|
|
||||||
name, max_retry_count = parts
|
|
||||||
else:
|
|
||||||
name, = parts
|
|
||||||
max_retry_count = 0
|
|
||||||
|
|
||||||
return {'Name': name, 'MaximumRetryCount': int(max_retry_count)}
|
|
||||||
|
|
||||||
# Ulimits
|
# Ulimits
|
||||||
|
|
||||||
|
|
||||||
|
@ -786,23 +786,21 @@ class ServiceTest(DockerClientTestCase):
|
|||||||
container = create_and_start_container(service)
|
container = create_and_start_container(service)
|
||||||
self.assertIsNone(container.get('HostConfig.Dns'))
|
self.assertIsNone(container.get('HostConfig.Dns'))
|
||||||
|
|
||||||
def test_dns_single_value(self):
|
|
||||||
service = self.create_service('web', dns='8.8.8.8')
|
|
||||||
container = create_and_start_container(service)
|
|
||||||
self.assertEqual(container.get('HostConfig.Dns'), ['8.8.8.8'])
|
|
||||||
|
|
||||||
def test_dns_list(self):
|
def test_dns_list(self):
|
||||||
service = self.create_service('web', dns=['8.8.8.8', '9.9.9.9'])
|
service = self.create_service('web', dns=['8.8.8.8', '9.9.9.9'])
|
||||||
container = create_and_start_container(service)
|
container = create_and_start_container(service)
|
||||||
self.assertEqual(container.get('HostConfig.Dns'), ['8.8.8.8', '9.9.9.9'])
|
self.assertEqual(container.get('HostConfig.Dns'), ['8.8.8.8', '9.9.9.9'])
|
||||||
|
|
||||||
def test_restart_always_value(self):
|
def test_restart_always_value(self):
|
||||||
service = self.create_service('web', restart='always')
|
service = self.create_service('web', restart={'Name': 'always'})
|
||||||
container = create_and_start_container(service)
|
container = create_and_start_container(service)
|
||||||
self.assertEqual(container.get('HostConfig.RestartPolicy.Name'), 'always')
|
self.assertEqual(container.get('HostConfig.RestartPolicy.Name'), 'always')
|
||||||
|
|
||||||
def test_restart_on_failure_value(self):
|
def test_restart_on_failure_value(self):
|
||||||
service = self.create_service('web', restart='on-failure:5')
|
service = self.create_service('web', restart={
|
||||||
|
'Name': 'on-failure',
|
||||||
|
'MaximumRetryCount': 5
|
||||||
|
})
|
||||||
container = create_and_start_container(service)
|
container = create_and_start_container(service)
|
||||||
self.assertEqual(container.get('HostConfig.RestartPolicy.Name'), 'on-failure')
|
self.assertEqual(container.get('HostConfig.RestartPolicy.Name'), 'on-failure')
|
||||||
self.assertEqual(container.get('HostConfig.RestartPolicy.MaximumRetryCount'), 5)
|
self.assertEqual(container.get('HostConfig.RestartPolicy.MaximumRetryCount'), 5)
|
||||||
@ -817,17 +815,7 @@ class ServiceTest(DockerClientTestCase):
|
|||||||
container = create_and_start_container(service)
|
container = create_and_start_container(service)
|
||||||
self.assertEqual(container.get('HostConfig.CapDrop'), ['SYS_ADMIN', 'NET_ADMIN'])
|
self.assertEqual(container.get('HostConfig.CapDrop'), ['SYS_ADMIN', 'NET_ADMIN'])
|
||||||
|
|
||||||
def test_dns_search_no_value(self):
|
def test_dns_search(self):
|
||||||
service = self.create_service('web')
|
|
||||||
container = create_and_start_container(service)
|
|
||||||
self.assertIsNone(container.get('HostConfig.DnsSearch'))
|
|
||||||
|
|
||||||
def test_dns_search_single_value(self):
|
|
||||||
service = self.create_service('web', dns_search='example.com')
|
|
||||||
container = create_and_start_container(service)
|
|
||||||
self.assertEqual(container.get('HostConfig.DnsSearch'), ['example.com'])
|
|
||||||
|
|
||||||
def test_dns_search_list(self):
|
|
||||||
service = self.create_service('web', dns_search=['dc1.example.com', 'dc2.example.com'])
|
service = self.create_service('web', dns_search=['dc1.example.com', 'dc2.example.com'])
|
||||||
container = create_and_start_container(service)
|
container = create_and_start_container(service)
|
||||||
self.assertEqual(container.get('HostConfig.DnsSearch'), ['dc1.example.com', 'dc2.example.com'])
|
self.assertEqual(container.get('HostConfig.DnsSearch'), ['dc1.example.com', 'dc2.example.com'])
|
||||||
|
@ -124,7 +124,7 @@ class CLITestCase(unittest.TestCase):
|
|||||||
mock_project.get_service.return_value = Service(
|
mock_project.get_service.return_value = Service(
|
||||||
'service',
|
'service',
|
||||||
client=mock_client,
|
client=mock_client,
|
||||||
restart='always',
|
restart={'Name': 'always', 'MaximumRetryCount': 0},
|
||||||
image='someimage')
|
image='someimage')
|
||||||
command.run(mock_project, {
|
command.run(mock_project, {
|
||||||
'SERVICE': 'service',
|
'SERVICE': 'service',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user