Implement podman.containers.commit()

- Add API support
- Update tests
- Make changes from reviews

Signed-off-by: Jhon Honce <jhonce@redhat.com>

Closes: #798
Approved by: mheon
This commit is contained in:
Jhon Honce
2018-05-17 11:57:59 -07:00
committed by Atomic Bot
parent 228c71b1da
commit 4b804e8516
4 changed files with 87 additions and 17 deletions

View File

@ -1,6 +1,7 @@
"""Models for manipulating containers and storage."""
import collections
import functools
import getpass
import json
import signal
@ -93,6 +94,45 @@ class Container(collections.UserDict):
results = podman.ExportContainer(self.id, target)
return results['tarfile']
def commit(self,
image_name,
*args,
changes=[],
message='',
pause=True,
**kwargs):
"""Create image from container.
All changes overwrite existing values.
See inspect() to obtain current settings.
Changes:
CMD=/usr/bin/zsh
ENTRYPOINT=/bin/sh date
ENV=TEST=test_containers.TestContainers.test_commit
EXPOSE=8888/tcp
LABEL=unittest=test_commit
USER=bozo:circus
VOLUME=/data
WORKDIR=/data/application
"""
# TODO: Clean up *args, **kwargs after Commit() is complete
try:
author = kwargs.get('author', getpass.getuser())
except Exception:
author = ''
for c in changes:
if c.startswith('LABEL=') and c.count('=') < 2:
raise ValueError(
'LABEL should have the format: LABEL=label=value, not {}'.
format(c))
with self._client() as podman:
results = podman.Commit(self.id, image_name, changes, author,
message, pause)
return results['image']
def start(self):
"""Start container, return id on success."""
with self._client() as podman:

View File

@ -95,13 +95,6 @@ class Images(object):
results = podman.CreateImage()
return results['image']
def create_from(self, *args, **kwargs):
"""Create image from container."""
# TODO: Should this be on container?
with self._client() as podman:
results = podman.CreateFromContainer()
return results['image']
def build(self, *args, **kwargs):
"""Build container from image.
@ -135,3 +128,7 @@ class Images(object):
results = podman.SearchImage(id)
for img in results['images']:
yield img
def get(self, id):
"""Get Image from id."""
return next((i for i in self.list() if i.id == id), None)