mirror of
https://github.com/containers/podman.git
synced 2025-07-01 00:01:02 +08:00
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:
@ -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:
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user