mirror of https://github.com/docker/compose.git
add support for stop_signal to compose file
Signed-off-by: Jonathan Stewmon <jstewmon@rmn.com>
This commit is contained in:
parent
d4b4b126fb
commit
5d8c2d3cec
|
@ -62,6 +62,7 @@ DOCKER_CONFIG_KEYS = [
|
|||
'restart',
|
||||
'security_opt',
|
||||
'stdin_open',
|
||||
'stop_signal',
|
||||
'tty',
|
||||
'user',
|
||||
'volume_driver',
|
||||
|
|
|
@ -94,6 +94,7 @@
|
|||
"restart": {"type": "string"},
|
||||
"security_opt": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
|
||||
"stdin_open": {"type": "boolean"},
|
||||
"stop_signal": {"type": "string"},
|
||||
"tty": {"type": "boolean"},
|
||||
"ulimits": {
|
||||
"type": "object",
|
||||
|
|
|
@ -101,6 +101,7 @@
|
|||
"restart": {"type": "string"},
|
||||
"security_opt": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
|
||||
"stdin_open": {"type": "boolean"},
|
||||
"stop_signal": {"type": "string"},
|
||||
"tty": {"type": "boolean"},
|
||||
"ulimits": {
|
||||
"type": "object",
|
||||
|
|
|
@ -107,6 +107,10 @@ class Container(object):
|
|||
def labels(self):
|
||||
return self.get('Config.Labels') or {}
|
||||
|
||||
@property
|
||||
def stop_signal(self):
|
||||
return self.get('Config.StopSignal')
|
||||
|
||||
@property
|
||||
def log_config(self):
|
||||
return self.get('HostConfig.LogConfig') or None
|
||||
|
@ -132,6 +136,10 @@ class Container(object):
|
|||
def environment(self):
|
||||
return dict(var.split("=", 1) for var in self.get('Config.Env') or [])
|
||||
|
||||
@property
|
||||
def exit_code(self):
|
||||
return self.get('State.ExitCode')
|
||||
|
||||
@property
|
||||
def is_running(self):
|
||||
return self.get('State.Running')
|
||||
|
|
|
@ -717,6 +717,18 @@ class CLITestCase(DockerClientTestCase):
|
|||
self.assertEqual(len(service.containers(stopped=True)), 1)
|
||||
self.assertFalse(service.containers(stopped=True)[0].is_running)
|
||||
|
||||
def test_stop_signal(self):
|
||||
self.base_dir = 'tests/fixtures/stop-signal-composefile'
|
||||
self.dispatch(['up', '-d'], None)
|
||||
service = self.project.get_service('simple')
|
||||
self.assertEqual(len(service.containers()), 1)
|
||||
self.assertTrue(service.containers()[0].is_running)
|
||||
|
||||
self.dispatch(['stop', '-t', '1'], None)
|
||||
self.assertEqual(len(service.containers(stopped=True)), 1)
|
||||
self.assertFalse(service.containers(stopped=True)[0].is_running)
|
||||
self.assertEqual(service.containers(stopped=True)[0].exit_code, 0)
|
||||
|
||||
def test_start_no_containers(self):
|
||||
result = self.dispatch(['start'], returncode=1)
|
||||
assert 'No containers to start' in result.stderr
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
simple:
|
||||
image: busybox:latest
|
||||
command:
|
||||
- sh
|
||||
- '-c'
|
||||
- |
|
||||
trap 'exit 0' SIGINT
|
||||
trap 'exit 1' SIGTERM
|
||||
while true; do :; done
|
||||
stop_signal: SIGINT
|
|
@ -887,6 +887,12 @@ class ServiceTest(DockerClientTestCase):
|
|||
for name in labels_dict:
|
||||
self.assertIn((name, ''), labels)
|
||||
|
||||
def test_stop_signal(self):
|
||||
stop_signal = 'SIGINT'
|
||||
service = self.create_service('web', stop_signal=stop_signal)
|
||||
container = create_and_start_container(service)
|
||||
self.assertEqual(container.stop_signal, stop_signal)
|
||||
|
||||
def test_custom_container_name(self):
|
||||
service = self.create_service('web', container_name='my-web-container')
|
||||
self.assertEqual(service.custom_container_name(), 'my-web-container')
|
||||
|
|
Loading…
Reference in New Issue