diff options
Diffstat (limited to 'docker/models/images.py')
-rw-r--r-- | docker/models/images.py | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/docker/models/images.py b/docker/models/images.py index 7d9ab70..28b1fd3 100644 --- a/docker/models/images.py +++ b/docker/models/images.py @@ -59,7 +59,7 @@ class Image(Model): """ return self.client.api.history(self.id) - def save(self, chunk_size=DEFAULT_DATA_CHUNK_SIZE): + def save(self, chunk_size=DEFAULT_DATA_CHUNK_SIZE, named=False): """ Get a tarball of an image. Similar to the ``docker save`` command. @@ -67,6 +67,12 @@ class Image(Model): chunk_size (int): The generator will return up to that much data per iteration, but may return less. If ``None``, data will be streamed as it is received. Default: 2 MB + named (str or bool): If ``False`` (default), the tarball will not + retain repository and tag information for this image. If set + to ``True``, the first tag in the :py:attr:`~tags` list will + be used to identify the image. Alternatively, any element of + the :py:attr:`~tags` list can be used as an argument to use + that specific tag as the saved identifier. Returns: (generator): A stream of raw archive data. @@ -83,7 +89,17 @@ class Image(Model): >>> f.write(chunk) >>> f.close() """ - return self.client.api.get_image(self.id, chunk_size) + img = self.id + if named: + img = self.tags[0] if self.tags else img + if isinstance(named, six.string_types): + if named not in self.tags: + raise InvalidArgument( + "{} is not a valid tag for this image".format(named) + ) + img = named + + return self.client.api.get_image(img, chunk_size) def tag(self, repository, tag=None, **kwargs): """ |