diff options
author | Joffrey F <f.joffrey@gmail.com> | 2017-06-22 16:39:35 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-22 16:39:35 -0700 |
commit | 15030cb6806f49e687e8dc7c33808cd8a010f6dc (patch) | |
tree | 2e1bf000108744ef5170cda365ff0ccad4b575e9 | |
parent | be8c144841d95651911be9f82e545d4e4fcf2ab0 (diff) | |
parent | 06d2553b9c3a4c91d1ef2110ea120da15605de2f (diff) | |
download | docker-py-15030cb6806f49e687e8dc7c33808cd8a010f6dc.tar.gz |
Merge pull request #1661 from shin-/1622-service-tty
Add support for ContainerSpec.TTY
-rw-r--r-- | docker/api/service.py | 5 | ||||
-rw-r--r-- | docker/models/services.py | 2 | ||||
-rw-r--r-- | docker/types/services.py | 6 | ||||
-rw-r--r-- | tests/integration/api_service_test.py | 17 |
4 files changed, 29 insertions, 1 deletions
diff --git a/docker/api/service.py b/docker/api/service.py index 0f14776..cc16cc3 100644 --- a/docker/api/service.py +++ b/docker/api/service.py @@ -38,6 +38,11 @@ def _check_api_features(version, task_template, update_config): 'Placement.preferences is not supported in' ' 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): diff --git a/docker/models/services.py b/docker/models/services.py index c10804d..e1e2ea6 100644 --- a/docker/models/services.py +++ b/docker/models/services.py @@ -146,6 +146,7 @@ class ServiceCollection(Collection): of the service. Default: ``None`` user (str): User to run commands as. workdir (str): Working directory for commands to run. + tty (boolean): Whether a pseudo-TTY should be allocated. Returns: (:py:class:`Service`) The created service. @@ -212,6 +213,7 @@ CONTAINER_SPEC_KWARGS = [ 'mounts', 'stop_grace_period', 'secrets', + 'tty' ] # kwargs to copy straight over to TaskTemplate diff --git a/docker/types/services.py b/docker/types/services.py index 9cec34e..8411b70 100644 --- a/docker/types/services.py +++ b/docker/types/services.py @@ -84,10 +84,11 @@ class ContainerSpec(dict): terminate before forcefully killing it. secrets (list of py:class:`SecretReference`): List of secrets to be 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, 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 if isinstance(command, six.string_types): @@ -125,6 +126,9 @@ class ContainerSpec(dict): raise TypeError('secrets must be a list') self['Secrets'] = secrets + if tty is not None: + self['TTY'] = tty + class Mount(dict): """ diff --git a/tests/integration/api_service_test.py b/tests/integration/api_service_test.py index 8ac852d..54111a7 100644 --- a/tests/integration/api_service_test.py +++ b/tests/integration/api_service_test.py @@ -359,6 +359,23 @@ class ServiceTest(BaseAPIIntegrationTest): assert 'Env' in con_spec 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): container_spec = docker.types.ContainerSpec( BUSYBOX, ['echo', 'hello'] |