diff options
Diffstat (limited to 'docker/api/service.py')
-rw-r--r-- | docker/api/service.py | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/docker/api/service.py b/docker/api/service.py index c62e494..baebbad 100644 --- a/docker/api/service.py +++ b/docker/api/service.py @@ -1,4 +1,6 @@ +from .. import errors from .. import utils +from ..auth import auth class ServiceApiMixin(object): @@ -8,6 +10,16 @@ class ServiceApiMixin(object): update_config=None, networks=None, endpoint_config=None ): url = self._url('/services/create') + headers = {} + image = task_template.get('ContainerSpec', {}).get('Image', None) + if image is None: + raise errors.DockerException( + 'Missing mandatory Image key in ContainerSpec' + ) + registry, repo_name = auth.resolve_repository_name(image) + auth_header = auth.get_config_header(self, registry) + if auth_header: + headers['X-Registry-Auth'] = auth_header data = { 'Name': name, 'Labels': labels, @@ -17,7 +29,9 @@ class ServiceApiMixin(object): 'Networks': networks, 'Endpoint': endpoint_config } - return self._result(self._post_json(url, data=data), True) + return self._result( + self._post_json(url, data=data, headers=headers), True + ) @utils.minimum_version('1.24') @utils.check_resource @@ -27,6 +41,12 @@ class ServiceApiMixin(object): @utils.minimum_version('1.24') @utils.check_resource + def inspect_task(self, task): + url = self._url('/tasks/{0}', task) + return self._result(self._get(url), True) + + @utils.minimum_version('1.24') + @utils.check_resource def remove_service(self, service): url = self._url('/services/{0}', service) resp = self._delete(url) @@ -42,12 +62,21 @@ class ServiceApiMixin(object): return self._result(self._get(url, params=params), True) @utils.minimum_version('1.24') + def tasks(self, filters=None): + params = { + 'filters': utils.convert_filters(filters) if filters else None + } + url = self._url('/tasks') + return self._result(self._get(url, params=params), True) + + @utils.minimum_version('1.24') @utils.check_resource def update_service(self, service, version, task_template=None, name=None, labels=None, mode=None, update_config=None, networks=None, endpoint_config=None): url = self._url('/services/{0}/update', service) data = {} + headers = {} if name is not None: data['Name'] = name if labels is not None: @@ -55,6 +84,12 @@ class ServiceApiMixin(object): if mode is not None: data['Mode'] = mode if task_template is not None: + image = task_template.get('ContainerSpec', {}).get('Image', None) + if image is not None: + registry, repo_name = auth.resolve_repository_name(image) + auth_header = auth.get_config_header(self, registry) + if auth_header: + headers['X-Registry-Auth'] = auth_header data['TaskTemplate'] = task_template if update_config is not None: data['UpdateConfig'] = update_config @@ -63,6 +98,8 @@ class ServiceApiMixin(object): if endpoint_config is not None: data['Endpoint'] = endpoint_config - resp = self._post_json(url, data=data, params={'version': version}) + resp = self._post_json( + url, data=data, params={'version': version}, headers=headers + ) self._raise_for_status(resp) return True |