mirror of https://github.com/docker/docker-py.git
Merge pull request #1661 from shin-/1622-service-tty
Add support for ContainerSpec.TTY
This commit is contained in:
commit
15030cb680
|
@ -38,6 +38,11 @@ def _check_api_features(version, task_template, update_config):
|
||||||
'Placement.preferences is not supported in'
|
'Placement.preferences is not supported in'
|
||||||
' API version < 1.27'
|
' API version < 1.27'
|
||||||
)
|
)
|
||||||
|
if task_template.container_spec.get('TTY'):
|
||||||
|
if utils.version_lt(version, '1.25'):
|
||||||
|
raise errors.InvalidVersion(
|
||||||
|
'ContainerSpec.TTY is not supported in API version < 1.25'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ServiceApiMixin(object):
|
class ServiceApiMixin(object):
|
||||||
|
|
|
@ -146,6 +146,7 @@ class ServiceCollection(Collection):
|
||||||
of the service. Default: ``None``
|
of the service. Default: ``None``
|
||||||
user (str): User to run commands as.
|
user (str): User to run commands as.
|
||||||
workdir (str): Working directory for commands to run.
|
workdir (str): Working directory for commands to run.
|
||||||
|
tty (boolean): Whether a pseudo-TTY should be allocated.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
(:py:class:`Service`) The created service.
|
(:py:class:`Service`) The created service.
|
||||||
|
@ -212,6 +213,7 @@ CONTAINER_SPEC_KWARGS = [
|
||||||
'mounts',
|
'mounts',
|
||||||
'stop_grace_period',
|
'stop_grace_period',
|
||||||
'secrets',
|
'secrets',
|
||||||
|
'tty'
|
||||||
]
|
]
|
||||||
|
|
||||||
# kwargs to copy straight over to TaskTemplate
|
# kwargs to copy straight over to TaskTemplate
|
||||||
|
|
|
@ -84,10 +84,11 @@ class ContainerSpec(dict):
|
||||||
terminate before forcefully killing it.
|
terminate before forcefully killing it.
|
||||||
secrets (list of py:class:`SecretReference`): List of secrets to be
|
secrets (list of py:class:`SecretReference`): List of secrets to be
|
||||||
made available inside the containers.
|
made available inside the containers.
|
||||||
|
tty (boolean): Whether a pseudo-TTY should be allocated.
|
||||||
"""
|
"""
|
||||||
def __init__(self, image, command=None, args=None, hostname=None, env=None,
|
def __init__(self, image, command=None, args=None, hostname=None, env=None,
|
||||||
workdir=None, user=None, labels=None, mounts=None,
|
workdir=None, user=None, labels=None, mounts=None,
|
||||||
stop_grace_period=None, secrets=None):
|
stop_grace_period=None, secrets=None, tty=None):
|
||||||
self['Image'] = image
|
self['Image'] = image
|
||||||
|
|
||||||
if isinstance(command, six.string_types):
|
if isinstance(command, six.string_types):
|
||||||
|
@ -125,6 +126,9 @@ class ContainerSpec(dict):
|
||||||
raise TypeError('secrets must be a list')
|
raise TypeError('secrets must be a list')
|
||||||
self['Secrets'] = secrets
|
self['Secrets'] = secrets
|
||||||
|
|
||||||
|
if tty is not None:
|
||||||
|
self['TTY'] = tty
|
||||||
|
|
||||||
|
|
||||||
class Mount(dict):
|
class Mount(dict):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -359,6 +359,23 @@ class ServiceTest(BaseAPIIntegrationTest):
|
||||||
assert 'Env' in con_spec
|
assert 'Env' in con_spec
|
||||||
assert con_spec['Env'] == ['DOCKER_PY_TEST=1']
|
assert con_spec['Env'] == ['DOCKER_PY_TEST=1']
|
||||||
|
|
||||||
|
@requires_api_version('1.25')
|
||||||
|
def test_create_service_with_tty(self):
|
||||||
|
container_spec = docker.types.ContainerSpec(
|
||||||
|
BUSYBOX, ['true'], tty=True
|
||||||
|
)
|
||||||
|
task_tmpl = docker.types.TaskTemplate(
|
||||||
|
container_spec,
|
||||||
|
)
|
||||||
|
name = self.get_service_name()
|
||||||
|
svc_id = self.client.create_service(task_tmpl, name=name)
|
||||||
|
svc_info = self.client.inspect_service(svc_id)
|
||||||
|
assert 'TaskTemplate' in svc_info['Spec']
|
||||||
|
assert 'ContainerSpec' in svc_info['Spec']['TaskTemplate']
|
||||||
|
con_spec = svc_info['Spec']['TaskTemplate']['ContainerSpec']
|
||||||
|
assert 'TTY' in con_spec
|
||||||
|
assert con_spec['TTY'] is True
|
||||||
|
|
||||||
def test_create_service_global_mode(self):
|
def test_create_service_global_mode(self):
|
||||||
container_spec = docker.types.ContainerSpec(
|
container_spec = docker.types.ContainerSpec(
|
||||||
BUSYBOX, ['echo', 'hello']
|
BUSYBOX, ['echo', 'hello']
|
||||||
|
|
Loading…
Reference in New Issue